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

如何在Vega中悬停节点以高亮特定关联链接?

实现Vega力导向图悬停高亮关联链接与邻域节点

针对官方力导向布局示例,以下是实现悬停节点时高亮其关联链接及邻域节点的完整修改方案:

1. 更新Signals配置

保留核心信号逻辑,优化事件触发规则确保状态重置正常:

"signals": [
  { "name": "colorIn", "value": "firebrick" },
  { "name": "colorOut", "value": "forestgreen" },
  { "name": "active", "value": null,
    "on": [
      { "events": "symbol:mouseover", "update": "datum.id" },
      { "events": "mouseout, window:pointerup", "update": "null" }
    ]
  }
]

2. 修改链接(path标记)的Encode配置

为关联链接设置高亮样式,非关联链接降低透明度弱化显示:

"marks": [
  {
    "type": "path",
    "encode": {
      "update": {
        "stroke": [
          {"test": "datum.source.id === active", "signal": "colorOut"},
          {"test": "datum.target.id === active", "signal": "colorIn"},
          {"value": "#ccc"}
        ],
        "strokeOpacity": [
          {"test": "datum.source.id === active || datum.target.id === active", "value": 1},
          {"value": 0.1}
        ],
        "strokeWidth": [
          {"test": "datum.source.id === active || datum.target.id === active", "value": 2},
          {"value": 1}
        ]
      }
    }
  }
]

3. 修改节点(symbol标记)的Encode配置

区分悬停节点、邻域节点与其他节点的显示状态,强化层级:

{
  "type": "symbol",
  "encode": {
    "update": {
      "fill": [
        {"test": "datum.id === active || data('links').some(l => (l.source.id === active && l.target.id === datum.id) || (l.target.id === active && l.source.id === datum.id))", "value": "#ff9800"},
        {"value": "#ccc"}
      ],
      "opacity": [
        {"test": "datum.id === active || data('links').some(l => (l.source.id === active && l.target.id === datum.id) || (l.target.id === active && l.source.id === datum.id))", "value": 1},
        {"value": 0.3}
      ],
      "size": [
        {"test": "datum.id === active", "value": 300},
        {"test": "data('links').some(l => (l.source.id === active && l.target.id === datum.id) || (l.target.id === active && l.source.id === datum.id))", "value": 200},
        {"value": 150}
      ]
    }
  }
}

关键逻辑说明

  • 链接识别:通过datum.source.id === active和datum.target.id === active判断是否为悬停节点的入/出链接,分别设置不同高亮色,非关联链接用浅灰色+低透明度弱化。
  • 节点邻域判断:利用data('links').some(...)遍历链接数据,识别与悬停节点直接相连的邻域节点,为悬停节点、邻域节点、普通节点设置差异化样式。
  • 状态重置:优化事件触发规则,确保鼠标移出节点或点击空白区域时,高亮状态能正确重置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:52:59