繁体   English   中英

使用汇总统计信息在ggplot2中生成箱线图

[英]Producing a boxplot in ggplot2 using summary statistics

下面是使用ggplot2生成boxplot的代码我正在尝试修改以适应我的问题:

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 = mean - 3 * sd lower = mean - sd mean = mean upper = mean + sd
ymax =平均值+ 3 * sd

但我不知道如何定义一个函数,它将从stat_summary中的fun.data访问mydata.mine的mean和sd。 或者,我可以使用rnorm从我通过的平均值和sd参数化绘制点,但第一个选项在我看来更优雅和简单。

ggplot(mydata.mine, aes(x = as.factor(group))) +
  geom_boxplot(aes(
      lower = mean - sd, 
      upper = mean + sd, 
      middle = mean, 
      ymin = mean - 3*sd, 
      ymax = mean + 3*sd),
    stat = "identity")

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM