私は d3.js を使用しており、この例を変更してブラシ付き面グラフに取り組んでいます。ブラシに基づいて x 軸が変化することに加えて、ブラシ内にあるデータの y 値に基づいてグラフの y 軸を再描画したいと思います ( Google Finance グラフの動作に似ています) 。 .
機能が動作するようになりましたが、ブラシを 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 のブラシ ドキュメントはこちらです。