def stringToNumbers(ord(message)):
return stringToNumbers
stringToNumbers.append = (ord[0])
stringToNumbers = ("morocco")
Вот общий метод создания вектора смещения:
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"))))
Вы можете создать именованный вектор выражений (которые превращают текст в полужирный) в 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))
Возможно, вы можете создать вектор выражений программным путем, а не печатать его, но способ сделать это сейчас ускользает.
Я не уверен, можете ли вы сопоставить характеристики метки по имени, но это определенно возможно сделать по положению с вызовом 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 (пять элементов). Это дает:
axis.text.x
- определенно вариант, но немного громоздкий, так как у меня 34 уровня фактора. Именно поэтому я надеялся как-то просто указать те, которые я хочу быть смелыми по имени, а не подсчитывать позицию. Я поддержал ваш ответ, но хотел бы открыть его немного дольше. Может, у кого-то другая идея.
– Stefan
26 September 2016 в 04:53
element_text
работает только по положению и игнорирует именование. Одним из вариантов сокращения ввода было бы разумное использование rep
, например: c(rep('plain', 10), rep(c('bold', 'plain', each = 2))
сделало бы первые 10 ярлыков равными, следующие 2 жирные и следующие 2 равнины.
– jdobres
26 September 2016 в 05:01
size=
вaxis.text.x
? – Stefan 26 September 2016 в 13:18element_text()
векторизованы, но вам нужно будет скопировать и адаптировать эту функцию в качествеsize
чейнджера против чейнджераface
. – hrbrmstr 26 September 2016 в 13:25colorado' 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