绘制与ggplot
问题描述:
聚合数据我有这样绘制与ggplot
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
我与代表图的曲线图作为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")
现在我想绘制一个新的图形,通过聚合ev试验等于1-5,6-10,11-15和16-20。我也想绘制一个错误栏。
我不知道如何R中 做也许有人可以帮我 在此先感谢
答
假设你的数据帧被称为df
。首先,添加新的列标记,显示哪个区间的初始试用值将属于功能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()
平均值为geom="line"
。由于x值使用新列ag
。用scale_x_discrete()
你可以得到x轴的正确标签。
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"))
第二种方法是从图书馆plyr
绘制,例如,使用功能ddply()
前汇总数据。同样在这种情况下,您需要第一个示例中制作的列ag
。然后使用新数据进行绘图。
library(plyr)
df.new<-ddply(df,.(ag,seeds,ngambles),summarise,ev.m=mean(ev),
ev.lim=qt(0.975,length(ev)-1)*sd(ev)/sqrt(length(ev)))
ggplot(df.new,aes(ag,group=seeds))+
geom_errorbar(aes(y=ev.m,ymin=ev.m-ev.lim,ymax=ev.m+ev.lim))+
geom_line(aes(y=ev.m))+
facet_grid(ngambles~seeds)+
scale_x_discrete(labels=c("1-5","6-10","11-15","16-20"))
+0
辉煌!那正是我需要的。非常感谢你 – missB
您可以输入您的数据 –
我很抱歉,dput是什么意思? – missB
如果'x'是你的数据将'dput(x)'的输出添加到你的问题 –