我是R和统计知识的新手。我正在尝试使用ggplot创建一个具有组均值和sd错误条的分组条形图。我已经从excel(xlsx)导入了数据集。
基本上,有两个处理(临时)c&w的植物(Var)p&c,并测量了它们的水分。我正在尝试使用均值和误差线分组为pc,pw和sc,sw的方式进行绘制。我可以制作该小节图,但是我一直坚持使用错误栏。当我尝试分别计算sd并将其用作geom_errorbar中的限制时,它显示出错误:美观度必须为1或与数据(112)相同:ymax,ymin。我真的不知道该怎么办。
虚拟数据-
Var Temp moisturep
Purple Teepee cool 89.01974
Purple Teepee cool 80.87346
Safari cool 78.97458
Safari cool 86.98475
Purple Teepee warm 98.98734
Purple Teepee warm 98.76593
Safari warm 87.98745
Safari warm 90.45870
代码-
data <- pgpr
temp.mean <- t(tapply(data$moisturep,
list(data$Var, data$Temp),
mean))
temp.sd <- t(tapply(data$moisturep,
list(data$Var, data$Temp),
sd))
limits <- aes(ymax = temp.mean + temp.sd,
ymin = temp.mean - temp.sd)
ggplot(data,
aes(fill = data$Temp,
x = data$Var,
y = data$moisturep)) +
geom_bar(position = "dodge",
stat = "summary",
fun.y = "mean") +
geom_errorbar(limits,
position = position_dodge(0.9),
width = 0.25)
答案 0 :(得分:1)
执行此操作的一种方法如下。我首先计算平均值和标准误差,然后将它们放在汇总的数据框中。
library(ggplot2)
agg <- aggregate(moisturep ~ Var + Temp, pgpr, mean)
tmp <- aggregate(moisturep ~ Var + Temp, pgpr, sd)
names(tmp)[3] <- "StdErr"
agg <- merge(agg, tmp)
rm(tmp)
ggplot(agg,
aes(x = Var,
y = moisturep,
fill = Temp)) +
geom_bar(stat = "identity",
position = "dodge") +
geom_errorbar(aes(ymin = moisturep - StdErr, ymax = moisturep + StdErr),
position = position_dodge(0.9),
width = 0.25)
dput
格式的数据。
pgpr <-
structure(list(Var = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 2L,
2L), .Label = c("Purple Teepee", "Safari"), class = "factor"),
Temp = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L),
.Label = c("cool", "warm"), class = "factor"),
moisturep = c(89.01974, 80.87346, 78.97458, 86.98475,
98.98734, 98.76593, 87.98745, 90.4587)),
class = "data.frame", row.names = c(NA, -8L))
答案 1 :(得分:0)
您不必分别计算sd。
您可以在geom_errorbar中使用stat ='summary':
ggplot(data=mtcars, aes(x=gear, y=hp)) + geom_bar(stat='summary') + geom_errorbar(stat='summary', width=.2)