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

使用D3.js实现圆形数据点鼠标悬停显示数据的问题求助

D3.js圆形数据点悬停展示数据实现方案

你当前使用的是D3 v3版本,按照以下步骤修改即可实现悬停效果:

1. 新增Tooltip样式

在现有<style>标签中添加以下样式:

.tooltip {
  position: absolute;
  background-color: rgba(0,0,0,0.8);
  color: #fff;
  padding: 6px 8px;
  border-radius: 4px;
  font-size: 12px;
  pointer-events: none;
  display: none;
  z-index: 999;
}

2. 初始化Tooltip容器

在d3.csv读取数据的代码最开头,新增Tooltip的DOM创建逻辑:

d3.csv('data.csv', function (error, rows) {
  // 新增tooltip容器
  const tooltip = d3.select('body').append('div')
    .attr('class', 'tooltip');

  // 原有逻辑不变
  var data = [];
  rows.forEach(function (d) {
    // ...原有代码无需修改
  })
  // ...其他原有逻辑无需修改

3. 给圆形元素绑定鼠标悬停事件

找到代码中创建圆形的部分,在.append('circle')之后链式添加事件监听:

cor
  .filter(function (d) {
    // 原有过滤逻辑不变
    var ypos = domain.indexOf(d.y);
    var xpos = domain.indexOf(d.x);
    for (var i = ypos + 1; i < num; i++) {
      if (i === xpos) return true;
    }
    return false;
  })
  .append('circle')
  .attr('r', function (d) {
    return (width / (num * 2)) * (Math.abs(d.value) + 0.1);
  })
  .style('fill', function (d) {
    if (d.value === 1) {
      return '#000';
    } else {
      return color(d.value);
    }
  })
  // 新增以下悬停事件代码
  .on('mouseover', function(d) {
    tooltip.style('display', 'block')
      .html(`
        变量X: ${d.x}<br>
        变量Y: ${d.y}<br>
        相关系数: ${d.value.toFixed(2)}
      `)
  })
  .on('mousemove', function() {
    tooltip.style('left', (d3.event.pageX + 10) + 'px')
      .style('top', (d3.event.pageY + 10) + 'px')
  })
  .on('mouseout', function() {
    tooltip.style('display', 'none')
  })

修改完成后鼠标悬停在圆形上就会展示对应的数据信息,tooltip会跟随鼠标位置移动,移出后自动隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:04