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

求助:修复Stacked Rank Bar Graph(堆叠排名条形图)绘制代码

问题描述

我需要绘制降序堆叠排名条形图,已有2018、2019年及现有年份的排名数据,要求:

  • X轴为年份
  • Y轴为用水量(water-use)
  • 按行业(sectors)填充颜色并显示图例

但以下代码无法正常运行,请求协助修复。示例图为降序堆叠条形图:每个年份对应一个堆叠条形,条形按行业用水量从高到低堆叠,右侧配有行业分类图例。

报错代码
rank_use%>%
ggplot(., aes(x = fct_rev(fct_infreq(year)), y = water_use, fill = sectors)) + 
geom_bar(position = 'stack', stat = 'identity') +
theme_economist_white() + theme(axis.text.x = element_text(angle = 90), axis.text = 
element_text(face= "bold"),legend.position = 'right') + 
labs(fill = "Sectors", face="bold")+ 
ylab('Water Use (Thousand m3)') + xlab("Year")+ ylim(0,50000)+
theme(text=element_text(size=10, family="Arial"))+
ggtitle("Top 10 sectors by water use for 2018, 2019, and with existing  year")+ 
theme(plot.title=element_text( hjust=0.5, vjust=0.5, face='bold'))+
theme(axis.title = element_text(face="bold"))+
theme(axis.title.x = element_text(margin = unit(c(3, 0, 0, 0), "mm")),
    axis.title.y = element_text(margin = unit(c(0, 3, 0, 0), "mm")),
    plot.title = element_text(vjust = 3))+
theme(legend.title = element_text(colour="black", size=10, face="bold"))
修复方案及代码

问题排查与解决

  1. 年份排序逻辑错误:fct_rev(fct_infreq(year))是按年份出现频率倒序,而非指定的年份顺序,需手动指定年份层级。
  2. 依赖包未加载:theme_economist_white()来自ggthemes包,需确保已安装并加载。
  3. 字体兼容性问题:Arial字体可能在部分系统中不存在,建议移除或替换为系统可用字体。
  4. 数据截断风险:ylim(0,50000)会直接删除超出范围的数据,改用coord_cartesian()仅缩放显示范围。
  5. 重复主题设置:合并多个theme()调用,避免设置冲突与冗余。

修复后完整代码

# 加载依赖包
library(tidyverse)
library(ggthemes)
library(forcats)

rank_use %>%
  ggplot(aes(
    x = factor(year, levels = c("Existing_Year", "2019", "2018")), # 自定义年份显示顺序
    y = water_use, 
    fill = sectors
  )) + 
  geom_bar(position = 'stack', stat = 'identity') +
  theme_economist_white() + 
  theme(
    axis.text.x = element_text(angle = 90), 
    axis.text = element_text(face = "bold"),
    legend.position = 'right',
    text = element_text(size = 10), # 若需Arial字体,确保系统已安装并替换此处
    plot.title = element_text(hjust = 0.5, vjust = 3, face = 'bold'),
    axis.title = element_text(face = "bold"),
    axis.title.x = element_text(margin = unit(c(3, 0, 0, 0), "mm")),
    axis.title.y = element_text(margin = unit(c(0, 3, 0, 0), "mm")),
    legend.title = element_text(colour = "black", size = 10, face = "bold")
  ) + 
  labs(
    fill = "Sectors",
    y = 'Water Use (Thousand m3)', 
    x = "Year",
    title = "Top 10 sectors by water use for 2018, 2019, and existing year"
  ) +
  coord_cartesian(ylim = c(0, 50000)) # 安全设置Y轴显示范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:35:25