我在这里生成了一个随机set of data,因为我无法发布自己的{{3}}。这不是很好的数据,但它应该说明我正在尝试做什么。
具体来说,我有三种治疗方法,每年都会测量其效果。每种治疗方法每年复制6次。
我想用ggplot2绘制治疗对依赖变量(DV)的影响与年份(即在整个研究过程中)
我试过了:
ggplot(test, aes(x = factor(Year), y = DV, fill = factor(Grp))) +
geom_boxplot()
这适用于我生成的随机数据,但对于我的实际数据,框的大小变化更大,图表很难解释。我想要做的是简化事情,而是用年绘制治疗方法(而不是使用方框),并为这些治疗手段添加标准误。我也想加入这些治疗手段,每年治疗的平均值之间有一条直线。有谁知道这样做的方法?
提前致谢!
答案 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")
要获得标准错误,您必须创建新功能。我把它命名为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")