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

如何在R中按堆叠段高度降序排列百分比堆叠条形图?

按总场地面积降序排列百分比堆叠条形图的解决方案

核心思路

利用forcats包的fct_reorder()函数自动根据「总场地面积」对城市分类变量重新排序,无需手动指定顺序,完美适配大数据集。结合ggplot2的百分比堆叠参数实现需求。

具体步骤与代码示例

假设你的数据集名为df,包含字段:city(城市,分类变量)、category(堆叠类别,分类变量)、area(单类场地面积,定量变量)。

  1. 加载依赖包
library(tidyverse) # 包含dplyr、ggplot2、forcats,一站式处理数据和绘图
  1. 数据预处理:按总场地面积排序城市
    先计算每个城市的总场地面积,再用fct_reorder()将city因子按总面积降序排列:
df <- df %>%
  group_by(city) %>%
  mutate(total_area = sum(area)) %>% # 计算每个城市的总场地面积
  ungroup() %>%
  mutate(city = fct_reorder(city, total_area, .desc = TRUE)) # 按总面积降序重排城市顺序

如果你的数据集已经有total_area字段(无需计算),直接执行最后一行即可:

df <- df %>% mutate(city = fct_reorder(city, total_area, .desc = TRUE))
  1. 绘制百分比堆叠条形图
    使用position = "fill"实现百分比堆叠,配合coord_flip()让总场地最大的城市位于顶部:
ggplot(df, aes(x = city, y = area, fill = category)) +
  geom_col(position = "fill") + # 生成百分比堆叠条形
  coord_flip() + # 翻转坐标轴,使城市纵向排列,顶部为总面积最大的城市
  scale_y_continuous(labels = scales::percent) + # 将y轴转换为百分比标签
  labs(x = "城市", y = "场地面积占比", fill = "场地类别") # 设置坐标轴和图例标题

关键说明

  • fct_reorder()会自动根据指定的定量变量(这里是total_area)调整分类变量的因子顺序,.desc = TRUE确保降序排列,完全避免手动编写排序向量的繁琐。
  • position = "fill"会将每个条形的高度标准化为1(即100%),实现百分比堆叠效果。
  • coord_flip()翻转坐标轴后,y轴的城市顺序从上到下是降序,对应视觉上顶部的条形为总场地面积最大的城市。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:36:18