我想以粗体突出显示各个轴标签。我知道@MrFlick的这个answer,但我无法弄清楚如何为多个项目做 a), b)是否可以使用标签的名称而不是该列表(或表达式)中的项目编号。
以下是一个示例数据集:
require(ggplot2)
require(dplyr)
set.seed(36)
xx<-data.frame(YEAR=rep(c("X","Y"), each=20),
CLONE=rep(c("A","B","C","D","E"), each=4, 2),
TREAT=rep(c("T1","T2","T3","C"), 10),
VALUE=sample(c(1:10), 40, replace=T))
然后我根据一个特定的因子组合对我的标签进行排序,然后应该在一个图的多个面板上进行维护。请参阅我之前的问题here。
clone_order <- xx %>% subset(TREAT == "C" & YEAR == "X") %>%
arrange(-VALUE) %>% select(CLONE) %>% unlist()
xx <- xx %>% mutate(CLONE = factor(CLONE, levels = clone_order))
ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) +
geom_bar(stat="identity", position="dodge") +
facet_wrap(~TREAT)
现在我要加注Clone
A
,B
和E
。我相信这会以某种方式起作用,但我无法弄清楚如何。理想情况下,通过 a)使用列表/表达式中的项目编号以及 b)来了解如何执行此操作会很棒,例如使用标签,例如A
,B
和E
。
答案 0 :(得分:11)
这是创建增强矢量的通用方法:
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"))))
答案 1 :(得分:9)
我不确定您是否可以按名称映射标签特征,但绝对有可能通过调用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轴标签(五个元素)的长度相同。这会产生:
答案 2 :(得分:6)
您可以在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))
你可以用编程方式创建表达式向量,而不是输入它,但是这样做的方法就是现在逃避我。