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
相关产品推荐
相关产品推荐

