2017-08-05 97 views
2

我用這data.frame,這下面我有dput,三個坡映射使用geom_ablineGGPLOT2:圖例標識多個geom_abline斜坡

moderator_value simple_intercept simple_slope 
1    -1  -0.02745523 0.2768973 
2    0  0.05990693 0.2147829 
3    1  0.14726909 0.1526684 

我現在所擁有的是這樣的代碼:

ggplot() + 
    geom_abline(data=ablines, 
       mapping=aes(slope=simple_slope, intercept=simple_intercept), 
       linetype=c(1,2,3)) + 
    scale_x_continuous(limits=c(-1.5,2), name="Prejudice") + 
    scale_y_continuous(limits=c(-.75, .75), name="Authenticity") + 
    theme_light() + 
    theme(text=element_text(size=14)) 

這將返回數字:

enter image description here

我想添加一個圖例,它們的linetype標記這三個單獨的行。我在其他地方看過,但其中很多人說show_guidegeom_abline函數中(現在已經棄用show.legend),並將其設置爲TRUE。這不適合我。我也嘗試過使用scale_linetype_manual,但沒有運氣。

如何包含一個分別標記每條線的圖例?我想包含主持人變量的名稱以及「-1 SD」,「Mean」和「+1 SD」作爲標籤。

ablines數據dput

structure(list(moderator_value = c(-1, 0, 1), simple_intercept = c(-0.0274552251655293, 
0.0599069333124192, 0.147269091790368), simple_slope = c(0.276897278474258, 
0.214782863579552, 0.152668448684846)), .Names = c("moderator_value", 
"simple_intercept", "simple_slope"), row.names = c(NA, 3L), class = "data.frame") 

回答

2

你應該嘗試做的是地圖中的每個線的獨特功能(即主持人的一個因素(BC我們不希望把它解釋爲連續變量))到線型。

例如通過使用此代碼

ablines <- structure(list(moderator_value = c(-1, 0, 1), 
          simple_intercept = c(-0.0274552251655293, 0.0599069333124192, 0.147269091790368), 
          simple_slope = c(0.276897278474258, 0.214782863579552, 0.152668448684846)), 
        .Names = c("moderator_value", "simple_intercept", "simple_slope"), 
        row.names = c(NA, 3L), class = "data.frame") 

library(ggplot2) 
ggplot(ablines) + 
geom_abline(mapping = aes(slope = simple_slope, 
          intercept = simple_intercept, 
          linetype = as.factor(moderator_value))) + 
scale_x_continuous(limits=c(-1.5,2), name="Prejudice") + 
scale_y_continuous(limits=c(-.75, .75), name="Authenticity") 

2

爲了讓你不得不愛依斯內的lynetipe一個變量映射()的傳說。在你的代碼中,你在aes()之外指定了它。 請注意,在我的代碼中,變量「moderator」的數值將該數字映射到ggplot的可用線條樣式。 要爲每個線型提供自定義名稱,請取消註釋最後的指令。

ggplot() + 
     geom_abline(data=ablines, 
        mapping=aes(slope=simple_slope, intercept=simple_intercept, linetype = moderator_value)) + 
     scale_x_continuous(limits=c(-1.5,2), name="Prejudice") + 
     scale_y_continuous(limits=c(-.75, .75), name="Authenticity") + 
     theme_light() ## + 
     ## scale_linetype_continuous(labels = c("First Line", "Second Line", "Third Line")