Wh0*_*0RU 6 javascript svg coffeescript d3.js dc.js
嗨我有一个面积图,其中包含几个X(年)和Y(价格)值.正如我发现有一种简单的方法来获取X,当用户点击其中一个点然而点击外线时,Y可以为图表提供值,即SVG/Chart-Body区域只能提供X,Y这些是平面的坐标而不是数据.

点图表:
circles = c.svg().selectAll 'circle.dot'
circles.on 'click', (d) ->
console.log 'POINT', 'Datum:', d
Run Code Online (Sandbox Code Playgroud)
O/P:
POINT Datum:
{x: Fri Feb 01 1980 00:00:00 GMT+0000 (GMT Standard Time), y: 666}
Run Code Online (Sandbox Code Playgroud)
点外图:
svg.on 'click', () ->
console.log 'SVG', d3.mouse(@)
Run Code Online (Sandbox Code Playgroud)
O/P:
SVG [605.5, 394.5]
Run Code Online (Sandbox Code Playgroud)
现在有什么办法可以在点击SVG时获得最近的数据坐标吗?例如SVG [605.5,394.5]将是(最接近[X,Y]使用的东西)
{x: Fri Feb 01 1980 00:00:00 GMT+0000 (GMT Standard Time), y: 666}
Run Code Online (Sandbox Code Playgroud)
或者其他一些方法将SVG X,Y转换为数据X,Y?
原始数据的形式为,
[
{x: Fri Jan 01 1980 00:00:00 GMT+0000 (GMT Standard Time), y: 666},
{x: Fri Feb 01 1980 00:00:00 GMT+0000 (GMT Standard Time), y: 668},
{x: Fri Mar 01 1980 00:00:00 GMT+0000 (GMT Standard Time), y: 700},
{x: Fri Apr 01 1980 00:00:00 GMT+0000 (GMT Standard Time), y: 750},
.
.
.
{x: Fri Dec 01 2010 00:00:00 GMT+0000 (GMT Standard Time), y: 2000},
.
.
.
]
Run Code Online (Sandbox Code Playgroud)
Wh0*_*0RU 14
http://bl.ocks.org/mikehadlow/93b471e569e31af07cd3
使用d3.bisector,
var mouse = d3.mouse(this);
var mouseDate = xScale.invert(mouse[0]);
var bisectDate = d3.bisector(function(d) { return d.x; }).left;
var i = bisectDate(data, mouseDate); // returns the index to the current data item
var d0 = data[i - 1]
var d1 = data[i];
// work out which date value is closest to the mouse
var d = mouseDate - d0[0] > d1[0] - mouseDate ? d1 : d0;
var x = xScale(d[0]);
var y = yScale(d[1]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4048 次 |
| 最近记录: |