代码之家  ›  专栏  ›  技术社区  ›  blazej

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

  •  1
  • blazej  · 技术社区  · 6 年前

    我试图从一个阶乘实验中画出一个4向相互作用 ggplot2 具有 geom_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 回复  |  直到 6 年前
        1
  •  1
  •   blazej    6 年前

    跟随 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

        2
  •  0
  •   OzanStats    6 年前

    你的例子中有一个问题是你同时使用了颜色和形状美学的变量 . 我建议选择其中一个并将另一个保存为变量 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)