如何在R语言ggplot2分组分面密度图中添加正确的分组均值线?
问题原因
你当前用于绘制均值线的聚合数据集mu仅按Modality单个字段分组计算均值,缺少分面依赖的分组字段Species,ggplot无法将均值线匹配到对应分面,因此会把所有Modality的均值线渲染到每一个分面中。
解决方法
调整均值聚合的分组维度,同时按Species和Modality两个字段分组计算均值,让每个均值结果同时关联分面和分组,ggplot会自动匹配分面渲染对应均值线。
修正后完整代码
data <- data.frame( Accuracy=abs(rnorm(140)), Species=c(rep("A.All",20),rep("B. double",60),rep("C.single",60), rep("D.All",20),rep("E.double",60),rep("F.single",60)), Modality=c(rep("All,w0",10),rep("double1,w0",10),rep("double2,w0",10),rep("double3,w0",10), rep("single1,w0",10),rep("single2,w0",10),rep("single3,w0",10), rep("All,w2",10),rep("double1,w2",10),rep("double2,w2",10),rep("double3,w2",10), rep("single1,w2",10),rep("single2,w2",10),rep("single3,w2",10)) ) p<-ggplot(data, aes(x=Accuracy, fill=Modality)) + geom_density(alpha=0.4)+ facet_wrap(. ~ Species) + xlab("Accuracy") + ylab("Density") library(plyr) # 仅修改这一行,增加Species作为分组维度 mu <- ddply(data, c("Species", "Modality"), summarise, grp.mean=mean(Accuracy)) head(mu) # Add mean lines a<-p+geom_vline(data=mu, aes(xintercept=grp.mean, color=Modality), linetype="dashed")+ xlab("Accuracy") + ylab("Density")
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

