absurd
absurd

Reputation: 1115

ggplot not drawing connection lines between group means any more?

I seem to have missed a change within how ggplot2 works. I have an example from a statistics textbook (A. Field (2012), Discovering statistics using R, p. 593) which I'm sure worked but now does not produce connection lines between means of grouped data any more.

Here's the sample data:

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)

And here's the plot code:

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")

Isn't it the case that the part stat_summary(fun.y = mean, geom="line", aes(group = imagery)) should draw exactly these connection lines?

Thanks for your help.

Upvotes: 4

Views: 4427

Answers (2)

dlaehnemann
dlaehnemann

Reputation: 701

As Brian Diggs pointed out, this is a known bug, that has been fixed, recently. Thus, upgrading ggplot2 to 0.9.3.1 or above should bring the proper line drawing behaviour in stat_summary back.

Upvotes: 0

Didzis Elferts
Didzis Elferts

Reputation: 98499

This will not solve the problem in ggplot2 but this is workaround.

First summarize your data. As in original code you used mean_cl_boot for calculating confidence intervals, then used also in this example.

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

Then plot your data:

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")

enter image description here

Upvotes: 8

Related Questions