使用ggplot2以粗体突出显示各个轴标签 [英] Highlighting individual axis labels in bold using ggplot2
问题描述
我想突出显示单独的轴标签。我知道这@@MrFlick
现在我想粗体克隆
A
, B
和电子
。我相信这会起作用,但我无法弄清楚。理想情况下,通过 a)使用列表/表达式中的项目编号以及 b)通过使用标签来了解如何执行此操作,这非常棒。 A
, B
和 E
。
这是一个创建插件向量的通用方法:
<$ (src,boulder){
if(!is.factor(src))src < - factor(src)#确保它是一个因子
src_levels< - 水平(src)#按照顺序检索水平
勇敢< - boulder%in%src_levels#确保我们想要加粗的所有内容实际上都在因子水平
if(all(brave) ){#if if
b_pos< - purrr :: map_int(boulder,〜which(。== src_levels))#然后找出它们在哪里
b_vec< - rep(plain, length(src_levels))#make'm all plain first
b_vec [b_pos]< - bold#使我们的目标变成粗体
b_vec #返回新的向量
} else {
stop(boulder的所有元素都必须在src中)
}
}
ggplot (xx,aes(x = CLONE,y = VALUE,fill = YEAR))+
geom_bar(stat =identity,position =dodge)+
facet_wrap(〜TREAT)+
主题(axis.text.x = element_text(face = colorado(xx $ CLONE,c(A,B,E))))
I want to highlight individual axis labels in bold. I am aware of this answer by @MrFlick but I can't figure out how to do this a) for more than one item, and b) whether it's possible to use the names of the labels instead of the number of the item in that list (or expression).
Here is an example dataset:
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))
Then I am sorting my labels according to a particular factor combination which is then supposed to be maintained across multiple panels of a plot. See my previous question 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)
Now I want to bold Clone
A
, B
and E
. I am sure this will work somehow but I cannot figure out how. Ideally, it would be great to know how to do this by a) using the number of the item in the list/expression, and b) by using the label, e.g. A
, B
and E
.
Here's a generic method to create the emboldening vector:
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"))))
这篇关于使用ggplot2以粗体突出显示各个轴标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!