3

d3 フォース レイアウトにさまざまな形状を追加しようとしていますが、うまくいきません。最終的な目標は、ノード オブジェクト自体のプロパティに基づいて形状を決定することです。私は selection.enter() を使用してから、そのような形状を .append() しています。強制的に指示されたレイアウトはノードの配列を 1 つだけ取り、.append() は関数ではなく文字列を取ります。

node = vis.selectAll('.node')
    .data(nodes, function(d) {
        return d.filename
    });

それから...

node.enter()
    .append(**'rect'**) //I need to vary this based on node properties
    .attr('class', function(d) { 
        return 'node ' + d.entityType;
        //return d.entityType;
    });

これを達成するための最良の方法がわかりません。助けてくれてありがとう。

4

1 に答える 1

1

四角形や円ではなく、svg パスを挿入する方が簡単だと思います。これは非常に柔軟で、考えられるほぼすべての形状をフォース グラフに追加できます。

次のコードは星を描画します。 http://jsfiddle.net/UkeMS/

ここに画像の説明を入力

<svg>
    <path  d="
        m 100 100
        l 23 12
        l -4 -26
        l 19 -19
        l -27 -4
        l -11 -23
        l -12 23
        l -27 4
        l 19 19
        l -4 26
        l 24 -12
    "/>
</svg>

大文字を使用した絶対座標ではなく、(上記のように) 小文字を使用した相対座標を使用してパスを宣言することを忘れないでください。

于 2013-10-26T06:52:25.190 に答える