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

在R语言flipPlots桑基图中保持丝带颜色从源到终节点一致

解决桑基图路径颜色从源节点保持一致的问题

方法1:调整flipPlots参数实现

flipPlots::SankeyDiagram的link.color参数默认按当前环节的源节点分配颜色,要让整条路径颜色和初始节点(Married)保持一致,可通过分组绑定实现:

  1. 给数据集新增分组列,绑定初始节点Married的取值:
my.data$group <- my.data$Married
  1. 修改桑基图生成代码,将link.color设为"Group",并指定分组依据为新增的group列:
library(flipPlots)
SankeyDiagram(my.data[, -4],
              link.color = "Group", 
              group.by = my.data$group,
              weights = my.data$freq)

此时整条路径的颜色会和Married节点的类别颜色保持统一,不会在经过Pet节点后变色。

方法2:用networkD3包实现精细控制

如果需要更灵活的颜色自定义,可使用networkD3包构建桑基图,手动绑定每条路径的颜色到初始节点类别:

  1. 整理桑基图所需的节点与链接结构:
library(networkD3)

# 生成所有节点的列表
nodes <- data.frame(
  name = unique(c(as.character(my.data$Married), as.character(my.data$Pet), as.character(my.data$Happy)))
)

# 生成Married到Pet的链接,记录对应初始分组
links_married_pet <- data.frame(
  source = match(my.data$Married, nodes$name) - 1,
  target = match(my.data$Pet, nodes$name) - 1,
  value = my.data$freq,
  group = my.data$Married
)

# 生成Pet到Happy的链接,沿用初始分组
links_pet_happy <- data.frame(
  source = match(my.data$Pet, nodes$name) - 1,
  target = match(my.data$Happy, nodes$name) - 1,
  value = my.data$freq,
  group = my.data$Married
)

# 合并所有链接
all_links <- rbind(links_married_pet, links_pet_happy)

# 定义初始节点的颜色映射
color_map <- 'd3.scaleOrdinal()
  .domain(["Yes", "No"])
  .range(["#2e8b57", "#ff6347"]);'
  1. 绘制桑基图:
sankeyNetwork(Links = all_links, Nodes = nodes,
              Source = "source", Target = "target",
              Value = "value", NodeID = "name",
              LinkGroup = "group", NodeGroup = "name",
              colourScale = color_map,
              fontSize = 12, nodeWidth = 30)

这种方式能确保从Married到Pet再到Happy的整条路径颜色完全一致,与初始节点的类别绑定。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:55:17