如何使用ggplot绘制以地区为X轴、按年份分组的柱状图?
绘制分组柱状图需求
我有如下数据框:
District `2011` `2016` `2021` <chr> <dbl> <dbl> <dbl> 1 YTM 44045 49046 44458 2 KC 37660 41802 40994 df <- tibble(District = c("YTM", "KC"), `2011` = c(44045, 37660), `2016` = c(49046, 41802), `2021` = c(44458, 40994))
想绘制一幅分组柱状图:以District为X轴,每个区域下按年份并列显示对应柱子,效果为同一区域的不同年份柱子紧挨排布的样式。
实现方法
要做出这种图,首先得把数据从宽格式转成长格式——ggplot2更适合处理长格式数据,具体步骤如下:
- 加载所需工具包
library(tidyverse) # 包含转格式用的tidyr和绘图用的ggplot2
- 转换数据格式
把多列年份转为一个分类变量列,同时将对应数值整合到单列:
df_long <- df %>% pivot_longer(cols = -District, names_to = "Year", values_to = "Value")
- 绘制分组柱状图
ggplot(df_long, aes(x = District, y = Value, fill = Year)) + geom_col(position = position_dodge()) + # 该参数实现同一区域下柱子并列,而非堆叠 labs(title = "各区域年度数值对比", x = "区域", y = "数值", fill = "年份") + theme_minimal()
关键说明:
pivot_longer:这是核心步骤,将原数据的宽格式转为ggplot可识别的长格式,为按年份分组绘图打下基础position_dodge():如果省略该参数,柱子会默认堆叠,加上后就呈现出并列的分组效果fill = Year:用不同颜色区分不同年份的柱子,让分组信息更直观
内容的提问来源于stack exchange,提问作者KayTee
相关产品推荐
相关产品推荐

