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

如何在R中对收入变量划分十分位并绘制指定可视化图表?

收入十分位划分与可视化解决方案

需求

  • 给despesa_llar数据集新增基于ingressosmensualsllar(家庭月收入)的十分位分组变量
  • 绘制两张图表:
    • 分组柱状图:X轴为收入十分位,Y轴为despesamonetaria(货币支出),按grup_CNAE_Red类别填充
    • 直方图:展示各收入十分位的观测频率

数据集核心结构

structure(list(grup_CNAE_Red = structure(c("Habitatge", "Habitatge", 
"Habitatge", "Habitatge", "Comunicacions", "Restaurants i hotels", 
"Altres béns i serveis", "Aliments i begudes no alcohòliques", 
"Aliments i begudes no alcohòliques", "Aliments i begudes no alcohòliques", 
"Aliments i begudes no alcohòliques"), label = "grup_CNAE_Red", format.stata = "%35s"), 
    despesatotal = structure(c(57629.21, 186827.47, 210879.71, 
    105439.85, 91381.21, 344980.45, 117155.39, 44334.78, 426350.53, 
    199874.51, 41750.52), label = "despesatotal", format.stata = "%9.0g"), 
    despesamonetaria = structure(c(57629.21, 186827.47, 210879.71, 
    105439.85, 91381.21, 344980.45, 117155.39, 44334.78, 426350.53, 
    199874.51, 41750.52), label = "despesamonetaria", format.stata = "%9.0g"), 
    ingressosmensualsllar = structure(c(782, 782, 782, 782, 782, 
    782, 782, 1283, 1283, 1283, 1283), label = "ingressosmensualsllar", format.stata = "%9.0g")), row.names = c(NA, 
-11L), class = c("tbl_df", "tbl", "data.frame"))

原代码问题点

  1. 绘制柱状图时误用原数据集despesa_llar,但decile变量仅存在于处理后的renda_decils中
  2. fill参数排序逻辑错误:reorder(despesamonetaria, grup_CNAE)写法颠倒,应基于grup_CNAE_Red排序
  3. 直方图针对离散的十分位值,默认设置会出现bin宽度不合理的情况

修正后的完整代码

1. 生成收入十分位变量

# 加载必要工具包
library(dplyr)
library(ggplot2)

# 按月收入从低到高划分10组,新增十分位变量
renda_decils <- despesa_llar %>%
  mutate(decile = ntile(ingressosmensualsllar, 10)) %>%
  ungroup()

2. 绘制收入十分位频率直方图

ggplot(renda_decils, aes(x = factor(decile))) +
  geom_bar(fill = "#2c3e50") +  # 用bar适配离散的十分位值,避免直方图bin宽度问题
  labs(
    x = "收入十分位",
    y = "观测数量",
    title = "各收入十分位的观测频率分布"
  ) +
  theme_minimal()

3. 绘制按消费类别分组的支出柱状图

ggplot(renda_decils, aes(x = factor(decile), y = despesamonetaria, fill = grup_CNAE_Red)) +
  geom_col(position = "dodge", alpha = 0.8) +  # position="dodge"实现类别并列显示
  labs(
    x = "收入十分位",
    y = "货币支出",
    fill = "消费类别",
    title = "不同收入十分位的消费支出分布(按类别分组)"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转X轴标签避免重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:01:08