Типовая метка оцифрованной метки по оси для выделения жирным шрифтом с использованием ggplot [duplicate]

def stringToNumbers(ord(message)):
    return stringToNumbers
    stringToNumbers.append = (ord[0])
    stringToNumbers = ("morocco")
6
задан Community 23 May 2017 в 11:45
поделиться

3 ответа

Вот общий метод создания вектора смещения:

colorado <- function(src, boulder) {
  if (!is.factor(src)) src <- factor(src)                   # make sure it's a factor
  src_levels <- levels(src)                                 # retrieve the levels in their order
  brave <- boulder %in% src_levels                          # make sure everything we want to make bold is actually in the factor levels
  if (all(brave)) {                                         # if so
    b_pos <- purrr::map_int(boulder, ~which(.==src_levels)) # then find out where they are
    b_vec <- rep("plain", length(src_levels))               # make'm all plain first
    b_vec[b_pos] <- "bold"                                  # make our targets bold
    b_vec                                                   # return the new vector
  } else {
    stop("All elements of 'boulder' must be in src")
  }
}

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
  geom_bar(stat="identity", position="dodge") +
  facet_wrap(~TREAT) +
  theme(axis.text.x=element_text(face=colorado(xx$CLONE, c("A", "B", "E"))))
9
ответ дан hrbrmstr 19 August 2018 в 19:48
поделиться
  • 1
    Вау, это здорово! Благодаря! Еще один вопрос: возможно ли, кроме смелости, увеличить размер шрифта жирной метки, скажем 2pt, используя size= в axis.text.x? – Stefan 26 September 2016 в 13:18
  • 2
    Айя. Большинство параметров element_text() векторизованы, но вам нужно будет скопировать и адаптировать эту функцию в качестве size чейнджера против чейнджера face. – hrbrmstr 26 September 2016 в 13:25
  • 3
    Попытка адаптировать это, чтобы альтернативно сверху или снизу оправдывать выбранные метки. Я написал код, но он просто создает пустой сюжет. Заменена "обычная" с 1,0 и "полужирным шрифтом" с 0.0 в вашей теме colorado' function. And in plot call: (axis.text.x = element_text (vjust = colorado2 (xx $ CLONE, c («A», «B», «E»)))). Однако изменения занимают половину сюжета, который я не хочу. Любые идеи о том, как масштабировать 0 или 1 в области ярлыков графика @hrbrmstr? – user2498193 16 January 2018 в 17:21
  • 4
    задать новый вопрос anony-user @ user2498193 – hrbrmstr 16 January 2018 в 17:35
  • 5
    ok no problem @hrbrmstr - новый вопрос: stackoverflow.com/questions/48286116/… Цените свою помощь, если у вас есть время! – user2498193 16 January 2018 в 17:50

Вы можете создать именованный вектор выражений (которые превращают текст в полужирный) в scale_x_discrete и использовать parse=TRUE для оценки выражений:

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
    geom_bar(stat="identity", position="dodge") +
    facet_wrap(~TREAT) +
    scale_x_discrete(labels=c("A"=expression(bold(A)), "C"=expression(bold(C)),
                              "E"=expression(bold(E)), parse=TRUE))

Возможно, вы можете создать вектор выражений программным путем, а не печатать его, но способ сделать это сейчас ускользает.

4
ответ дан eipi10 19 August 2018 в 19:48
поделиться
  • 1
    Спасибо @ eipi10! Мне тоже нравится этот, так как это просто (т. Е. Upvote). Однако ответ от @hrbrmstr дает мне больше контроля. – Stefan 26 September 2016 в 14:34
  • 2
    Да, мне тоже нравится его ответ. – eipi10 26 September 2016 в 14:54

Я не уверен, можете ли вы сопоставить характеристики метки по имени, но это определенно возможно сделать по положению с вызовом theme:

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
  geom_bar(stat="identity", position="dodge") +
  facet_wrap(~TREAT) +
  theme(axis.text.x = element_text(face = c('bold', 'bold', 'plain', 'plain', 'bold')))

Обратите внимание, что перечисленные грани шрифта для axis.text.x имеют ту же длину, что и метки вашей оси x (пять элементов). Это дает:

8
ответ дан jdobres 19 August 2018 в 19:48
поделиться
  • 1
    Благодаря! Использование axis.text.x - определенно вариант, но немного громоздкий, так как у меня 34 уровня фактора. Именно поэтому я надеялся как-то просто указать те, которые я хочу быть смелыми по имени, а не подсчитывать позицию. Я поддержал ваш ответ, но хотел бы открыть его немного дольше. Может, у кого-то другая идея. – Stefan 26 September 2016 в 04:53
  • 2
    Играя с этим немного больше, похоже, что element_text работает только по положению и игнорирует именование. Одним из вариантов сокращения ввода было бы разумное использование rep, например: c(rep('plain', 10), rep(c('bold', 'plain', each = 2)) сделало бы первые 10 ярлыков равными, следующие 2 жирные и следующие 2 равнины. – jdobres 26 September 2016 в 05:01
Другие вопросы по тегам:

Похожие вопросы: