首页 > 解决方案 > 如何使用 ggalluvial 向冲积地块中的地层添加百分比值?

问题描述

我正在寻找将四舍五入的百分比标签添加到冲积地层的最方便的方法。以下示例中有 50 个案例。独立于第 1 阶段或第 2 阶段,每个案例都属于 A、B 或 C 组。我想显示每个阶段的相关组从属关系。

library(ggplot2)
library(ggalluvial)

df <- data.frame('id' = rep(1:50,2),
                     'stage' = c(rep(1,50), rep(2,50)),
                     'group' = sample(c('A','B','C'), 100, replace = TRUE))

ggplot(df,
       aes(x = stage, stratum = group, alluvium = id, fill = group)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow() +
  geom_stratum(alpha = .5)

在此处输入图像描述

有没有办法在不计算初始数据框中的百分比列的情况下向层(条形段)添加四舍五入的百分比标签(包括“%”)?如果我没有完全弄错的话,geom_text 在这里的工作方式与在 geom_bar() 中的工作方式不同。

标签: rggplot2label

解决方案


这个问题的标准 ggplot2 解决方案是使用“计算美学”。这些美学规范不是来自传递给的数据,ggplot()而是来自统计转换 (the stat_*()) 的输出,用于渲染图形元素 (the geom_*())。此输出的列(用户很少看到)称为“计算变量”。关于这个主题的文档是有限的并且有点过时,使用stat()而不是after_stat()调用它们。由于 ggalluvial 不支持计算变量,因此@bencekd 的答案当时是正确的。

截至今天,v0.12.0 在 CRAN 上提供计算变量的支持和文档。特别是,三个计算变量可用,它们对应于stat_bin()或使用的具有相同名称的变量stat_count()ncount(的加权版本n)和prop(从 计算的轴内比例count)。看起来您想要使用prop,如下图所示:

library(ggplot2)
library(scales)
library(ggalluvial)

df <- data.frame('id' = rep(1:50,2),
                 'stage' = c(rep(1,50), rep(2,50)),
                 'group' = sample(c('A','B','C'), 100, replace = TRUE))

ggplot(df,
       aes(x = stage, stratum = group, alluvium = id, fill = group)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow() +
  geom_stratum(alpha = .5) +
  geom_text(stat = "stratum",
            aes(label = percent(after_stat(prop), accuracy = .1)))

reprex 包于 2020-07-14 创建(v0.3.0)


推荐阅读