【问题标题】:Culmulative count of discrete variable in ggplot2ggplot2中离散变量的累积计数
【发布时间】:2021-05-10 16:56:48
【问题描述】:

这与Plotting cumulative counts in ggplot2 有关,但该问题涉及的是连续变量(而不是离散变量)。

这里,我有一个条形图

set.seed(2021)
dat <- data.frame(x = c(rpois(100, 1), 7, 10))
ggplot(dat) + geom_bar(aes(x, ..count..))

我正在尝试绘制累积计数

ggplot(dat) + geom_bar(aes(x, cumsum(..count..)))

当存在“缺失值”时(即 x 为 5、6、7、9 时)存在间隙。

有没有一种快速简便的方法来制作带有间隙的条形图用条形填充,即我将有 11 个条形?我可以手动创建一个包含累积计数的数据框并像往常一样绘制它,但我很好奇是否有更优雅的方式。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    绘图时可以将变量转换为因子。

    ggplot(dat) + geom_bar(aes(factor(x), cumsum(..count..)))

    【讨论】:

    • 感谢您的回答大卫。我应该让我的问题更清楚,我正在寻找一个带有条形图的空白(即一个有 11 个条形图)。
    【解决方案2】:

    我不会称这是一种“简单”的方法,但我唯一能想到的方法就是解决你的问题:

    1. 使用例如预先汇总您的数据集dplyr::count

    2. 使用缺失的类别填​​充您的数据集,例如tidyr::complete(为此我先将x转换为因子)。

    3. 通过geom_col绘图

    library(ggplot2)
    library(dplyr)
    library(tidyr)
    
    set.seed(2021)
    dat <- data.frame(x = c(rpois(100, 1), 7, 10))
    dat <- dat %>% 
      count(x) %>% 
      mutate(x = factor(x, levels = seq(range(x)[1], range(x)[2], by = 1))) %>% 
      tidyr::complete(x, fill = list(n = 0))
    
    ggplot(dat) + geom_col(aes(x, cumsum(n)))
    

    【讨论】:

    • 感谢您的代码,斯特凡。这是我现在使用的方法,但我非常感谢您创建绘图数据框的代码。比我的干净多了!希望有一个更快的解决方案,只需 ggplot
    【解决方案3】:

    如果您使用 stat_bin 而不是 geom_bar 可能会有所帮助..

    ggplot(dat) + stat_bin(aes(x, cumsum(..count..)))
    

    【讨论】:

    • 感谢您的解决方案 AnilGoyal。这可行,尽管我更喜欢适用于分类x 的解决方案。我可能还会使用ggplot(dat) + stat_bin(aes(x, cumsum(..count..)), breaks = seq(-0.5, 10.5), col = 'white') 使其更美观。
    • 是的,我正要建议,但经过测试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    相关资源
    最近更新 更多