如何用ggplot2实现年份列在柱状图中的正确对比显示
解决方案
你的问题核心是当前数据为宽格式(年份作为列名),而绘制并列柱状图需要将数据转换为长格式。以下是基于tidyverse工具链的完整实现:
完整代码
# 加载依赖包 library(tidyverse) # 1. 将宽格式数据转换为长格式 data_long <- data2 %>% pivot_longer( cols = c(`2018`, `2020`, `2022`), # 指定要转换的年份列(数字列名需用反引号包裹) names_to = "Year", # 新增列:记录年份 values_to = "Total_Votes" # 新增列:记录对应票数 ) # 2. 绘制并列柱状图 viz2 <- data_long %>% ggplot(aes(x = Daysoutfromelection, y = Total_Votes, fill = Year)) + geom_col(position = "dodge") + # position="dodge"实现同一x值下的柱子并列 labs( x = "距选举天数", y = "总票数", title = "各年份选举前不同天数的票数对比", fill = "年份" ) + theme_minimal() print(viz2)
关键说明
- 数据格式转换:
pivot_longer将原本分散在列中的年份数据合并为两列,让ggplot能识别分组逻辑,这是实现并列柱的前提。 - 并列柱实现:
geom_col(position = "dodge")参数强制同一x值下的不同年份柱子并排显示,默认的position="stack"是堆叠效果,这是你之前无法实现并列的核心原因。 - 列名引用:年份列名为数字,需用反引号
`2018`包裹,避免语法错误。
原代码问题分析
你之前写的y = '2018'是把字符串'2018'作为y轴固定值,而非引用数据框中的2018列;同时宽格式数据无法支持多组并列柱的绘制逻辑,这两个问题共同导致了失败。
内容的提问来源于stack exchange,提问作者Ashings Total
相关产品推荐
相关产品推荐

