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

如何使用ggplot绘制含5个变量的国家分组条形图?

解决分组条形图绘制问题的方法

核心思路:先转换数据格式

ggplot绘制多变量分组条形图,必须先把宽格式数据转为长格式——也就是把你要展示的5个变量(aggri_change、fisheries_pdiff、food_pdiff、freshwater_pdiff、co2_pdiff)合并成一列(比如命名为indicator),对应的值合并成另一列(比如命名为diff_value)。

具体步骤与代码

  1. 加载必要的工具包
library(ggplot2)
library(tidyr) # 用于数据格式转换
  1. 转换数据格式(假设你的数据集名为df)
df_long <- df %>%
  pivot_longer(
    cols = c(aggri_change, fisheries_pdiff, food_pdiff, freshwater_pdiff, co2_pdiff),
    names_to = "indicator",
    values_to = "diff_value"
  )
  1. 绘制分组条形图(如需添加折线,需保证分组逻辑一致)
ggplot(df_long, aes(x = country, y = diff_value, fill = indicator)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8), width = 0.7) + # position_dodge实现条形并排分组,而非堆叠
  # 添加折线时必须指定group=indicator,否则会出现连接错误
  geom_line(aes(group = indicator, color = indicator), position = position_dodge(width = 0.8)) +
  labs(
    x = "国家",
    y = "差值/变化量",
    fill = "指标",
    color = "指标",
    title = "各国多指标对比"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠

关键注意点

  • position参数:必须使用position_dodge()替代默认的position_stack(),才能让同国家的不同指标条形并排显示,而非堆叠。
  • 数据格式:长格式是ggplot处理多变量分组图的基础,宽格式直接绘图会导致变量被当作独立图层,引发堆叠或混乱。
  • 折线分组:添加geom_line时,一定要在aes中指定group=indicator,否则ggplot无法识别折线的分组逻辑,出现错误连接。

对你之前问题的修正

你之前出现条形堆叠问题,大概率是以下原因导致:

  1. 数据仍为宽格式,直接添加多个geom_bar引发堆叠;
  2. 未设置position=dodge参数;
  3. 添加geom_line时未正确指定分组。

按照上述步骤转换数据并设置参数,即可得到符合需求的分组条形图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:35:42