109

我有一个简单的数据框,我正在尝试使用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图层。

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

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

4

3 回答 3

203

可以 在通话中设置映射美学。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

在此处输入图像描述

对于任何映射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 的评论很到位,我的回答更全面

于 2012-07-30T03:12:35.733 回答
64

只需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)
于 2017-01-18T15:39:01.700 回答
1

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

我用 a 试过了colour_scale,但没有用。似乎该colour_scale_hue项目的工作方式类似于具有默认参数的函数TRUE。我补充说scale_colour_hue(legend=FALSE),它奏效了。

我不确定 ggplot 中的所有色阶项目是否都是这种情况

于 2013-01-23T15:08:02.923 回答