【发布时间】:2012-12-20 15:19:47
【问题描述】:
我正在使用 d3.js,我正在通过修改 this example 来制作拉丝面积图。除了根据画笔改变 x 轴之外,我还希望根据画笔内数据的 y 值重新绘制图表的 y 轴(类似于a Google Finance chart 的行为)。
我已经使该功能正常工作,但只是以某种方式使画笔能够在 x 和 y 空间中绘制。为此,我首先向 brush 变量添加了一个 y 比例:
var brush = d3.svg.brush()
.x(x2)
.y(y2)
.on("brush", brush);
这使得brush.extent() 返回以下多维数组:[ [x0, y0], [x1, y1] ]。然后我在brush() 函数中使用这些数据来重新定义焦点图表的 x 和 y 域:
function brush() {
var extent = brush.extent();
x.domain(brush.empty() ? x2.domain() : [ extent[0][0], extent[1][0] ]);
y.domain(brush.empty() ? y2.domain() : [ extent[0][1], extent[1][1] ]);
focus.select("path").attr("d", area);
focus.select(".x.axis").call(xAxis);
focus.select(".y.axis").call(yAxis);
}
这可行,但是通过在画笔变量中定义 y 比例,用户现在可以在焦点图表中拖动“框”,而不是像原始图表中那样只能从西向东拖动。
基本上,我的问题是:我如何获得落在画笔区域内的值范围,而不是画笔区域本身的范围?这甚至可能吗?
d3的刷机文档是here。
【问题讨论】: