如何在R中使用Typology汇总迁移流数据并保留流向以绘制ggalluvial图?
解决方法
1. 匹配市政当局类型到迁移流数据
首先需要将迁移流数据中的起点、终点ID分别与类型数据关联,得到每个迁移流对应的起点类型和终点类型:
# 先修正类型数据里的拼写错误(Subrban → Suburban) typology_df$Typology <- gsub("Subrban", "Suburban", typology_df$Typology) # 匹配起点类型 migration_with_origin_type <- merge( migration_df, typology_df, by.x = "Origin_Municipality_Number", by.y = "Municipality_Number", all.x = TRUE ) colnames(migration_with_origin_type)[colnames(migration_with_origin_type) == "Typology"] <- "Origin_Typology" # 匹配终点类型 migration_with_types <- merge( migration_with_origin_type, typology_df, by.x = "Destination_Municipality_Number", by.y = "Municipality_Number", all.x = TRUE ) colnames(migration_with_types)[colnames(migration_with_types) == "Typology"] <- "Destination_Typology"
2. 按类型配对汇总迁移流量
接下来按起点类型和终点类型分组,计算每组的总迁移数量:
library(dplyr) summary_df <- migration_with_types %>% group_by(Origin_Typology, Destination_Typology) %>% summarise(Total_Migration = sum(Migration_Number), .groups = "drop")
得到的summary_df就是包含起点类型、终点类型和对应总流量的数据框,示例输出如下:
# A tibble: 4 × 3 Origin_Typology Destination_Typology Total_Migration <chr> <chr> <dbl> 1 Urban Rural 300 2 Suburban Urban 200 3 Rural Suburban 75
3. 绘制桑基图(Alluvial Plot)
使用ggalluvial包绘制迁移流可视化:
library(ggalluvial) library(ggplot2) ggplot(summary_df, aes(y = Total_Migration, axis1 = Origin_Typology, axis2 = Destination_Typology)) + geom_alluvium(aes(fill = Origin_Typology), width = 1/12) + geom_stratum(width = 1/12, fill = "white", color = "black") + geom_text(stat = "stratum", aes(label = after_stat(stratum))) + scale_x_discrete(limits = c("起点类型", "终点类型"), expand = c(0.05, 0.05)) + scale_fill_brewer(type = "qual", palette = "Set1") + labs(title = "不同市政类型间的迁移流量", y = "总迁移人数", fill = "起点类型") + theme_minimal()
这段代码会生成清晰的桑基图,直观展示各类型之间的迁移流向和流量大小。
内容的提问来源于stack exchange,提问作者Fabianhager1991
相关产品推荐
相关产品推荐

