ggplot绘制冲积图报错:Aesthetics长度不匹配,求解决方案
问题解决:月度航班量对比冲积图报错修复
错误原因分析
报错的核心问题是数据聚合时丢失了Airport维度:
- 原月度统计代码仅按
month分组,导致处理后的df_fly中没有Airport列 - ggplot调用时,
aes(fill = Airport)和axis1 = Airport找不到对应字段,引发美学映射长度不匹配的错误 - 冲积图需要展示「机场-月度-航班量」的关联关系,必须同时保留机场和月份两个分组维度
修正后的完整代码
# 加载必要包 library(tidyverse) library(lubridate) library(ggalluvial) # 数据预处理:过滤目标机场+到达航班,按机场+月度分组求和 df_fly <- fly %>% filter(Airport %in% c("Brussels", "Dresden", "London"), Type == "Arrival") %>% group_by(Airport, month = floor_date(Date, "month")) %>% summarise(Count = sum(Count), .groups = "drop") %>% mutate(month = format(month, "%Y-%m")) # 格式化月份为易读字符串 # 绘制月度对比冲积图 ggplot(df_fly, aes(y = Count, axis1 = Airport, axis2 = month)) + geom_alluvium(aes(fill = Airport), width = 1/8) + geom_stratum(width = 1/8, fill = "white", color = "grey") + geom_label(stat = "stratum", aes(label = after_stat(stratum))) + scale_x_discrete(limits = c("机场", "月度"), expand = c(.05, .05)) + scale_fill_brewer(type = "qual", palette = "Set2") + labs(title = "三大机场月度到达航班量对比", y = "航班总量") + theme_minimal()
关键修改点说明
- 数据聚合:新增
Airport到group_by中,确保每个机场的月度数据被单独统计 - 月份格式化:把日期型的month转为
%Y-%m字符串,避免图表标签显示原始时间戳 - 美学映射调整:
axis2改为month,让冲积图连接「机场」和「月度」两个节点,清晰展示每个机场在不同月份的航班量分布 - 视觉优化:调整stratum填充色为白色,修改轴标签和主题,提升可读性
内容的提问来源于stack exchange,提问作者Francis-18
相关产品推荐
相关产品推荐

