如何用googleVis在RStudio中制作6层级桑基图?
用googleVis制作多层级桑基图
问题背景
已成功用googleVis实现3层级桑基图,现需基于包含source、mid_one、mid_two、mid_three、mid_four、destination的6层级数据集,修改代码生成对应桑基图。
解决方案
核心思路是对每一组相邻层级,分别统计节点间的流量权重,再将所有相邻层级的流量数据合并为googleVis Sankey图所需的格式。具体代码如下:
# 生成6层级测试数据 source <- sample(c("NorthSrc", "SouthSrc", "EastSrc", "WestSrc"), 100, replace=T) mid_one <- sample(c("North", "South", "East", "West"), 100, replace=T) mid_two <-sample(c("WestNorth", "WestSouth", "SouthEast", "NorthWest"), 100, replace=T) mid_three <- sample(c("NorthMid", "SouthMid", "EastMid", "WestMid"), 100, replace=T) mid_four <- sample(c("West", "East", "NorthCis", "SouthCis"), 100, replace=T) destination <- sample(c("NorthDes", "SouthDes", "EastDes", "WestDes"), 100, replace=T) dummy <- rep(1,100) # 用于聚合计数 dat <- data.frame(source,mid_one, mid_two,mid_three, mid_four,destination,dummy) # 加载dplyr包 library(dplyr) # 处理每一对相邻层级,生成From-To-Weight的格式 dat_S_m1 <- dat %>% group_by(source, mid_one) %>% summarise(Dummy = sum(dummy)) %>% ungroup() %>% rename(From = source, To = mid_one) dat_m1_m2 <- dat %>% group_by(mid_one, mid_two) %>% summarise(Dummy = sum(dummy)) %>% ungroup() %>% rename(From = mid_one, To = mid_two) dat_m2_m3 <- dat %>% group_by(mid_two, mid_three) %>% summarise(Dummy = sum(dummy)) %>% ungroup() %>% rename(From = mid_two, To = mid_three) dat_m3_m4 <- dat %>% group_by(mid_three, mid_four) %>% summarise(Dummy = sum(dummy)) %>% ungroup() %>% rename(From = mid_three, To = mid_four) dat_m4_des <- dat %>% group_by(mid_four, destination) %>% summarise(Dummy = sum(dummy)) %>% ungroup() %>% rename(From = mid_four, To = destination) # 合并所有层级流量数据 datVis <- rbind(dat_S_m1, dat_m1_m2, dat_m2_m3, dat_m3_m4, dat_m4_des) # 生成并绘制桑基图 p <- gvisSankey(datVis, from="From", to="To", weight="Dummy") plot(p)
代码说明
- 针对每一组相邻层级(如
source到mid_one、mid_one到mid_two等),通过group_by+summarise统计节点间的流量总和 - 每个子集统一重命名为
From、To、Dummy(权重列),确保格式一致 - 用
rbind将所有子集合并为googleVis可识别的完整数据集 - 调用
gvisSankey生成桑基图,指定from、to、weight参数即可
内容的提问来源于stack exchange,提问作者HOX
相关产品推荐
相关产品推荐

