如何在ggplot2中绘制治疗方法

时间:2013-07-15 17:33:11

标签: r ggplot2 boxplot

我在这里生成了一个随机set of data,因为我无法发布自己的{{3}}。这不是很好的数据,但它应该说明我正在尝试做什么。

具体来说,我有三种治疗方法,每年都会测量其效果。每种治疗方法每年复制6次。

我想用ggplot2绘制治疗对依赖变量(DV)的影响与年份(即在整个研究过程中)

我试过了:

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

这适用于我生成的随机数据,但对于我的实际数据,框的大小变化更大,图表很难解释。我想要做的是简化事情,而是用年绘制治疗方法(而不是使用方框),并为这些治疗手段添加标准误。我也想加入这些治疗手段,每年治疗的平均值之间有一条直线。有谁知道这样做的方法?

提前致谢!

1 个答案:

答案 0 :(得分:4)

一种方法是在绘制新数据框之前重新计算均值和sd值。另一种方法是定义自己的stat_函数。以下是stat_summary()帮助页面中的修改示例。这将计算每年每次治疗的平均值和置信区间,并将其绘制为geom="pointrange"。行添加了stat_summary()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")

enter image description here

更新

要获得标准错误,您必须创建新功能。我把它命名为stat_mean_sd()。现在在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")

enter image description here