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

7

我正在尝试使图例标签的文字颜色与其相关的填充/线条颜色匹配。理想情况下,我希望将标签颜色映射到美学上,但是目前我手动指定颜色也很满意。以下是使用内置的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中,目前是否支持这种操作?

1个回答

6
首先,我尝试了不同版本的你当前的尝试以及使用 theme(legend.text = element_text(color = c("red","blue","green"))),但以上方法都没有起作用,所以我不得不使用 gtable
你想要的是可能的,但需要你非常熟悉 gtablegtable 包。这将看起来非常混乱,因为有许多嵌套的列表,而我们最终想修改的对象在其中一个列表的底部。请耐心等待:
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)

创建gbgb2label_text的前3行代码都旨在动态获取我们想要修改的底层。一旦我们拥有了获取对象的路径,我们就可以使用mapply来修改它们,并将col更改为您想要的向量。

输入图像描述


1
非常好的答案!感谢您。我只想补充一点,如果您有多个图例,并且只想将此更改应用于其中一个,则需要小心如何为gb2分配值。由于所有图例都将具有“guides”名称,因此您需要检查要编辑的图例并相应地设置gb2。这样做不太自动化,需要更多的手动操作。 - Brain_Food

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接