删除 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')
但是,当我想为基于相同 group
的 geom_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 = FALSE
如geom_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图例删除缺失值图例