ggplot2每个图例标签的不同文本颜色

大脑食物

我试图获取图例标签的文本颜色以匹配其关联的填充/线条颜色。理想情况下,我想将标签颜色映射到美学上,但是在这一点上,我很乐意手动指定颜色。这是一些使用内置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当前是否可以进行此类操作?

迈克·H

首先,我尝试使用当前尝试的不同版本进行实验,并使用,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)

在此处输入图片说明

创建gbgb2的前3行label_text旨在动态地达到我们要修改的最低级别。有了获取对象的路径后,我们可以使用修改它们mapply并将更改col为所需的矢量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章