【问题标题】:删除图例 ggplot 2.2
【发布时间】:2016-06-07 16:38:54
【问题描述】:

我试图保持一层(平滑)的图例并删除另一层(点)的图例。我试过用guides(colour = FALSE)geom_point(aes(color = vs), show.legend = FALSE) 关闭图例。

编辑:由于这个问题及其答案很受欢迎,一个可重复的例子似乎是为了:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

【问题讨论】:

  • 一个最小的可重现示例会简单得多。在长长的代码行中,似乎有很多不必要的(对于手头的问题)代码,而且它在当前编写时完全无法重现。

标签: r ggplot2 legend


【解决方案1】:

来自r cookbook,其中 bp 是您的 ggplot:

删除特定美学(填充)的图例:

bp + guides(fill="none")

指定比例时也可以这样做:

bp + scale_fill_discrete(guide="none")

这会删除所有图例:

bp + theme(legend.position="none")

【讨论】:

  • 作为对@Alex 评论的回复:请注意theme_bw() 可能会干扰使用theme() 完成的任何定义。使用 theme_bw() 时,请确保在更改任何其他主题选项之前将其添加到绘图中。
  • 但是当我这样做bp + theme(legend.position="none") + theme_classic() 时,传说又回来了。那么如何去除呢?
  • @loveR 将 theme_classic 放在首位:bp + theme_classic() + theme(legend.position="none")
  • 这对我的情节没有影响。我成功地使用了@Tjebo 的方法。
  • 对于中间示例,guide=FALSE 已被弃用。现在他们建议使用guide="none"
【解决方案2】:

可能还有其他解决方案:
您的代码是:

geom_point(aes(..., show.legend = FALSE))

你可以在aes调用之后指定show.legend参数:

geom_point(aes(...), show.legend = FALSE)

那么对应的图例应该会消失

【讨论】:

  • 这是一个非常好的方法。也更直观。
  • 当我使用 geom_text 以彩色注释线条时,这是从图例中删除字母的解决方案。没有scale_label 命令(这也没有意义),guide(label = FALSE) 也不起作用。谢谢!
【解决方案3】:

由于问题和 user3490026 的回答是热门搜索,我制作了一个可重复的示例,并简要说明了迄今为止提出的建议,以及明确解决 OP 问题的解决方案问题。

ggplot2 所做的一件可能令人困惑的事情是,当它们与同一个变量相关联时,它会自动混合某些图例。例如,factor(gear) 出现两次,一次为linetype,一次为fill,从而形成一个组合图例。相比之下,gear 有自己的图例条目,因为它与factor(gear) 不同。到目前为止提供的解决方案通常效果很好。但有时,您可能需要覆盖指南。请参阅底部的最后一个示例。

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

删除所有图例:@user3490026

p + theme(legend.position = "none")

删除所有图例:@duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

关闭图例:@Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

移除填充以使线型可见

p + guides(fill = FALSE)

同上,通过 scale_fill_ 函数:

p + scale_fill_discrete(guide = FALSE)

现在是对 OP 要求的一种可能答案

"保持一层的图例(平滑),去掉一层的图例 其他(点)”

临时开启一些关闭

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

【讨论】:

  • 刚刚注意到最后一个图中的蓝色填充颜色没有出现在图表上,不知道为什么......
  • 在运行代码后键入 warnings(),您将看到蓝丝带未显示的原因。
  • @markus:知道了,谢谢!我不会费心编辑这个例子,因为这个问题是分开的。但是,在未计算 se 的图例时,它几乎没有意义。在 github 上可能值得一个问题,但我现在没有精力......
【解决方案4】:

如果您的图表同时使用fillcolor 美学,您可以删除图例:

+ guides(fill=FALSE, color=FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2018-11-03
    • 2021-12-07
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多