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

4-way interaction with ggplot2 lines and points defined by color and linetype

我正在尝试使用 ggplot2geom_line()geom_point().

绘制析因实验的 4 向交互作用

我正在处理的数据是emmeans()对象,其边际均值是根据线性混合效应模型估计的。

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

我想要的是分离 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?

并且该图看起来 几乎 符合预期,但没有 c 因子在对应的 b 点之间绘制水平线:

我该如何解决这个问题?

我发现了一个直接处理来自 lmer() 对象的预测值的类似问题: 但仍然找不到处理我的数据格式的方法。

您的示例的一个问题是您对变量 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)

关注 我找到了我要找的东西:

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)