我试图获取图例标签的文本颜色以匹配其关联的填充/线条颜色。理想情况下,我想将标签颜色映射到美学上,但是在这一点上,我很乐意手动指定颜色。这是一些使用内置PlantGrowth数据集的测试代码,其中包括我手动指定标签颜色的尝试:
ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) +
geom_boxplot() +
scale_fill_discrete(guide=guide_legend(label.theme=element_text(angle=0,
size=9,
color=c("red",
"green",
"blue"))))
当我运行此代码时,图例标签全部使用我指定的第一种颜色(红色)。相反,我希望每个图例标签使用不同的颜色。ggplot2当前是否可以进行此类操作?
首先,我尝试使用当前尝试的不同版本进行实验,并使用,theme(legend.text = element_text(color = c("red","blue","green")))
但以上方法均无效,因此我不得不转至gtable
。
您想要的是可能的,但是需要您非常熟悉gtable
s和gtable
程序包。这看起来很混乱,因为有很多嵌套列表,而我们最终要修改的对象位于一个列表的底部。只要忍受我:
library(ggplot2)
library(gtable)
library(grid)
pGrob <- ggplotGrob(ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) +
geom_boxplot() +
scale_fill_discrete(guide=guide_legend(label.theme=element_text(angle=0,
size=9))))
gb <- which(grepl("guide-box", pGrob$layout$name))
gb2 <- which(grepl("guides", pGrob$grobs[[gb]]$layout$name))
label_text <- which(grepl("label",pGrob$grobs[[gb]]$grobs[[gb2]]$layout$name))
pGrob$grobs[[gb]]$grobs[[gb2]]$grobs[label_text] <- mapply(FUN = function(x, y) {x$gp$col <- y; return(x)},
x = pGrob$grobs[[gb]]$grobs[[gb2]]$grobs[label_text],
y = c("red", "green", "blue"), SIMPLIFY = FALSE)
grid.draw(pGrob)
创建gb
,gb2
和的前3行label_text
旨在动态地达到我们要修改的最低级别。有了获取对象的路径后,我们可以使用修改它们mapply
并将更改col
为所需的矢量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句