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

如何用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)

关键说明

  1. 数据格式转换:pivot_longer将原本分散在列中的年份数据合并为两列,让ggplot能识别分组逻辑,这是实现并列柱的前提。
  2. 并列柱实现:geom_col(position = "dodge")参数强制同一x值下的不同年份柱子并排显示,默认的position="stack"是堆叠效果,这是你之前无法实现并列的核心原因。
  3. 列名引用:年份列名为数字,需用反引号`2018`包裹,避免语法错误。

原代码问题分析

你之前写的y = '2018'是把字符串'2018'作为y轴固定值,而非引用数据框中的2018列;同时宽格式数据无法支持多组并列柱的绘制逻辑,这两个问题共同导致了失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:31:04