このフィドルによって示されるように、ノードをズームインしたいと考えています。 http://jsfiddle.net/HF57g/2/D3 - D3のSVGシンボルでズームする
フィドル出典:How to zoom in/out d3.time.scale without scaling other shapes bound to timeline
フィドルの助けを借りて、私はSVGサークルでズームを適用することができました。
注:SVG Circlesを使用すると、x軸とy軸の属性が提供されます。私が欲しいもの
.enter().append("circle")
.attr("cx", function(d) { return xScale(d); })
.attr("cy", function(d) { return yScale(d); })
、だから私は円やダイヤモンドの両方を可能にするために、D3の「d3.svg.symbol」を選んだ。このズーム機能に
を使用して両方の円とダイヤモンドを持つことです。
しかし、私が直面している問題は、D3のSVGシンボルを使用すると、x軸を操作するためのアクセス権がないことです。
.enter().append("path")
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")"; })
.attr("d", d3.svg.symbol()
.size(145)
.type(function(d) {
if(d.value <= 10)
return "diamond";
else
return "circle";
}));
フィドルから以下のコードは、フィドルから採取されたズーム用のX軸の操作を示します。可能であれば翻訳して同じことをしたい。
return svg.selectAll("rect.item")
.attr("x", function(d){return scale(d);})
以下のコードは、SVGサークルで動作する方法を示し、それは私が、ズーム動作させるために考え、最も論理的な方法を示しています。しかし、残念ながらそれは動作しません。
var zoom = d3.behavior.zoom()
.on("zoom", function(){
//If I use SVG Circles the following code works.
//chart.selectAll(".item").attr("cx", function(d){ return xScale(d); });
//By using SVG Symbols and translate, this does not work
chart.selectAll(".item").attr("transform", function(d) { return "translate("+ d.x +", 0)";});
}).x(xScale);
ここでは、ダイヤモンドと円で編集されたフィドルです。 update_eventsで https://jsfiddle.net/g67cgt4w/
あなたはフィドルにしようとしたことを実装できますか? – thatOneGuy
あなたのフィドルでは、 'transform'属性への変更の一部として以下を含むコメントアウトセクションがあります:' scale( "+ d3.event.scale +"、1) '。 "1"の代わりに(すなわち、y軸の変更はありません)、それを 'scale(" + d3.event.scale + "、" + d3.event.scale + ")'に変更します。達成するために? (おそらく私は疑問を誤解していますが...結局、ダイヤモンドの代わりに正方形が見えています)。 –
@thatOneGuyここに行きます。 https://jsfiddle.net/g67cgt4w/ – helloGoodDay