How to plot treatment means in ggplot2

余生颓废 提交于 2020-01-11 07:50:13

问题


I have generated a random set of data here, as I cannot post my own. It's not great data but it should illustrate what I'm trying to do.

Specifically, I have three treatments, the effects of which are being measured each year. Each treatment is replicated 6 times each year.

I want to plot the effect of treatment on the Dependent variable (DV) with year (i.e. over the course of the study) using ggplot2

I have tried:

ggplot(test, aes(x = factor(Year), y = DV, fill = factor(Grp))) + 
geom_boxplot()

Which works well for this random data I have generated, but for my actual data the size of the boxes are much more variable and the graph is very difficult to interpret. What I wanted to do to simplify things, was to instead plot the treatment means with year (rather than using the boxes), and add standard errors to these treatment means. I also want to join up these treatment means with a straight line between each treatment's mean in each year. Does anyone know of a way to do this?

Thanks in advance!


回答1:


One way is to recalculate mean and sd values before plotting in new data frame. Another way would be to define own stat_ function. Here is modified example from stat_summary() help page. This will calculate mean and confidence interval for each treatment in each year and plot it as geom="pointrange". Lines are added with stat_summary() and geom="line".

stat_sum_df <- function(fun, geom="crossbar", ...) {
      stat_summary(fun.data=fun, geom=geom, width=0.2, ...)
  }

ggplot(test, aes(x = factor(Year), y = DV, colour=Grp,group=Grp)) + 
  stat_sum_df("mean_cl_normal",geom="pointrange")+
  stat_summary(fun.y="mean",geom="line")

Update

To get standard errors you have to make new function. I named it stat_mean_sd(). Now use this function inside stat_summary().

stat_mean_sd<-function(x){
  cal.df<-data.frame(
    y=mean(x),
    ymin=mean(x)-sd(x)/sqrt(length(x)),
    ymax=mean(x)+sd(x)/sqrt(length(x)))
  return(cal.df)
}

ggplot(test, aes(x = factor(Year), y = DV, colour=Grp,group=Grp)) + 
  stat_summary(fun.data=stat_mean_sd,geom="pointrange")+
  stat_summary(fun.y="mean",geom="line")



来源:https://stackoverflow.com/questions/17660278/how-to-plot-treatment-means-in-ggplot2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!