我正在尝试通过使用ggplot2
和geom_line()
和geom_point()
的析因实验绘制四次交互。
我正在使用的数据是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()
对象How to plot mixed-effects model estimates in ggplot2 in R?中的预测值,但仍然找不到处理数据格式的方法。
答案 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)
答案 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)