以下是使用ggplot2生成箱线图的代码,我正在尝试修改它以适应我的问题:
library(ggplot2)
set.seed(1)
# create fictitious data
a <- rnorm(10)
b <- rnorm(12)
c <- rnorm(7)
d <- rnorm(15)
# data groups
group <- factor(rep(1:4, c(10, 12, 7, 15)))
# dataframe
mydata <- data.frame(c(a,b,c,d), group)
names(mydata) <- c("value", "group")
# function for computing mean, DS, max and min values
min.mean.sd.max <- function(x) {
r <- c(min(x), mean(x) - sd(x), mean(x), mean(x) + sd(x), max(x))
names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
r
}
# ggplot code
p1 <- ggplot(aes(y = value, x = factor(group)), data = mydata)
p1 <- p1 + stat_summary(fun.data = min.mean.sd.max, geom = "boxplot") + ggtitle("Boxplot con media, 95%CI, valore min. e max.") + xlab("Gruppi") + ylab("Valori")
在我的情况下,我没有实际数据点,而只有它们的平均值和标准差(数据呈正态分布)。所以对于这个例子,它将是:
mydata.mine = data.frame(mean = c(mean(a),mean(b),mean(c),mean(d)),sd = c(sd(a),sd(b),sd(c),sd(d)),group = c(1,2,3,4))
然而我仍想制作一个箱线图。我考虑定义:
ymin = 均值 - 3*标准差
lower = 均值 - 标准差
mean = 均值
upper = 均值 + 标准差
ymax = 均值 + 3*标准差
但是我不知道如何定义一个函数来获取fun.data中mydata.mine的均值和标准差。或者,我可以使用rnorm
从以我拥有的均值和标准差为参数的正态分布中绘制点,但我认为第一种选择更加简洁优雅。
geom_point
。 - steveb