删除ggplot2中的额外图例

Wil*_*uck 79 r legend ggplot2

我有一个简单的数据框,我正在尝试使用组合线和点图ggplot2.假设我的数据如下所示:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))
Run Code Online (Sandbox Code Playgroud)

而我正试图制作一个情节:

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
g
Run Code Online (Sandbox Code Playgroud)

结果看起来很好,有一个例外.它有一个额外的图例显示alpha我的geom_point图层.

<code> geom_point </ code>透明度的额外图例

如何保持图例显示组颜色,但不能显示我的alpha设置?

mne*_*nel 151

可以在通话中设置映射美学 ggplot.

  • 内限定的审美aes(...)映射从所述数据,和一个图例创建.
  • 美学也可以通过在外部定义来设置为单个值 aes().

在这种情况下,您似乎希望设置 alpha = 0.8映射 colour = group.

去做这个,

将定义放在alpha = 0.8外面aes().

g <- ggplot(df, aes(x = x, y = y, group = group))
g <- g + geom_line(aes(colour = group))
g <- g + geom_point(aes(colour = group), alpha = 0.8)
g
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

g2 <- ggplot(df, aes(x = x, y = y, group = group)) + 
        geom_line(aes(colour = group)) +
        geom_point(aes(colour = group, alpha = 0.8))
g2 + scale_alpha(guide = 'none')
Run Code Online (Sandbox Code Playgroud)

这将返回相同的情节

编辑 @Joran的评论是现场评论,我的答案更全面

  • 这是正确的方法,因为OP是设置而不是映射美学,但一般来说,你可以使用诸如`g + scale_alpha(guide ="none")`之类的东西来抑制任何图例的外观. (15认同)
  • 非常感谢您的补充说明.这对于帮助我理解ggplot的理念还有很长的路要走. (4认同)
  • 我一直在使用ggplot超过一年,我从来没有理解映射或设置变量之间的区别.这是迄今为止我见过的最好的答案,恭喜. (2认同)

小智 25

只需show.legend = F在不需要它的部分之后添加代码即可.

g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8), show.legend = F)
Run Code Online (Sandbox Code Playgroud)

  • 这比映射与设置美学更直观(尽管这也消除了很多误解) (3认同)

Qui*_*ten 12

另一个简单的选择是使用 函数guides,它可以从图例中删除一个或多个特定的美感(填充、alpha、颜色)。以下是仅删除 alpha 图例并删除 alpha 和颜色的可重现示例:

df <- data.frame(x=rep(1:10,2), y=c(1:10,11:20), 
                 group=c(rep("a",10),rep("b",10)))
library(ggplot2)
g <- ggplot(df, aes(x=x, y=y, group=group))
g <- g + geom_line(aes(colour=group))
g <- g + geom_point(aes(colour=group, alpha = .8))
# Remove legend alpha
g + guides(alpha = "none")
Run Code Online (Sandbox Code Playgroud)

# Remove legend alpha and color
g + guides(alpha = "none", color = "none")
Run Code Online (Sandbox Code Playgroud)

创建于 2022-08-21,使用reprex v2.0.2