由于您的y值的平均值可能小于0,我建议使用点图而不是条形图。这些点代表平均值。您可以使用qplot或常规ggplot函数。后者更具可定制性。在此示例中,两者都会产生相同的输出。
library(ggplot2)
set.seed(7)
data <- data.frame(y = rnorm(10,0,1), x = runif(10,0,1))
data$bins <- cut(data$x,breaks = 4, dig.lab = 2)
qplot(bins, y, data = data, stat="summary", fun.y = "mean")
ggplot(data, aes(x = factor(bins), y = y)) +
stat_summary(fun.y = mean, geom = "point")
你还可以添加误差线。在这种情况下,它们显示组均值加减1.96倍的标准偏差。可以使用tapply获取组平均值和SD。
m <- tapply(data$y, data$bins, mean)
sd <- tapply(data$y, data$bins, sd)
df <- data.frame(mean.y = m, sd = sd, bin = names(m))
ggplot(df, aes(x = bin, y = mean.y,
ymin = mean.y - 1.96*sd,
ymax = mean.y + 1.96*sd)) +
geom_errorbar() + geom_point(size = 3)
![enter image description here](https://istack.dev59.com/GolUx.webp)
hist
函数中的标准算法来找到区间,例如> tmp <- hist(data.x, breaks="Sturges")
,然后使用类似于idxs = findInterval(data.x, tmp$breaks)
的东西。然后在ggplot中使用这些索引作为x坐标:tmp$mids[idxs]
,并且使用@christoph建议的解决方案来得到y轴上的平均值。 - Sid