【问题标题】:ggplot not drawing connection lines between group means any more?ggplot不再在组之间绘制连接线意味着什么?
【发布时间】:2013-01-11 18:13:26
【问题描述】:

我似乎错过了 ggplot2 工作方式的变化。我有一个来自统计教科书的示例(A. Field (2012), Discovering statistics using R, p. 593),我确信它有效,但现在不再在分组数据的平均值之间产生连接线。

这是示例数据:

participant<-gl(20, 9, labels = c("P01", "P02", "P03", "P04", "P05", "P06", "P07", "P08", "P09", "P10", "P11", "P12", "P13", "P14", "P15", "P16", "P17", "P18", "P19", "P20" ))
drink<-gl(3, 3, 180, labels = c("Beer", "Wine", "Water"))
imagery<-gl(3, 1, 180, labels = c("Positive", "Negative", "Neutral"))
groups<-gl(9, 1, 180, labels = c("beerpos", "beerneg", "beerneut", "winepos", "wineneg", "wineneut", "waterpos", "waterneg", "waterneut"))
attitude<-c(1, 6, 5, 38, -5, 4, 10, -14, -2, 26, 27, 27, 23, -15, 14, 21, -6, 0, 1, -19, -10, 28, -13, 13, 33, -2, 9, 7, -18, 6, 26, -16, 19, 23, -17, 5, 22, -8, 4, 34, -23, 14, 21, -19, 0, 30, -6, 3, 32, -22, 21, 17, -11, 4, 40, -6, 0, 24, -9, 19, 15, -10, 2, 15, -9, 4, 29, -18, 7, 13, -17, 8, 20, -17, 9, 30, -17, 12, 16, -4, 10, 9, -12, -5, 24, -15, 18, 17, -4, 8, 14, -11, 7, 34, -14, 20, 19, -1, 12, 43, 30, 8, 20, -12, 4, 9, -10, -13, 15, -6, 13, 23, -15, 15, 29, -1, 10, 15, 15, 12, 20, -15, 6, 6, -16, 1, 40, 30, 19, 28, -4, 0, 20, -10, 2, 8, 12, 8, 11, -2, 6, 27, 5, -5, 17, 17, 15, 17, -6, 6, 9, -6, -13, 30, 21, 21, 15, -2, 16, 19, -20, 3, 34, 23, 28, 27, -7, 7, 12, -12, 2, 34, 20, 26, 24, -10, 12, 12, -9, 4)

longAttitude<-data.frame(participant, drink, imagery, groups, attitude)

这是剧情代码:

library(ggplot2)
attitudeInt <- ggplot(longAttitude, aes(drink, attitude, colour = imagery))
attitudeInt + stat_summary(fun.y = mean, geom = "point") + 
              stat_summary(fun.y = mean, geom = "line", aes(group = imagery)) + 
              stat_summary(fun.data = mean_cl_boot, geom = "errorbar", width = 0.2) + 
              labs(x = "Type of Drink", y = "Mean Attitude", colour = "Type of Imagery")

是不是stat_summary(fun.y = mean, geom="line", aes(group = imagery))这部分就应该画出这些连接线?

感谢您的帮助。

【问题讨论】:

  • 为我工作。你使用的是什么版本的 R 和 ggplot2?另外,尝试将 R 重新启动到一个干净的会话中,然后重试。
  • @joran 这对我也不起作用。 ggplot2_0.9.3
  • @agstudy 我还在使用 9.2.1,所以这可能是问题的一部分。
  • 对于好奇的人:警告是geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?
  • 这是一个错误:github.com/hadley/ggplot2/issues/739,这是为了修复另一个错误而引入的。实际上,stat_summary 现在会覆盖group 美学以包含x 美学,这样就不允许在分类x 值之间划线。

标签: r ggplot2


【解决方案1】:

这不会解决ggplot2 中的问题,但这是解决方法。

首先总结您的数据。在原始代码中,您使用mean_cl_boot 计算置信区间,然后在本示例中也使用了。

library(plyr)
dfAtt<-ddply(longAttitude,~drink+imagery,function(x) mean_cl_boot(x$attitude))

dfAtt
  drink  imagery      y      ymin     ymax
1  Beer Positive  21.05  15.65000 26.90750
2  Beer Negative   4.45  -2.60125 12.00000
3  Beer  Neutral  10.00   5.49750 14.75000
4  Wine Positive  25.35  22.40000 28.25000
5  Wine Negative -12.00 -14.40000 -9.49875
6  Wine  Neutral  11.65   8.95000 14.40125
7 Water Positive  17.40  14.40000 20.45000
8 Water Negative  -9.20 -12.25000 -6.34875
9 Water  Neutral   2.35  -0.75125  4.90000

然后绘制你的数据:

ggplot(dfAtt, aes(x=drink, y=y, colour=imagery,group=imagery)) + 
  geom_errorbar(aes(ymin=ymin, ymax=ymax), width=.2) +
  geom_line() +
  geom_point() +
  labs(x = "Type of Drink", y = "Mean Attitude", colour = "Type of Imagery")

【讨论】:

  • 完美。该解决方案将计算和绘图分开。这使得代码更具可读性。非常感谢。
【解决方案2】:

正如Brian Diggs 所指出的,这是最近的known bug,即has been fixed。因此,将 ggplot2 升级到 0.9.3.1 或更高版本应该会在 stat_summary 中恢复正确的线条绘制行为。

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2018-12-03
    • 2023-03-10
    • 2012-05-02
    • 2020-09-24
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多