ggplot boxplot 按组,显示更改汇总统计信息

Posted

技术标签:

【中文标题】ggplot boxplot 按组,显示更改汇总统计信息【英文标题】:Ggplot boxplot by group, change summary statistics shown 【发布时间】:2021-12-06 01:23:35 【问题描述】:

我想更改以下箱线图中显示的汇总统计信息:

我创建的箱线图如下:

ggplot(as.data.frame(beta2), aes(y=var1,x=as.factor(Year))) + 
  geom_boxplot(outlier.shape = NA)+
  ylab(expression(beta[1]))+
  xlab("\nYear")+
  theme_bw()

框的默认值是第一个和第三个分位数。我希望该框显示 2.5% 和 97.5% 的分位数。我知道通过将以下内容添加到 geom_boxplot 可以轻松更改显示一个箱线图时显示的内容:

aes(
    ymin= min(var1),
    lower = quantile(var1,0.025),
    middle = mean(var1),
    upper = quantile(var1,0.975),
    ymax=max(var1))

但是,这不适用于按组生成箱线图的情况。知道如何做到这一点吗?您可以使用 Iris 数据集:

ggplot(iris, aes(y=Sepal.Length,x=Species)) + 
  geom_boxplot(outlier.shape = NA)

编辑:

接受的答案确实有效。我的数据框非常大,因此提供的方法需要一些时间。我在这里找到了另一个解决方案:SOLUTION,它适用于大型数据集和我的特定需求。

【问题讨论】:

不,该帖子显示了如何注释箱线图。我已经编辑了我的帖子以澄清。 【参考方案1】:

这可以通过stat_summary 设置geom="boxplot" 来实现。并传递给fun.data 一个函数,该函数返回一个数据框,其中包含您希望在箱线图中显示为yminlower、...的摘要统计信息:

library(ggplot2)

ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  stat_summary(geom = "boxplot", fun.data = function(x) 
    data.frame(
      ymin = min(x),
      lower = quantile(x, 0.025),
      middle = mean(x),
      upper = quantile(x, 0.975),
      ymax = max(x) 
    ), outlier.shape = NA)

【讨论】:

谢谢!我使用的数据集非常大,1365000 行,应用这种方法似乎需要很长时间。还有其他建议吗? 嗯。我刚刚使用具有 3m 行的数据框进行了一个小型基准测试,并与默认的geom_boxplot 进行了比较。结果是使用 stat_summary 的方法比 geom_boxplot 略快。但你是对的。无论哪种情况,渲染绘图都需要一些时间。但恐怕我不知道如何加快速度。 ): 我找到了适合我的解决方案。我会在帖子中编辑和参考。

以上是关于ggplot boxplot 按组,显示更改汇总统计信息的主要内容,如果未能解决你的问题,请参考以下文章

R ggplot boxplot:更改y轴限制

更改整行 geom_boxplot() 的粗细

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置显示的分组)实战

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(配置数据点显示)实战

更改 ggplot 因子颜色

R语言ggplot2可视化箱图(boxplot)时忽视异常值(outlier)并重新分配坐标轴的范围是的可视化的箱图可以有效显示箱体实战