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

如何在R的networkD3桑基图中移除节点#及数字且不打乱链接

解决networkD3桑基图节点名称去#及后续数字且不打乱顺序的方案
  • 核心思路:保留原始带#的节点名称用于链接匹配(保证事件顺序不混乱),仅修改前端显示的文本内容
  • 具体实现步骤:
  1. 预处理节点显示标签
    从原始节点名称中提取#之前的内容,生成专门用于显示的标签列,不改动原始匹配用的名称。

  2. 自定义前端显示文本
    借助htmlwidgets包的onRender()函数,用D3代码替换桑基图节点的显示文本,不影响后台的数据匹配逻辑。

代码示例

假设你已加载好桑基图所需的links(含source、target、value列)和nodes(含带#的name列,如BV#1、CV#2)数据:

library(networkD3)
library(htmlwidgets)

# 生成仅用于显示的标签(移除#及后续所有字符)
nodes$display_label <- sub("#.*", "", nodes$name)

# 绘制基础桑基图——保留原始带#的name用于链接匹配
sankey_plot <- sankeyNetwork(
  Links = links,
  Nodes = nodes,
  Source = "source",
  Target = "target",
  Value = "value",
  NodeID = "name"
)

# 自定义节点显示文本,替换为处理后的标签
sankey_plot <- onRender(sankey_plot, '
  function(el, x) {
    d3.selectAll(".node text")
      .text(function(d) { return d.display_label; });
  }
')

# 查看最终效果
sankey_plot

关键说明

  • sub("#.*", "", nodes$name) 会精准删除每个节点名称中#及之后的所有字符,例如BV#123会被处理为BV
  • onRender()仅修改前端页面的显示内容,后台用于链接匹配的原始节点名称完全保留,因此不会打乱桑基图的事件顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:53:12