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

如何在R语言中使用ggplot2绘制时间序列分组柱状图?

解决ggplot2分组柱状图显示为堆叠图的问题

你的问题核心在于数据格式不匹配以及多图层调用geom_bar的方式错误:ggplot2更适合处理长格式数据,而你的原始数据是宽格式;同时多次调用geom_bar时,每个图层的position="dodge"只会作用于当前图层的元素,无法实现跨系列的分组。

正确实现步骤

  1. 转换数据格式:用tidyr::pivot_longer把宽格式数据转为长格式,将great_deal、only_some等列合并为一个类别变量(比如命名为response_type),对应数值放在另一列(比如count)。
  2. 单图层绘制分组柱状图:基于长格式数据,用一次geom_bar,通过fill映射类别变量,同时设置position="dodge"实现分组。

完整代码示例

# 加载必要包
library(tidyverse)

# 假设你的数据框是confinan,转换为长格式
confinan_long <- confinan %>%
  pivot_longer(
    cols = c(great_deal, only_some, dont_know,  # 替换成你实际的四列名称
             not_a_deal),  # 这里补充第四列的实际名称
    names_to = "response_type",
    values_to = "count"
  )

# 绘制分组柱状图
ggplot(confinan_long, aes(x = year, y = count, fill = response_type)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
  labs(
    title = "各年份不同反馈类型的数量",
    x = "年份",
    y = "数量",
    fill = "反馈类型"
  ) +
  theme_minimal()

关键说明

  • position_dodge(width = 0.9):手动设置分组柱子的间距,让分组更紧凑(默认width是0.9,可按需调整)。
  • 务必确保cols参数里包含你所有要展示的四列名称,避免漏掉数据系列。
  • 如果不需要额外的主题和标签,可以去掉labs和theme_minimal()部分。

内容的提问来源于stack exchange,提问作者James Rider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:22:06