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

如何调整R ggplot堆叠条形图中Company分类变量的堆叠顺序

解决方法

ggplot2中分类变量的展示(含堆叠顺序)由该变量的因子(factor)水平(levels)决定,默认按字母序自动排序,调整因子水平即可修改堆叠顺序:

注意:堆叠条形图的层级对应因子水平顺序,第一个水平对应堆叠最底层,最后一个水平对应堆叠最顶层

方法1:基础R直接指定因子水平

按照你需要的堆叠顺序(从底层到顶层依次为Globalfoundries → Samsung Electronics → TSMC → UMC → Other)直接设置levels:

# 修改Company列为自定义顺序的因子
Newdata$Company <- factor(Newdata$Company,
                          levels = c("Globalfoundries", "Samsung Electronics", "TSMC", "UMC", "Other"))

方法2:用forcats包调整(tidyverse自带,无需额外安装)

如果不想手动写全所有分类,只需要把指定分类移到最后即可,其余分类保持原有顺序:

library(dplyr)
library(forcats)

Newdata <- Newdata %>%
  # 将UMC、Other依次移到因子水平的最后位,Other在最末尾对应堆叠最顶层
  mutate(Company = fct_relevel(Company, "UMC", "Other", after = Inf))

绘图

修改完因子水平后,运行你原本的绘图代码即可得到符合要求的堆叠顺序:

library(ggplot2)

Newdata %>%
  ggplot(aes(Quarter, fill = Company)) +
  geom_bar()

如果需要让图例顺序和堆叠从上到下的顺序保持一致,可以添加图例反转参数:

Newdata %>%
  ggplot(aes(Quarter, fill = Company)) +
  geom_bar() +
  guides(fill = guide_legend(reverse = TRUE))

额外提示

你当前的Quarter列如果是字符型,X轴的季度顺序也可能出现错乱,建议也将其转换为按时间排序的因子:

Newdata$Quarter <- factor(Newdata$Quarter,
                          levels = c("Q12019", "Q22019", "Q32019", "Q42019",
                                     "Q12020", "Q22020", "Q32020", "Q42020",
                                     "Q12021", "Q22021"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:05