ggplot2:使用scale_xx_manual后如何创建正确的图例

时间:2015-07-19 12:53:02

标签: r ggplot2

我有一个有三条不同线条的情节。我希望其中一条线也有点。我也希望没有点的两条线比没有点的线更粗。我已经设法得到了我想要的情节,但我的传说并没有跟上。

library(ggplot2)

y <- c(1:10, 2:11, 3:12)
x <- c(1:10, 1:10, 1:10)
testnames <- c(rep('mod1', 10), rep('mod2', 10), rep('meas', 10))
df <- data.frame(testnames, y, x)

ggplot(data=df, aes(x=x, y=y, colour=testnames)) +
   geom_line(aes(size=testnames)) +
   scale_size_manual("", values=c(0.5,1,1)) +
   geom_point(aes(alpha=testnames), size=5, shape=4) +
   scale_alpha_manual("", values=c(1, 0, 0))

enter image description here

我可以删除第二个(黑色)图例:

ggplot(data = df, aes(x=x, y=y, colour=testnames)) +
   geom_line(aes(size=testnames)) +
   scale_size_manual("", values=c(0.5,1,1), guide='none') +
   geom_point(aes(alpha=testnames), size=5, shape=4) +
   scale_alpha_manual("", values=c(1, 0.05, 0.05), guide='none')

enter image description here

但我真正想要的是两个传说的合并 - 带颜色的图例,仅在第一个变量(meas)上交叉,并且mod1mod2更粗比第一行。我尝试过引导和覆盖,但运气不佳。

1 个答案:

答案 0 :(得分:7)

您不需要透明度来隐藏mod1mod2的形状。您可以在NA中将其形状设置为scale_shape_manual,从图表和图例中省略这些点:

ggplot(data = df, aes(x = x, y = y, colour = testnames, size = testnames)) +
  geom_line() +
  geom_point(aes(shape = testnames), size = 5) +
  scale_size_manual(values=c(0.5, 2, 2)) +
  scale_shape_manual(values=c(8, NA, NA)) 

这给出了以下图:

enter image description here

注意:我在尺寸比例和其他形状中使用了一些更多不同的值,以便更好地说明效果。