2017-04-13 41 views
2

我正在嘗試在ggplot2圖中添加一個abline到圖例。但是,我無法讓它工作。誰能幫忙?如何將abline與geom_point一起添加到圖例

示例代碼:

## dummy script to test legends with ablines 
library(ggplot2) 
df1 <- iris 
plot12345 <- ggplot(data = iris) + 
    geom_point(aes(x = Sepal.Length, y = Sepal.Width, colour = "dummy1")) + 
    geom_abline(aes(colour = "dummy2"), intercept = -3, slope = 1) + 
    scale_colour_manual(values = c("dummy1" = "blue", "dummy2" = "red")) 

這僅包括在傳說中的第一行而不是第二: enter image description here

+1

不知道它是如何工作,但把'intercept'和'slope'內'aes'會給你想要的東西:' gomplot(data = iris)+ geom_point(aes(x = Sepal.Length,y = Sepal.Width,color =「dummy1」))+ geom_abline(aes(slope = 1,intercept = -3,color =「dummy2 「))+ scale_colour_manual(values = c(」dummy1「=」blue「,」dummy2「=」red「)) ' – mt1022

+0

謝謝隊友!有點奇怪,但它確實有效。也碰巧知道如何讓圖例只顯示dummy2的行,並且只顯示dummy1的點? – rashid

+0

對不起,我不知道該怎麼做。 – mt1022

回答

1
  1. 以示傳說爲線,我們可以把interceptaes中的slope。 (我不知道它是如何工作的,但在Hadley的ggplot2書籍的第146頁有一個類似的例子);

  2. 爲了讓圖例只顯示dummy2的行和dummy1的點,我們必須操縱guide_legend來覆蓋默認的圖例美學。 linetype = c(0, 1)表示空白和一條實線。

這是最後的代碼:

ggplot(data = iris) + 
    geom_point(aes(x = Sepal.Length, y = Sepal.Width, 
        colour = "dummy1")) + 
    geom_abline(aes(colour = "dummy2", slope = 1, intercept = -3)) + 
    scale_color_manual(
     values = c("dummy1" = "blue", "dummy2" = "red"), 
     guide = guide_legend(
      override.aes = list(pch = c(16, NA), linetype = c(0, 1))) 
    ) 

enter image description here

+0

非常感謝,這真是太好了。我不知道'override.aes'命令,這對偉大的風格傳說很棒。我一直在尋找這麼久。 – rashid