4

私はこのチュートリアルに従っています:http: //bl.ocks.org/2206529

すべての州の中心面積を決定したいのですが、2つの問題があります。

  1. すべての州のSVG要素を反復処理するにはどうすればよいですか?
  2. その特定のSVG要素の中間座標を決定するにはどうすればよいですか?

私のg要素には多くのパスが含まれており、各パスは状態を表します。次のコードを使用すると、次のようになります。

states.selectAll("path")

次を使用してパスの中心を見つけたい:

    states.selectAll("path").attr("d", function(d) {
        // Get centroid(d)
    });

しかし、関数パラメーターは何もしません。

4

1 に答える 1

9

これは attr の間違った使い方です。2 番目の引数を持つ attr 関数は、単にコレクションを反復処理するためではなく、属性を設定するために使用されます。each 関数を使用する必要があります

https://github.com/mbostock/d3/wiki/Selections#wiki-each

selection.each(関数)

現在の選択範囲内の各要素に対して指定された関数を呼び出し、現在のデータム d とインデックス i を現在の DOM 要素の this コンテキストと共に渡します。この演算子は、他のほぼすべての演算子によって内部的に使用され、選択された各要素に対して任意のコードを呼び出すために使用できます。each 演算子は、コールバック関数内で d3.select(this) を使用することにより、再帰的に選択を処理するために使用できます。

states.selectAll("path").each(function(d, i) {

        // Get centroid(this.d)
});
于 2012-11-01T11:58:45.253 に答える