【发布时间】: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),它会告诉您它理解哪种美学。