如何在R语言Sankey桑基图中按分组为连接线条设置不同颜色
你需要在sankeyNetwork()函数中添加LinkGroup参数指定分组字段,同时配置colourScale参数定义不同分组对应的颜色,修改后的完整代码如下:
# 加载依赖包 library(tidyverse) library(viridis) library(patchwork) library(hrbrthemes) library(circlize) library(networkD3) # 加载数据集 data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/13_AdjacencyDirectedWeighted.csv", header=TRUE) # 转换为长格式 data_long <- data %>% rownames_to_column %>% gather(key = 'key', value = 'value', -rowname) %>% filter(value > 0) colnames(data_long) <- c("source", "target", "value") data_long$target <- paste(data_long$target, " ", sep="") data_long$group <- c(rep("A", 10), rep("B",7), rep("C", 8), rep("D", 10)) # 构造节点数据框 nodes <- data.frame(name=c(as.character(data_long$source), as.character(data_long$target)) %>% unique()) # 转换为networkD3要求的索引格式 data_long$IDsource=match(data_long$source, nodes$name)-1 data_long$IDtarget=match(data_long$target, nodes$name)-1 # 定义颜色映射规则:domain对应分组名,range对应分组的颜色值,可自行修改 colour_scale <- 'd3.scaleOrdinal() .domain(["A", "B", "C", "D"]) .range(["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4"])' # 绘制桑基图,新增LinkGroup和colourScale参数 sankeyNetwork(Links = data_long, Nodes = nodes, Source = "IDsource", Target = "IDtarget", Value = "value", NodeID = "name", LinkGroup = "group", colourScale = colour_scale, sinksRight=FALSE, nodeWidth=40, fontSize=13, nodePadding=20)
LinkGroup = "group"表示连线按照数据框中的group列分组匹配颜色colour_scale中domain的取值要和数据里的分组名称完全对应,range里的颜色代码可根据需求自行替换
内容的提问来源于stack exchange,提问作者adR
相关产品推荐
相关产品推荐

