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

如何用ggplot2绘制以year为横轴、income为纵轴的双变量直方图?

在R中实现按年份展示收入分布的直方图

你要的需求本质是按年份分组展示收入的分布特征,传统直方图仅针对单变量做频数统计,没法直接满足双变量关联展示的需求。下面用ggplot2包给出几种贴合需求的实现方案:

1. 分面直方图(最清晰的年份分布展示)

这种方式给每个年份单独生成一个收入分布的直方图,适合直观对比各年份收入的分布差异:

首先模拟示例数据集(你可以替换成自己的真实数据):

set.seed(123) # 固定随机种子,保证结果可复现
df <- data.frame(
  year = rep(2018:2022, each = 200),
  income = c(rnorm(200, 50000, 8000),
             rnorm(200, 55000, 9000),
             rnorm(200, 60000, 10000),
             rnorm(200, 62000, 11000),
             rnorm(200, 65000, 12000))
)

然后绘制分面直方图:

library(ggplot2)

ggplot(df, aes(x = income)) +
  geom_histogram(bins = 15, fill = "#2E86AB", color = "white") +
  facet_wrap(~ year, nrow = 1) + # 按年份横向分面排列
  labs(x = "收入", y = "频数", title = "各年份收入分布直方图") +
  theme_minimal()

2. 分组直方图(同一图内对比年份分布)

如果想把所有年份的收入分布放在同一个图里,用颜色区分年份:

ggplot(df, aes(x = income, fill = factor(year))) +
  geom_histogram(bins = 15, position = "dodge", color = "white") +
  labs(x = "收入", y = "频数", fill = "年份", title = "各年份收入分布对比") +
  theme_minimal()

3. 柱状图展示收入汇总值(若需求是年份-收入统计量对应)

如果你其实想展示每年收入的统计值(比如均值、中位数)(而不是分布),那柱状图更贴合需求,因为直方图纵轴默认是频数/密度,而非收入本身的数值:

# 先计算每年的平均收入
year_income_stats <- aggregate(income ~ year, data = df, mean)

ggplot(year_income_stats, aes(x = factor(year), y = income)) +
  geom_col(fill = "#2E86AB", color = "white") +
  labs(x = "年份", y = "平均收入", title = "各年份平均收入") +
  theme_minimal()

补充说明

传统直方图的核心是展示单个连续变量的分布,当需要结合分类变量(year)时,本质是对连续变量(income)做分组后再展示分布,上述方案可以根据你的实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:10:43