普通与基于因子的Lorenz曲线结果矛盾及多曲线绘制问题
曲线结果相反的原因
- 核心问题是
stat_lorenz()的desc参数设置不符合洛伦兹曲线的绘制逻辑:- 标准洛伦兹曲线需要将收入/消费等指标从小到大排序,依次计算低收入到高收入群体的累计占比对应的指标累计占比,默认参数
desc = FALSE符合该要求,生成的曲线会自然位于45度线下方 - 你设置
desc = TRUE时会将指标从大到小排序,反向计算累计占比,因此曲线会出现在45度线上方,和预期结果完全相反
- 标准洛伦兹曲线需要将收入/消费等指标从小到大排序,依次计算低收入到高收入群体的累计占比对应的指标累计占比,默认参数
按ticks分组绘制多条洛伦兹曲线的实现
只需在ggplot的美学映射中添加color = ticks或group = ticks参数,即可按分组生成多条曲线,同时删除错误的desc = TRUE设置即可得到符合要求的结果。
修正后完整代码
library(gglorenz) library(tidyverse) library(hrbrthemes) ticks <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2) consumption <- c(0, 3, 10, 30, 100, 10, 20, 300, 500, 1000 ) df <- data.frame(ticks, consumption) df$ticks <- as.factor(df$ticks) df %>% ggplot(aes(x = consumption, color = ticks)) + # 按ticks分组,不同组曲线颜色不同 stat_lorenz() + # 使用默认desc=FALSE,符合标准洛伦兹曲线逻辑 coord_fixed() + geom_abline(linetype = "dashed") + scale_x_percent() + scale_y_percent() + theme_ipsum_rc() + labs(x = "农户累计占比", y = "每英亩总利润累计占比", title = "农户间不平等程度", color = "分组")
若不需要区分颜色仅需要分组绘制,将color = ticks替换为group = ticks即可。
内容的提问来源于stack exchange,提问作者Sadaf
相关产品推荐
相关产品推荐

