删除ggplot2中的额外图例

时间:2012-07-30 03:05:37

标签: r ggplot2 legend

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

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

我正试图制作一个情节:

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

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

Extra Legend for <code>geom_point</code> transparency

如何让图例显示组颜色,而不是显示我的Alpha设置?

3 个答案:

答案 0 :(得分:144)

美学可以在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

enter image description here

对于任何映射的变量,您可以在相应的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')

将返回相同的情节

修改的 @Joran的评论是现场评论,我的答案更加全面

答案 1 :(得分:20)

只需在您不想要的部分之后添加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)

答案 2 :(得分:0)

对于ggplot2的旧版本(2012年底发布的0.9.2之前的版本),这个答案应该有效:

我用colour_scale尝试了这个并且它不起作用。似乎colour_scale_hue项的工作方式类似于具有默认参数TRUE的函数。我添加了scale_colour_hue(legend=FALSE)并且它有效。

我不确定ggplot

中的所有色标项是否都是这种情况