删除 ggplot 中的“组”图例

Posted

技术标签:

【中文标题】删除 ggplot 中的“组”图例【英文标题】:Remove "group" legend in ggplot 【发布时间】:2018-11-03 22:23:59 【问题描述】:

因此,一些帖子已经解决了如何删除 ggplot 中不需要的图例。

发帖到"Remove extra legends in ggplot2" 的wonderful answer 建议:

对于任何映射变量,您可以通过在适当的scale_ 中使用guide = 'none' 来抑制图例的出现...

但是,我遇到了通过添加group 美学创建不需要的图例的问题。 我尝试了 scale 方法,但它似乎不适用于 group 参数:

could not find function "scale_group" 

搜索 here 也没有提供任何关于修改组美学的正确函数调用的见解。

用户@joran provided 在上面的链接帖子中有以下见解:

这是因为group 美学不会自行生成任何刻度或参考线。它总是在修改其他东西。你永远不会得到group 美学的传奇。


示例

所以我可以将show.legend = FALSE 添加到包含group 的函数调用中,以删除该函数的任何图例,但如果我想要一些 other 部分(即,美学)的呼吁被包括在传说中。

#Set Up Example:

library(lme4)
library(ggplot2)

mod <- lmer(mpg ~ hp + (1 |cyl), data = mtcars)
pred <- predict(mod,re.form = NA)
pdat <- data.frame(mtcars[,c('hp','cyl')], mpg = pred, up = pred+1, low = pred-1)

show.legend = F 添加到函数调用按预期工作:

gp <- 
  ggplot(data = mtcars, aes(x = hp, y = mpg, color = cyl, group = cyl), show.legend = F) +
  geom_point(aes(group = cyl),show.legend = F) +
  facet_wrap(~cyl) + 
  geom_line(data = pdat, aes(group = cyl),show.legend = F, color = 'orange')

但是,当我想为基于相同 groupgeom_ribbon 填充添加图例时(因此不能使用 show.legend = F 参数),我得到了我的 @ 的图例987654341@再次...

gp + geom_ribbon(data = pdat, aes(ymin = low, ymax = up, group = cyl, fill = 'mod'), alpha = 0.3) + 
scale_fill_manual(values=c("orange"), name="model")

输出:

【问题讨论】:

这是因为它继承了color 美学(您可以在丝带的轮廓中看到它)。如果你只在geom_point中设置它,它就会消失。 @alistaire 哦。因此,通过在主ggplot 函数调用中分配color,所有后续函数调用都“激活”(不确定使用正确的词)color 调用(从而为它创建一个图例,除非使用@987654348 抑制@)?对吗? @theforestecologist:您的预期输出是什么?只有model 没有cyl 渐变比例的图例? 使用inherit.aes = FALSEgeom_ribbon(data = pdat, aes(x = hp, ymin = low, ymax = up, group = cyl, fill = 'mod'), inherit.aes = FALSE, alpha = 0.3) @theforestecologist 是的,前提是 geom 以某种方式绘制了美学(这里是丝带的轮廓)。如果您查看 geom 的文档(此处为?geom_ribbon),它会告诉您它理解哪种美学。 【参考方案1】:

最后一个geom覆盖第一个geom,你可以试试这个

ggplot(data = mtcars, aes(x = hp, y = mpg, color = cyl, group = cyl), show.legend = F) +
  geom_point(aes(group = cyl)) +                             
  facet_wrap(~cyl) + 
  geom_line(data = pdat, aes(group = cyl),color = 'orange') 

gp + geom_ribbon(data = pdat, aes(ymin = low, ymax = up, group = cyl, fill = 'mod'),       alpha = 0.3) + 
  scale_fill_manual(values=c("orange"), name="model")+
  scale_color_continuous(guide ='none')

顺便说一句,我的想法来自您在顶部发布的链接。

【讨论】:

以上是关于删除 ggplot 中的“组”图例的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化:去除可视化结果中的NA图例删除缺失值图例

删除两个ggplot图例之一[重复]

如何从 ggplot 中的箱线图中删除图例? [复制]

如何理解哪个图例是哪个图例并在 R 的 ggplot 中删除其中一个?

当有多个 [重复] 时删除 ggplot2 中的额外图例

ggplot图例:更改自动图例的顺序