在stat_smooth顶部更改图例中geom_point的alpha级别

时间:2013-09-26 15:09:53

标签: r ggplot2

当我添加stat_smooth时,我在更改图例中我(有色)点的alpha时遇到了麻烦。

require(ggplot2)

set.seed(1052)
dx <- runif(2000,0,10)
dy <- dx * rep(c(1,-1), each = 1000) + rnorm(2000,0,1)
dcol <- rep(c(TRUE, FALSE), each = 1000)
dd <- data.frame(x = dx, y = dy, col = dcol)

gg <- ggplot(dd) + aes(x = x, y = y, colour = col) + geom_point(alpha = 1/5)
gg

The legend is cloudy.

点的alpha值会延伸到图例(难以查看颜色),但this question表示您可以使用guides覆盖图例详细信息:

magic <- guides(colour = guide_legend(override.aes = list(alpha = 1))) 
gg + magic

It's fixed!

冷却。但当我扔进stat_smooth时,魔法就停止了工作。

gg + stat_smooth(method = "lm")

Line is solid, but point has low alpha.

gg + stat_smooth(method = "lm") + magic

I don't know what happened here.

我该如何解决这个问题?我希望传说中包含以下结果(白色背景,行和点alpha = 1。(如果您使用geom_line而不是stat_smooth,则问题似乎消失了)

gg + geom_line(alpha = 1/10) + magic

Huh.

1 个答案:

答案 0 :(得分:3)

如果您想获得带有直线和点而没有背景的图例键,那么您可以在fill=NA中添加override.aes= - 这将删除由于置信区间而设置的图例键的灰色填充stat_smooth()se=TRUE)。然后使用theme()legend.key=,您可以将背景更改为白色。

ggplot(dd, aes(x = x, y = y, colour = col)) + geom_point(alpha = 1/5)+
  stat_smooth(method = "lm")+
  guides(colour = guide_legend(override.aes = list(alpha = 1,fill=NA))) + 
  theme(legend.key=element_rect(fill="white"))

enter image description here