エクステントが大きくても、ブラシのサイズを制限する方法はありますか?
移動とサイズ変更が可能な x スケールのみのブラシをまとめました。ユーザーがサイズ変更できる範囲を制限できるようにしたいと思います(基本的には特定のポイントまで)。
次の例では、ブラシが最大範囲の半分よりも大きくなると、ブラシ関数は更新を停止します。ただし、ブラシ自体は伸ばすことができます。これを防ぐ方法はありますか?または、これを処理するより良い方法はありますか?
どうもありがとう!
ここでこのコードの動作を参照してください: http://bl.ocks.org/3691274 (編集: このデモは動作するようになりました)
bar = function(range) {
var x_range = d3.scale.linear()
.domain([0, range.length])
.range([0, width]);
svg.selectAll("rect.items").remove();
svg.selectAll("rect.items")
.data(range)
.enter().append("svg:rect")
.attr("class", "items")
.attr("x", function(d, i) {return x_range(i);})
.attr("y", 0)
.attr("width", width/range.length-2)
.attr("height", 100)
.attr("fill", function(d) {return d})
.attr("title", function(d) {return d});
}
var start = 21;
bar(data.slice(0, start), true);
var control_x_range = d3.scale.linear()
.domain([0, data.length])
.range([0, width]);
controlBar = svg.selectAll("rect.itemsControl")
.data(data)
.enter().append("svg:rect")
.attr("class", "itemsControl")
.attr("x", function(d, i) {return control_x_range(i);})
.attr("y", 110)
.attr("width", width/data.length-2)
.attr("height", 20)
.attr("fill", function(d) {return d});
svg.append("g")
.attr("class", "brush")
.call(d3.svg.brush().x(d3.scale.linear().range([0, width]))
.extent([0,1*start/data.length])
.on("brush", brush))
.selectAll("rect")
.attr("y", 110)
.attr("height", 20);
function brush() {
var s = d3.event.target.extent();
if (s[1]-s[0] < 0.5) {
var start = Math.round((data.length-1)*s[0]);
var end = Math.round((data.length-1)*s[1]);
bar(data.slice(start,end));
};
}