【发布时间】:2016-09-14 07:51:16
【问题描述】:
我有一个由 3 个连续响应变量和 2 个分类预测变量组成的数据框。我一直在分别对每个响应变量进行建模,但使用相同的预测变量。我想为每个响应变量制作 3 个具有相同 x 轴的条形图。获得facet_wrap 之类的格式会很好,因为每个图形都不需要自己的 x 轴。我附上了一些示例数据和一些代码来显示我制作的其中一张图表。
y1<-sample(1:150, 100, replace=T)
y2<-sample(1:150, 100, replace=T)
y3<-sample(1:150, 100, replace=T)
x1<-sample(x=c("Site1", "Site2"), size=100, replace=T, prob=rep(1/2,2))
x2<-sample(x=c("A", "B", "C", "D"), size=100, replace=T, prob=rep(1/4,4))
df<-data.frame(y1,y2,y3,x1,x2)
ggplot(df, aes(x=x2, y=y1, fill=x1))
y1sum<-summarySE(df, measurevar="y1", groupvars=c("x1", "x2"))
ggplot(y1sum, aes(x=x2, y=y1, fill=x1)) + geom_bar(position=position_dodge(),
stat="identity") + geom_errorbar(aes(ymin=y1-ci, ymax=y1+ci), width=.2,
position=position_dodge(.9))
所以我想得到上面的图表,但是对于每个响应变量并堆叠在一起。
顺便说一句,我还希望获得一些关于如何在每组条形上方添加一些字母以显示哪些显着不同的指导。
summarySE 函数基于此处的代码 http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE) {
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE) {
if (na.rm) sum(!is.na(x))
else length(x)
}
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col) {
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
},
measurevar
)
# Rename the "mean" column
datac <- rename(datac, c("mean" = measurevar))
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- qt(conf.interval/2 + .5, datac$N-1)
datac$ci <- datac$se * ciMult
return(datac)
}
提前感谢任何可以提供建议的人。
【问题讨论】:
标签: r ggplot2 facet-wrap