我有一个问题好几个星期都无法解决。我正在研究这个例子的修改版本:http: //bl.ocks.org/mbostock/1667367我最初定义了画笔,所以它的画笔范围在 0.5 和 0.8 之间。
var brush = d3.svg.brush()
.x(x2)
.extent([0.5, 0.8])
.on("brush", brushed);
画笔选择显示在正确的位置(在上下文图上),但焦点区域的初始视图仍设置为整个数据集的范围(而不是画笔的剪切区域)。我读过定义画笔不会自动强制重绘该区域,但我似乎无法弄清楚如何使焦点区域的视图自动缩放到画笔范围。有人可以提供一些意见吗?
更新 1 我目前有一个名为 Brushed 的函数,它执行以下操作:
function brushed() {
x.domain(brush.empty() ? x2.domain() : brush.extent());
focus.select("path").attr("d", Light_area);
focus.select(".x.axis").call(xAxis);
Light_line_overlay.select("path").attr("d", Light_area);
rules.select(".y.grid").call(make_x_axis_light()
.tickSize(-height, 0, 0)
.tickFormat("")
);
var xx0=brush.x()(brush.extent()[0]);
var xx1=brush.x()(brush.extent()[1]);
brushfill.attr("x", xx0);
brushfill.attr("width", xx1-xx0);
}
它与示例略有不同......因为我一直在对其进行修改以执行与基本示例不同的操作。然而,第一条评论建议我应该在声明画笔后调用这个画笔函数(见第一篇文章)。然而,调用这个函数并没有做任何事情(或者至少,它不会将焦点区域更新到画笔的范围)。你有什么建议吗?