ggplot2:标记多个geom_abline斜率的图例

时间:2017-08-05 16:57:30

标签: r ggplot2

我正在使用下面data.frame的{​​{1}},使用dput来映射三个斜坡:

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

返回图:

enter image description here

我想添加一个图例,用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)) 标记这三个单独的行。我已经在其他地方查找了SO,但其中许多说只是在linetype函数中包含show_guide(现在已经弃用了geom_abline)并将其设置为{{1 }}。这不适合我。我也试过使用show.legend但没有运气。

如何添加分别标记每条线的图例?我想要包含主持人变量的名称以及" -1 SD","平均"和" + 1 SD"作为标签。

TRUE数据的

scale_linetype_manual

dput

2 个答案:

答案 0 :(得分:2)

你应该尝试做的是将每一行的一个独特特征(即主持人作为一个因素(b.c。我们不想将其解释为连续变量))映射到线型。

例如,使用此代码

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") 

答案 1 :(得分:2)

要获取图例,您必须将变量映射到aes()中的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")