我有这样的数据
subject<-1:208
ev<-runif(208, min=1, max=2)
seeds<-gl(6,40,labels=c('seed1', 'seed2','seed3','seed4','seed5','seed6'),length=208)
ngambles<-gl(2,1, labels=c('4','32'))
trial<-rep(1:20, each= 2, length=208)
ngambles<-rep('4','32' ,each=1, length=208)
data<-data.frame(subject,ev,seeds,ngambles,trial)
数据看起来像这样
subject ev seeds ngambles trial
1 1.996717 seed1 4 1
2 1.280977 seed1 32 1
3 1.571648 seed1 4 2
4 1.153311 seed1 32 2
5 1.502559 seed1 4 3
6 1.644001 seed1 32 3
我通过此命令绘制一个图表,其中rep为x轴,expected_value为y轴,每个种子和n_gambles。
qplot(trial,ev,data=data,
facets=ngambles~seeds,xlab="Trial", ylab="Expected Value", geom="line")+
opts(title = "Expected Value for Each Seed")
现在我想通过汇总试验等于1-5,6-10,11-15和16-20来绘制新图表。我还想绘制一个错误栏。
我不知道怎么做R 也许有人可以帮助我 提前谢谢
答案 0 :(得分:2)
假设您的数据框名为df
。首先,添加新的列ag,显示原始试验值属于函数cut()
的区间。
df$ag<-cut(df$trial,c(1,6,11,16,21),right=FALSE)
现在有两种可能性 - 首先,使用ggplot2的stat_ ..函数聚合数据。已经定义了stat_summary()
函数,然后您还应该定义stat_sum_df()
函数(取自stat_summary()帮助文件)来计算多个汇总值。
stat_sum_df <- function(fun, geom="crossbar", ...) {
stat_summary(fun.data=fun, colour="red", geom=geom, width=0.2, ...)
}
使用stat_sum_df()
和参数"mean_cl_normal"
计算geom="errorbar"
中使用的置信区间和stat_summary()
的{{1}}平均值。 x值使用新列geom="line"
。使用ag
,您可以获得x轴的正确标签。
scale_x_discrete()
第二种方法是在绘制之前汇总数据,例如,使用库ggplot(df, aes(ag,ev,group=seeds))+stat_sum_df("mean_cl_normal",geom="errorbar")+
stat_summary(fun.y="mean",geom="line",color="red")+
facet_grid(ngambles~seeds)+
scale_x_discrete(labels=c("1-5","6-10","11-15","16-20"))
中的函数ddply()
。同样在这种情况下,您需要在第一个示例中创建的列plyr
。然后使用新数据进行绘图。
ag