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

时间:2018-07-31 07:52:32

标签: r ggplot2 anova interaction

我正在尝试通过使用ggplot2geom_line()geom_point()的析因实验绘制四次交互。

我正在使用的数据是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?

该图看起来几乎是 ,但没有在相应的c点之间绘制b个因子水平线:

enter image description here

我该如何解决?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)