我有一個問題,我幾個星期都無法解決。我正在研究此示例的修改版本:http://bl.ocks.org/mbostock/1667367我最初定義了畫筆,因此它的畫筆範圍在0.5到0.8之間。D3重繪刷子
var brush = d3.svg.brush()
.x(x2)
.extent([0.5, 0.8])
.on("brush", brushed);
刷選擇顯示出來(在上下文圖形)在正確的位置,但重點區域的初始視圖仍然被設置爲整個數據集的程度(而不是的剪裁區域刷子)。我讀過定義畫筆不會自動強制重繪該區域,但似乎無法弄清楚如何使焦點區域的視圖自動縮放到畫筆範圍。有人可以提供一些關於這方面的意見嗎?
更新1 我現在有一個叫拉絲函數執行以下操作:
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);
}
這是從例子...略有不同,因爲我一直在修改它做從不同的事情基本示例。但是,第一條評論意味着我應該在聲明刷子後調用刷新函數(請參閱第一篇文章)。但是,調用此函數不會執行任何操作(或者至少不會將焦點區域更新爲筆刷的範圍)。你有什麼建議嗎?