r - 使用堆叠条形图时,ggplot2 条形图带有误差条

标签 r ggplot2 bar-chart errorbar

我正在尝试生成一个带有误差条的堆积条形图,该误差条代表每个条形的总变异性。我不想使用闪避条形图,因为每个条形有 >10 个类别。

下面我有一些可重现示例的示例数据:

scenario = c('A','A','A','A')
strategy = c('A','A','A','A')
decile = c(0,0,10,10)
asset = c('A','B','A','B')
lower = c(10,20,10, 15)
mean = c(30,50,60, 70)
upper = c(70,90,86,90)
data = data.frame(scenario, strategy, decile, asset, lower, mean, upper)

一旦我们有了data df,我们就可以使用ggplot2来创建一个堆叠条形图,如下所示:

ggplot(wide, aes(x=decile, y=mean, fill=asset)) + 
  geom_bar(stat="identity") +
  facet_grid(strategy~scenario) +
  geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.25)

但是,生成的误差条针对每个堆叠条的每个单独组件:

enter image description here

我很欣赏我为 df 的每一行提供 lowermeanupper 的结果,但即使我对这些求和每十分之一我没有在每个条形堆栈的顶部得到我想要的误差条。

正确的 ggplot2 代码是什么,或者启用此功能的正确数据结构是什么?

最佳答案

我认为您正确地认识到您需要操纵数据而不是绘图。您实际上无法在错误栏上设置 position_stack,因此您需要重新计算错误栏的平均值、上限和下限值。本质上,这意味着获取平均值的累积和,并相应地移动上限和下限范围。您可以在 dplyr 管道内执行此操作。

注意,我认为您还需要在误差线上设置一个 position_dodge,因为即使适当移动,它们的范围也会重叠,这将使它们更难以直观地解释:

library(ggplot2)
library(dplyr)

data %>% 
  mutate(lower = lower - mean, upper = upper - mean) %>%
  group_by(decile) %>% 
  arrange(rev(asset), by.group = TRUE) %>%
  mutate(mean2 = cumsum(mean), lower = lower + mean2, upper = upper + mean2) %>%
  ggplot(aes(x = decile, y = mean, fill = asset)) + 
  geom_bar(stat = "identity") +
  facet_grid(strategy ~ scenario) +
  geom_errorbar(aes(y = mean2, ymin = lower, ymax = upper), width = 2,
                position = position_dodge(width = 2)) +
  geom_point(aes(y = mean2), position = position_dodge(width = 2))

enter image description here

关于r - 使用堆叠条形图时,ggplot2 条形图带有误差条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64209051/

相关文章:

r - 使用雷达/极坐标图来描绘单个数据点

css - 如何为单个系列条形图添加 3 个图例?? JAVAFX

r - 通过使用涉及两列的两个单独的选择标准使用 dplyr 进行过滤

r - CompactPDF 的 qpdf.exe?

r - 使用 gWidgets2 显示图形

r - 在 ggplot 比例函数中引用数据集变量的正确方法是什么?

r - 在 dplyr 分组后将误差线添加到 ggplot2 条形图

r - 年度比较时间序列ggplot2 R

java - 如何在条形图上放置基准线?

r - 如何在一张覆盖有透明度的条形图上绘制两个字符变量的频率