d3.js - 从 d3.js 中的鼠标位置获取 X 和 Y 轴值

标签 d3.js

我需要从鼠标在 SVG 中的位置获取 X 和 Y 坐标值。我创建了一个示例 here .对于 mousemove 函数,我想要打印 x 和 y 坐标位置(根据鼠标位置的数据值缩放)。我尝试使用反转功能 - 但它也不起作用。有人可以帮我弄清楚如何从鼠标位置获取 x 和 y 坐标值吗?我正在使用 d3 版本 3。

  svg.on("mousemove", function() {
  console.log("x", d3.mouse(this)[0]);
  console.log("y", d3.mouse(this)[1]);
  console.log("x - using invert", xscale.invert(d3.event.pageX));
  console.log("y- using invert", yscale.invert(d3.event.pageY));
});

最佳答案

你有几个问题。首先,使用 d3.mouse 而不是 d3.event.pageXpageY

但最大的问题是您将监听器设置为整个 SVG 并期望根据坐标区中的域查看值。那不是适当的方法。但是,如果您想坚持这样做,则必须为这些轴添加平移值。在这种情况下,50 和 10:

console.log("x - using invert", xscale.invert(d3.mouse(this)[0] - 50));
console.log("y- using invert", yscale.invert(d3.mouse(this)[1] - 10));

这里是你的代码有那个变化:

var width = 400,
  height = 500;

var data = [10, 15, 20, 25, 30];
var svg = d3.select("body")
  .append("svg")
  .attr("width", width)
  .attr("height", height)


var xscale = d3.scale.linear()
  .domain([0, d3.max(data)])
  .range([0, width - 100]);

var yscale = d3.scale.linear()
  .domain([0, d3.max(data)])
  .range([height / 2, 0]);

svg.on("mousemove", function() {
  console.log("x - using invert", xscale.invert(d3.mouse(this)[0] - 50));
  console.log("y- using invert", yscale.invert(d3.mouse(this)[1] - 10));
});

var x_axis = d3.svg.axis()
  .scale(xscale).orient("bottom");

var y_axis = d3.svg.axis()
  .scale(yscale).orient("left");;

svg.append("g")
  .attr("transform", "translate(50, 10)")
  .call(y_axis);

var xAxisTranslate = height / 2 + 10;

svg.append("g")
  .attr("transform", "translate(50, " + xAxisTranslate + ")")
  .call(x_axis)
.as-console-wrapper { max-height: 20% !important;}

path {
  fill: none;
  stroke: black;
  shape-rendering: crispEdges;
}

line {
shape-rendering: crispEdges;
  stroke: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

关于d3.js - 从 d3.js 中的鼠标位置获取 X 和 Y 轴值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49291895/

相关文章:

javascript - 如何在D3中的图表标签上触发onmouseover事件

javascript - Three.js:如何在缩放时更新 3D 散点图上点的颜色?

javascript - 如何在 d3 树布局节点中包含添加、编辑和删除按钮?

javascript - 节点有时有多个父节点的数据集,如何以树状方式显示它? (d3.js 或类似的东西)

javascript - 关注动画后的表单域

javascript - D3 折线图 : Setting Y. 以特定数字为中心的域值

具有智能的 Javascript 代码编辑器

d3.js - 基础数据更改时如何更新D3元素的布局

javascript - 如何在放大时在 D3.js 上绘制更多数据点?

javascript - SVG 曲线到许多小直线