使用Pivot_Longer合并3个数据集并绘制ggplot可视化图表
解决方案:合并数据集+转长格式+可视化
1. 加载必备工具包
先加载tidyverse,它包含了数据合并、格式转换和可视化所需的全部工具:
library(tidyverse)
2. 合并数据集并转换为长格式
先把三个年份的数据集合并,再用pivot_longer转成你需要的四列格式:
# 合并三个年份的数据集 combined_data <- bind_rows(A_1930, B_1990, C_2020) # 转换为长格式,生成YEAR、GRADE、NAME、VALUE四列 long_data <- combined_data %>% pivot_longer( cols = c(total, white, black, imm), # 指定要转成行的宽格式列 names_to = "NAME", # 存储原列名的新列 values_to = "VALUE" # 存储原列数值的新列 ) %>% rename(YEAR = year, GRADE = grade) # 把列名改成大写匹配需求 # 查看转换后的前几行数据 head(long_data)
3. 可视化实现
由于看不到示例图,这里提供两种实用的可视化方案,你可以按需选择:
方案1:分年级趋势折线图
适合展示不同群体数值随年份的变化趋势:
ggplot(long_data, aes(x = YEAR, y = VALUE, color = NAME, group = NAME)) + geom_line(linewidth = 1) + geom_point(size = 2) + facet_wrap(~GRADE) + # 按年级分面板展示 labs( title = "各年级不同群体数值随年份变化", x = "年份", y = "数值", color = "群体类别" ) + theme_minimal() + theme(plot.title = element_text(hjust = 0.5))
方案2:分年份年级的柱状对比图
适合对比同一年份、年级下不同群体的数值差异:
ggplot(long_data, aes(x = NAME, y = VALUE, fill = NAME)) + geom_col(position = "dodge") + facet_grid(GRADE ~ YEAR) + # 按年级和年份交叉分面 labs( title = "各年份、年级下不同群体数值对比", x = "群体类别", y = "数值", fill = "群体类别" ) + theme_minimal() + theme( plot.title = element_text(hjust = 0.5), axis.text.x = element_text(angle = 45, hjust = 1) )
内容的提问来源于stack exchange,提问作者Kimberly
相关产品推荐
相关产品推荐

