绘制与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中 做也许有人可以帮我 在此先感谢

+0

您可以输入您的数据 –

+0

我很抱歉,dput是什么意思? – missB

+0

如果'x'是你的数据将'dput(x)'的输出添加到你的问题 –

假设你的数据帧被称为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")) 

enter image description here

第二种方法是从图书馆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