You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R绘制多类别累积频率多边形图的Y轴对齐问题及解决

问题:ggplot绘制累积频率多边形时,不同类别Y轴起始不一致的解决方法

我用R的ggplot绘制累积频率多边形图,希望将三个类别(sex)分开以清晰查看趋势差异,但操作后发现不同类别的Y轴刻度不一致,所有类别无法从计数0开始。

初始代码如下:

ggplot(aes(x = years, color = sex))+
  geom_freqpoly(aes(y = cumsum(..count..)), binwidth = 2)

解决方法(附可复现样本数据)

先构造一个样本数据集用于测试:

df <- data.frame(
  year = c(1980, 1980, 1980, 1982, 1982, 1982, 1982, 1982,
          1990, 1990, 1990, 1990, 1990, 1990, 1990,
          1990, 1991, 1991, 1991, 1991, 1991, 1993, 1993),
  sex = c("Un", "Ma", "Fe", "Ma", "Fe", "Un", "Un", "Fe", "Ma"
          , "Ma", "Ma", "Ma", "Fe", "Fe", "Fe", "Ma", "Ma", "Fe", "Ma", 
          "Ma", "Fe", "Fe", "Ma")
)

library(ggplot2)

原代码的问题在于cumsum(..count..)未按sex分组计算,导致全局累积:

df |> 
  ggplot(aes(x = year, color = sex)) +
  geom_freqpoly(aes(y=cumsum(..count..)))

修正后的代码,使用ave函数在每个分组内计算累积和,确保每个类别从0起始:

df |> 
  ggplot(aes(x = year, color = sex)) +
  geom_freqpoly(aes(y = after_stat(ave(count, color, FUN = cumsum))))

问题根源与说明

初始代码中的cumsum(..count..)是对所有数据的计数进行全局累积,没有识别color=sex的分组逻辑。改用ave(count, color, FUN = cumsum)后,会在每个sex类别内独立计算累积计数,这样每个类别的累积曲线都会从0开始,Y轴刻度保持一致,能清晰对比不同类别的趋势差异。

内容的提问来源于stack exchange,提问作者Marti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 01:44:55