删除图例ggplot 2.2

Guy*_*Guy 222 r legend ggplot2

我试图保持一层的图例(平滑)并删除另一层(点)的图例.我试过用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() 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 409

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

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

bp + guides(fill=FALSE)
Run Code Online (Sandbox Code Playgroud)

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

bp + scale_fill_discrete(guide=FALSE)
Run Code Online (Sandbox Code Playgroud)

这将删除所有图例:

bp + theme(legend.position="none")
Run Code Online (Sandbox Code Playgroud)

  • 作为对@Alex的评论的回复:注意`theme_bw()`可以干扰使用`theme()`完成的任何定义.使用`theme_bw()`时,请确保在更改任何其他主题选项之前将其添加到绘图中. (20认同)
  • 但是当我做类似“bp + theme(legend.position="none") + theme_classic()”的事情时,图例又回来了。那么如何去除呢? (2认同)
  • @loveR首先放置theme_classic:`bp + theme_classic()+ theme(legend.position =“ none”)` (2认同)

Tje*_*ebo 72

可能还有另一个解决方案:
您的代码是:

geom_point(aes(..., show.legend = FALSE))
Run Code Online (Sandbox Code Playgroud)

您可以在调用指定show.legend参数:aes

geom_point(aes(...), show.legend = FALSE)
Run Code Online (Sandbox Code Playgroud)

然后相应的图例应该消失

  • 这是一个非常好的方法。也更加直观。 (2认同)
  • 当我使用 geom_text 用颜色注释线条时,这是从图例中删除字母的解决方案。没有“scale_label”命令(这也没有意义),并且“guide(label = FALSE)”也不起作用。谢谢! (2认同)

Pat*_*ckT 34

由于问题和用户34000026的回答是热门搜索,我已经做了一个可重现的例子,并简要说明了迄今为止提出的建议,以及明确解决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() 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

删除所有图例:@ user3490026

p + theme(legend.position = "none")
Run Code Online (Sandbox Code Playgroud)

删除所有图例:@duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)
Run Code Online (Sandbox Code Playgroud)

关掉传说:@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() 
Run Code Online (Sandbox Code Playgroud)

删除填充以使线型变得可见

p + guides(fill = FALSE)
Run Code Online (Sandbox Code Playgroud)

通过scale_fill_函数与上面相同:

p + scale_fill_discrete(guide = FALSE)
Run Code Online (Sandbox Code Playgroud)

现在可以回答OP的要求

"保持一层的图例(平滑)并删除另一层的图例(点)"

特别是在临时性的情况下关闭一些

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 刚注意到最后一个图中的蓝色填充颜色没有出现在图表上,不知道为什么...... (2认同)

duh*_*ime 13

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

+ guides(fill=FALSE, color=FALSE)
Run Code Online (Sandbox Code Playgroud)