2012-07-30 139 views
61

我有一个简单的数据框,我试图使用ggplot2做一个组合的线和点图。假设我的数据是这样的:删除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 

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

Extra Legend for geom_point transparency

我怎能显示组色彩的传说,而不是一个显示我的阿尔法设置?

回答

123

美学可以设置一个ggplot呼叫内映射

  • aes(...)限定的审美是映射从数据,和一个图例创建。
  • 审美也可能是设置为单个值,方法是将其定义在aes()之外。

在这种情况下,它似乎要设置alpha = 0.8地图colour = group

要做到这一点,

放置alpha = 0.8aes()定义之外。

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

对于任何映射变量可以通过在适当的scale_...呼叫使用guide = 'none'剿图例的外观。例如。

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的评论是点上,我做了我的答案更全面

+12

这是正确的方法中,由于OP被设定,而不是映射的审美,但一般可以使用类似'克+ scale_alpha(导向=“无”)'抑制任何图例的外观。 – joran 2012-07-30 03:15:05

+0

确实。答案已经详细阐述。有一个全面的答案更有意义,而不仅仅是OP问题。 – mnel 2012-07-30 03:32:33

+4

非常感谢您的补充解释。这对帮助我理解ggplot的哲学有很长的路要走。 – Wilduck 2012-07-30 15:26:45

0

对于旧版本GGPLOT2的(0.9之前的版本中返回相同的情节.2,在2012年底发布),这个答案应该可以工作:

我试过这个与colour_scale,它没有工作。看起来colour_scale_hue项目的功能与默认参数TRUE一样。我加了scale_colour_hue(legend=FALSE),它工作。

我不知道这是否是在ggplot所有的色标项目

+3

在'scale_ *'调用中使用'legend'不推荐使用'scale_colour_hue(guide =“none”)''。 – Gregor 2013-06-05 17:32:37

+2

考虑到'legend = FALSE'已被废弃,正如@shujaa注释所指出的,这实际上是一个重复的答案,即将'guide =“none”'添加到'scale_fill/color *'函数。 – 2014-03-19 17:32:31

13

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