使用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
相关产品推荐
相关产品推荐

