绘图意味着与ggplot2的interaction.plot类似

use*_*579 2 r ggplot2 line-plot

我有一个如下所示的数据框:

        head(length_test)
      S.UNIT          GENRE  PATTERN
    1    105   Conversation THAT_EXT
    2     61   Conversation THAT_EXT
    3    210   Conversation   TO_EXT
    4    196   Conversation   TO_EXT
    5    166 Academic Prose   TO_EXT
    6    152 Academic Prose   TO_EXT
> str(length_test)
'data.frame':   7329 obs. of  3 variables:
 $ S.UNIT : int  105 61 210 196 166 152 152 152 152 150 ...
 $ GENRE  : Factor w/ 5 levels "Academic Prose",..: 2 2 2 2 1 1 1 1 2 2 ...
 $ PATTERN: Factor w/ 6 levels "THAT_EXT","THAT_EXT_NT",..: 1 1 5 5 5 5 5 5 5 5 ...
Run Code Online (Sandbox Code Playgroud)

我想要做的是产生这样的情节,但使用ggplot2:

interaction.plot(GENRE, PATTERN, S.UNIT)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的问题是我不能只绘制手段,而是我得到这样的东西:

ggplot(data = length_test,
       aes(x = GENRE, y = S.UNIT, colour = PATTERN, group=PATTERN)) +
  geom_line() +
  stat_summary(fun.y=mean, geom="point")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的问题是无法获得绘制的手段.很可能我的stat_summary错误,但我无法提出解决方案.有任何想法吗?

一个可重复的小例子:

structure(list(S.UNIT = c(42L, 42L, 42L, 42L, 42L, 42L, 42L, 
42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 
42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 
42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 
41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 
41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 
41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 
41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 41L, 
41L, 41L, 41L, 41L), GENRE = structure(c(2L, 2L, 1L, 3L, 3L, 
2L, 2L, 5L, 2L, 3L, 1L, 1L, 5L, 5L, 1L, 4L, 5L, 5L, 1L, 5L, 2L, 
5L, 5L, 1L, 4L, 3L, 5L, 5L, 1L, 1L, 3L, 2L, 5L, 1L, 2L, 5L, 5L, 
1L, 3L, 3L, 1L, 3L, 1L, 2L, 3L, 4L, 3L, 3L, 1L, 3L, 5L, 5L, 5L, 
5L, 5L, 5L, 4L, 1L, 1L, 1L, 1L, 4L, 5L, 1L, 5L, 1L, 1L, 2L, 4L, 
1L, 1L, 4L, 1L, 2L, 1L, 3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 5L, 5L, 5L, 5L, 5L, 4L, 5L, 
5L), .Label = c("Academic Prose", "Conversation", "News", "Novels", 
"Popular Science"), class = "factor"), PATTERN = structure(c(6L, 
6L, 6L, 2L, 4L, 4L, 4L, 5L, 6L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 
5L, 2L, 3L, 3L, 1L, 1L, 3L, 3L, 5L, 5L, 1L, 1L, 1L, 3L, 5L, 5L, 
1L, 5L, 1L, 3L, 1L, 1L, 3L, 1L, 3L, 1L, 5L, 1L, 3L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L), .Label = c("THAT_EXT", "THAT_EXT_NT", "THAT_POST", 
"THAT_POST_NT", "TO_EXT", "TO_POST"), class = "factor")), .Names = c("S.UNIT", 
"GENRE", "PATTERN"), class = "data.frame", row.names = c(NA, 
-102L))
Run Code Online (Sandbox Code Playgroud)

Did*_*rts 10

您可以使用stat_summary()而不是geom_line()来连接点与线.geom_line()在这种情况下,连接所有点不仅仅是平均值.

ggplot(data = length_test,
       aes(x = GENRE, y = S.UNIT, colour = PATTERN, group=PATTERN)) +
  stat_summary(fun.y=mean, geom="point")+
  stat_summary(fun.y=mean, geom="line")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述