首页 文章

与ggplot2线和由颜色和线型定义的点的4向交互

提问于
浏览
1

我正在尝试使用 ggplot2geom_line()geom_point() 绘制来自因子实验的4向交互 .

我正在使用的数据是 emmeans() 对象,其边际均值来自线性混合效应模型 .

我可以通过 emmip() 得到的图表是这样的:

enter image description here

我想要的是将 b:c 交互分开,以便一个因子由颜色和/或点类型定义,另一个因子由线型定义(虚线与实体)

一个最小的例子是这样的:

df<- data.frame(y=rnorm(n=16),
                a=gl(2,4,16, labels=c("a1","a2")),
                b=gl(2,2,16, labels=c("b1", "b2")),
                c=gl(2,1,16, labels=c("c1", "c2")),
                fac=gl(2,8,16, labels=c("panel1", "panel2")))

我尝试了以下 ggplot() 代码:

ggplot(df, aes(y=y, x=a, color=b)) + 
      geom_point(aes(shape=b), size=3) +
      geom_line(aes(linetype=c)) +
      facet_wrap(~fac)

但我得到一个警告,我不知道如何处理:

geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?
geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

图表看起来几乎与预期一致,但没有在相应的 b 点之间绘制 c 因子水平线:

enter image description here

How can I fix this?

我发现了一个类似的问题直接处理来自 lmer() 对象的预测值:How to plot mixed-effects model estimates in ggplot2 in R?但仍无法找到处理我的数据格式的方法 .

2 回答

  • 1

    Z.Lin comment above之后我找到了我想要的东西:

    ggplot(df, aes(y=y, x=a)) + 
          geom_point(aes(color=b),size=3) +
          geom_line(aes(group = b:c, color=b, linetype=c), size=1) +
          facet_wrap(~fac)
    

    enter image description here

  • 0

    您的示例的一个问题是您对变量b使用颜色和形状美学 . 我建议选择一个并保存另一个变量c而不是使用行 . 一般来说,使用线条对连续变量和趋势有意义 . 您可以使用以下之一:

    # colored by b & shaped by c
    ggplot(df, aes(y=y, x=a, color=b)) + 
      geom_point(aes(shape=c), size=3) +
      facet_wrap(~fac)
    
    # colored by c & shaped by b
    ggplot(df, aes(y=y, x=a, color=c)) + 
      geom_point(aes(shape=b), size=3) +
      facet_wrap(~fac)
    

相关问题