我试图获取图例标签的文本颜色以匹配其关联的填充/线条颜色。理想情况下,我希望将标签颜色映射到美学上,但是在这一点上,我很乐意手动指定颜色。这是一些使用内置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"))))
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,图例标签全部使用我指定的第一种颜色(红色)。相反,我希望每个图例标签使用不同的颜色。ggplot2当前是否可以进行此类操作?
首先,我尝试使用当前尝试的不同版本进行实验,并使用,theme(legend.text = element_text(color = c("red","blue","green")))但上述方法均无效,因此我不得不转至gtable。
您想要的是可能的,但是需要您非常熟悉gtables和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)
Run Code Online (Sandbox Code Playgroud)
创建gb,gb2和的前3行label_text旨在动态地达到我们要修改的最低级别。有了获取对象的路径后,我们可以使用修改它们mapply并将更改col为所需的矢量。
| 归档时间: |
|
| 查看次数: |
1250 次 |
| 最近记录: |