ggplot2:原始数据的条形图,周围有聚合框

ggplot2: bar plot of raw data with frame around aggregated

我正在尝试根据原始数据创建堆积条形图,其中每组因子变量可能有多个条目,y 值应该是所有此类条目的总和。起初做一个正常的 geom_bar 看起来不错,但它似乎将每个原始条目绘制为一个单独的矩形,相互堆叠。这看起来不错,直到您想围绕条形图的每个部分绘制一个框:

library(tidyverse)
data = tibble(
    age = factor(c(2, 3, 3, 3, 2, 2)),
    value = c(30, 5, 15, 14, 29, 9)
)
ggplot(data, aes(x = "Observation", y = value, fill = age)) +
    geom_bar(stat = "identity", colour = "black")

我真正想要的是绿松石周围的一个框架和红色部分周围的一个矩形。我如何直接使用 ggplot 执行此操作?

当然可以手动调用summarize:

ggplot(data %>% group_by(age) %>% summarize(value = sum(value)), 
  aes(x = "Observation", y = value, fill = age)) +
  geom_bar(stat = "identity", colour = "black")

但这需要针对每个不同的轴变量选择进行调整,这将是一个痛苦,因为我正在处理约 15 个因子维度并且必须创建数十个图表,每个轴具有不同的因子变量(包括 facet_grid).

所以理想情况下,ggplot / geom_bar 会自动进行聚合,然后绘制聚合值,而不是分别绘制每个单独的条目。 这可能吗?

stat_summary() 可以即时处理这些类型的摘要。

您只需指定要汇总的几何图形和函数。这里我们还需要明确的说要堆叠条形以防止重叠。

ggplot(data, aes(x = "Observation", y = value, fill = age,)) +
  stat_summary(geom = "bar", fun.y = "sum", position = "stack")