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

如何在Vega中鼠标悬停节点时高亮对应链接

节点悬停高亮对应链接的修正方案

你的配置核心问题在于力导向布局的链接数据中,source和target是节点对象而非直接的id值,直接用datum.source === active无法匹配,需要调整判断逻辑,具体修正如下:

1. 保留Signals配置(无需修改)

你的信号定义没问题,active信号会在鼠标悬停节点时存储当前节点的id,移出时重置为null:

"signals": [
  { "name": "colorIn", "value": "firebrick" },
  { "name": "colorOut", "value": "forestgreen" },
  { "name": "originX", "update": "width / 2" },
  { "name": "originY", "update": "height / 2" },
  {
    "name": "active", "value": null,
    "on": [
      { "events": "symbol:mouseover", "update": "datum.id" },
      { "events": "mouseover[!event.item]", "update": "null" }
    ]
  }
]

2. 修改链接的Stroke判断逻辑

将链接的stroke判断条件改为比较节点对象的id属性,同时可以增加strokeWidth和opacity来强化高亮效果:

"marks": [
  // ... 其他marks(节点等)
  {
    "type": "path",
    "from": {"data": "links"},
    "encode": {
      "update": {
        "stroke": [
          {"test": "datum.source.id === active", "signal": "colorOut"},
          {"test": "datum.target.id === active", "signal": "colorIn"},
          {"value": "steelblue"}
        ],
        "strokeWidth": [
          {"test": "datum.source.id === active || datum.target.id === active", "value": 2},
          {"value": 1}
        ],
        "opacity": [
          {"test": "datum.source.id === active || datum.target.id === active", "value": 1},
          {"value": 0.5}
        ],
        "path": {"signal": "path('M', datum.source.x, datum.source.y, 'L', datum.target.x, datum.target.y)"}
      }
    }
  }
]

关键说明

  • 力导向布局生成的links数据中,source和target是指向nodes数组的引用对象,包含该节点的所有属性(如id、x、y等),因此必须通过datum.source.id才能拿到节点的id值与active信号匹配。
  • 额外添加的strokeWidth和opacity可以让高亮效果更清晰,非高亮链接会变细变暗,突出当前节点的关联链接。

内容的提问来源于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 12:13:27