私は、特定のイベントを示すデータポイントを持つタイムライングラフを持っています。グラフにズーム機能を組み込もうとしましたが、デッドエンドに達しました。私は軸を拡大することはできますが、新しいスケールにデータパイプを再配置することはできません。私は多くのd3 bl.ocksを経験してきましたが、解決策は見つかりませんでした。タイムラインの要素をD3.js v4を使用してズームする方法
私はここにjsfiddleで最小限のバージョンがあります: https://jsfiddle.net/q73ggw3e/2/
主な部品は以下のとおりです。
ズーム:
var zoom = d3.zoom()
.scaleExtent([1, Infinity])
.translateExtent([[0, 0], [width, height]])
.extent([[0, 0], [width, height]])
.on("zoom", zoomed);
データポイント:
svg.append("g")
.selectAll("logo")
.attr("class", "logo")
.data(data)
.enter()
.append("circle")
.attr("cy", 40)
.attr("cx", function(d) { return x(d);})
.attr("r", 10)
.style("fill", "#000000")
ズーム領域:
svg.append("rect")
.attr("class", "zoom")
.attr("width", width)
.attr("height", height)
.call(zoom);
そしてズーム機能:私はあまりにもズームイベントに円の(.logo)クラスを結合ますが、何らかの理由でのみ軸ズームする必要があります
function zoomed() {
svg.select(".axis--x")
.call(xAxis.scale(d3.event.transform.rescaleX(x)));
var new_x = d3.event.transform.rescaleX(x);
svg.selectAll(".logo")
.attr("cx", function(d) { return new_x(d);});
};
...
どこが間違っていますか?または、これを行うための完全に他の方法がいくつかあります...
データポイントは、ドラッグアンドドロップ、マウスオーバー、およびクリックの機能もあります。これらは現時点で問題なく動作しますが、ズーム矩形はポインタイベントをブロックします。しかし、それはあなたが作る
カエルが指摘したように、それはズーム動作に適切なものを追加する問題でした。今はうまくいく。 –