2015-07-19 53 views
4

我有一個三條不同的線的情節。我希望其中的一條線也有點。我還希望沒有點的兩條線比沒有點的線更粗。我設法得到了我想要的情節,但是我的傳奇並沒有跟上。ggplot2:如何使用scale_xx_manual創建正確的圖例

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的線上交叉呃比第一行。我嘗試過指導和重寫,但運氣不大。

回答

7

您不需要透明度來隱藏mod1mod2的形狀。你可以通過設置它們的形狀來NAscale_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


注意:我用爲了更好地說明效果,尺寸大小和另一種形狀中的一些更明顯的值。