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

如何反转ggplot2中堆叠条形图的堆叠顺序?

如何反转ggplot2中堆叠条形图的堆叠顺序?

看起来你遇到了堆叠条形图顺序不符合预期的问题,别担心,这在ggplot2里很容易解决,我给你两种实用的处理方式:

方法一:改用长格式数据(推荐,更符合ggplot设计思路)

你现在的代码是用两个geom_bar分别绘制两组数据,这种宽格式的写法不仅繁琐,还不容易调整堆叠顺序。更规范的做法是先把数据转换成长格式(tidy data),然后用单个geom_bar处理,再通过参数直接反转堆叠顺序。

步骤如下:

  1. 先加载tidyr包(如果没安装的话先运行install.packages("tidyr")),把宽格式数据转成长格式:
library(tidyr)
library(ggplot2)

# 将宽格式数据转换为长格式
data_long <- pivot_longer(data_2019, 
                          cols = c(CO_emissions, CO_emissionsSD),  # 指定要转换的列
                          names_to = "Emission_Type",  # 新的类别列名
                          values_to = "Tons")  # 数值列名
  1. 用长格式数据绘图,通过position_stack(reverse = TRUE)反转堆叠顺序,同时自定义颜色匹配你的需求:
COChart <- ggplot(data_long, aes(x = year, y = Tons, fill = Emission_Type)) +
  geom_bar(stat = "identity", position = position_stack(reverse = TRUE)) +
  # 自定义颜色,对应原数据的两个类别
  scale_fill_manual(values = c("CO_emissions" = "green", "CO_emissionsSD" = "red")) +
  labs(title = "CO Emissions from Pleasants Power Plant from 2001 to 2023", 
       x = "Year", 
       y = "Tons") +
  theme_light()

这种方法的好处是后续如果要添加更多排放类型,只需要修改数据整理部分,不用重复添加geom_bar,代码更简洁易维护。

方法二:直接调整geom_bar的绘制顺序

如果你不想修改数据格式,也可以通过调换两个geom_bar的顺序来反转堆叠——因为ggplot是按绘制顺序堆叠的:先画的元素会在底层,后画的在顶层。

你现在的代码先画了绿色的CO_emissions,再画红色的CO_emissionsSD,所以绿色在下方、红色在上方。如果想反转,只需要把两个geom_bar的顺序调换即可:

COChart <- ggplot(data_2019, aes(x = year)) +
  # 先画红色的CO_emissionsSD,让它在底层
  geom_bar(aes(y = CO_emissionsSD, fill = "red"), stat = "identity", position = "stack") +
  # 再画绿色的CO_emissions,让它在顶层
  geom_bar(aes(y = CO_emissions, fill = "green"), stat = "identity", position = "stack") +
  labs(title = "CO Emissions from Pleasants Power Plant from 2001 to 2023", 
       x = "Year", 
       y = "Tons") +
  theme_light()

不过这种方法只适合类别较少的场景,数据格式不够规范,长期来看还是推荐第一种方法哦。

备注:内容来源于stack exchange,提问作者CJS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:18:08