グラフ領域の外に私のグラフの凡例を取得しようとしています。ここでd3.jsグラフ外の伝説を取得
余白されています
var margin = {top: 50, right: 200, bottom: 50, left: 40};
var width = 960 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
まず私は、SVGを作成します。
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
だから、私の理解から、私は今保持して、それの内部SVGのcanvas要素とAGを持っていますチャート。私は右の余白に多くを追加しようとしているので、グラフを保持しているsvgキャンバスとそれに追加されたgの間にいくらかのスペースを確保できます。それから私はその空の空間に私の伝説を入れたいです。
//add legend
var legend = svg.append("g")
.attr("class", "legend")
.attr("height", 300)
.attr("width", 200)
.attr("transform", "translate(-1000,50");
私は、それはSVG要素内グラムに追加されたSVG要素に追加していますにもかかわらず:私は私の凡例を追加するのはここ
です。だから、どれほど翻訳しても、それを画面上でもっと右に向けるようにしても、内側のgの幅を過ぎることはありません。
トラブルシューティング時に、外側のSVG要素の高さが960で、幅が500であることがわかります。それに追加されたgは、変換/変換が40,50です。幅は839pxで433.223pxになります(これはわかりません)。外側のSVGは、マージンのために今すぐスペースの束を持っています。
私はsvgに追加されたgの幅を増やして、私の伝説を子供のgとマージンによって作成された空のスペースに移動します。または、最初のgの兄弟であるもう1つのgを作成しようとしていて、次に余白で作成された空のスペースを使用できます。
私は仕事をすることができず、どちらの方法が最良かわかりません。
g要素はwidth属性とheight属性を持たず、常に子要素を含むように自動化します –
最初のステートメントは 'svg'を返さず、代わりに 'g'を返します。そういうわけで、あなたの伝説のステートメントが最初のものの下に次のgを入れ子にするのです。 d3はメソッド連鎖を使用しているため、.append()を呼び出すと新しい選択が返されます。あなたのsvg作成ステートメントを2つの別々のステートメントに分割することで、 'svg'を作成し、次に別のステートメントを作成してチャートの 'g'を作成することで修正します。 –