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

D3和弦图Tooltip功能异常:无法显示Eurovision投票关系信息

解决D3和弦图Tooltip不显示投票信息的问题

看起来你已经搭好了Tooltip的基本框架,但还没把和弦对应的投票数据动态绑定上去,所以才一直显示默认的$100。我帮你梳理下具体的修改步骤:

1. 调整Tooltip的HTML结构

你原来的Tooltip里硬写了$符号,先改成适合展示投票信息的结构:

<div id="tooltip" class="hidden">
  <p><span id="vote-content"></span></p>
</div>

2. 绑定鼠标事件,动态更新Tooltip内容

找到你处理ribbon鼠标交互的代码(你提到的第274行附近),替换成下面的逻辑:

// 给所有丝带绑定鼠标悬停/离开事件
d3.selectAll(".ribbons path")
  .on("mouseover", function(d) {
    // 从names数组和matrix二维数组中取出对应数据
    const sourceCountry = names[d.source.index]; // 发起投票的国家
    const targetCountry = names[d.target.index]; // 获得投票的国家
    const score = matrix[d.source.index][d.target.index]; // 对应的分值

    // 更新Tooltip的文本内容
    d3.select("#vote-content").text(`${targetCountry}获得了来自${sourceCountry}的${score}分`);

    // 显示Tooltip
    d3.select("#tooltip").classed("hidden", false);

    // 可选:让Tooltip跟随鼠标移动(需要把Tooltip的CSS定位改成absolute)
    d3.select("#tooltip")
      .style("left", `${d3.event.pageX + 15}px`)
      .style("top", `${d3.event.pageY - 15}px`);
  })
  .on("mouseout", function() {
    // 鼠标离开时隐藏Tooltip
    d3.select("#tooltip").classed("hidden", true);
  });

3. 调整Tooltip的CSS(可选)

如果想要Tooltip跟着鼠标移动,记得把原来的固定定位改成绝对定位:

#tooltip {
  position: absolute; /* 替换原来的fixed */
  /* 其他样式保持不变 */
}

关键注意点

  • 确认你的ribbon数据对象d里的source.index和target.index能正确对应names数组的索引
  • 如果你的和弦图是用d3.chord()生成的,d.source.value可能直接就是分值,这时候可以用d.source.value代替matrix[d.source.index][d.target.index],代码会更简洁

这样修改后,鼠标悬停在丝带上时,Tooltip就会正确显示你想要的投票关系啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:08:25