如何调整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
相关产品推荐
相关产品推荐

