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

如何基于关联矩阵结构数据框绘制可自定义排序的分层条形图?

自定义顺序的多层条形图实现方案

首先加载所需R包:

library(tidyr)
library(ggplot2)

1. 数据预处理:宽格式转长格式

原数据集为宽格式(每列对应一个国家),需转换为长格式以适配绘图需求:

# 将宽格式数据转换为长格式
tourist_long <- pivot_longer(tourist.data, 
                            cols = -months, 
                            names_to = "country", 
                            values_to = "visitors")

2. 指定自定义国家顺序

根据需求设置条形叠加/分组的顺序(比如从底部到上方的国家顺序),将country列转为因子并按该顺序排序:

# 自定义国家顺序,可根据需求修改
custom_order <- c("Australia", "France", "UnitedKingdom", "USA", "Italy")
tourist_long$country <- factor(tourist_long$country, levels = custom_order)

3. 绘制堆叠条形图(符合多层叠加需求)

每个月份的条形由不同国家的数据堆叠而成,Y轴为月份,堆叠顺序严格遵循自定义设置:

ggplot(tourist_long, aes(x = visitors, y = months, fill = country)) +
  geom_col(position = "stack", width = 0.8) + # stack参数实现堆叠效果
  scale_fill_brewer(palette = "Set3") + # 可选:设置配色方案
  labs(title = "各国月度游客流量堆叠条形图",
       x = "游客流量(百万)",
       y = "月份",
       fill = "国家") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5)) # 标题居中显示

4. 绘制分组条形图(每行对应国家的12个月条形)

每个月份下显示所有国家的独立条形,按国家分组合并展示12个月的数据:

ggplot(tourist_long, aes(x = country, y = visitors, fill = country)) +
  geom_col(position = "dodge", width = 0.7) + # dodge参数实现分组效果
  facet_wrap(~months, ncol = 3) + # 按月份分面,每个国家对应12个月的条形
  scale_fill_brewer(palette = "Set3") +
  labs(title = "各国月度游客流量分组条形图",
       x = "国家",
       y = "游客流量(百万)",
       fill = "国家") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5),
        axis.text.x = element_text(angle = 45, hjust = 1)) # 倾斜X轴标签避免重叠

关键说明

  • 这类结构化游客流量数据无需使用igraph包,ggplot2结合tidyr即可轻松实现自定义顺序的多层/堆叠/分组条形图。
  • 修改custom_order向量即可任意调整堆叠或分组的国家顺序,完全满足自定义需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:36