20

この方法で、ノードとリンクの両方を同時に設定してみました。

var force = d3.layout.force()
    .size([w, h])
    .nodes(nodes)
    .links(connections)
    .start();

nodes = [{"name":"data_base_id", "kind":"subgenre"},...]
connections = [{"source":"name_of_node", "target":"name_of_other_node"},...]

接続されていない可能性のあるデータがあるため、すべてのノードがレンダリングされるようにノードを定義する必要があります。そして、ジャンルの定義は非常に簡単です。しかし、このエラーが発生します。

Cannot read property 'weight' of undefined

そして、.links(connections)をコメントアウトすると、グラフがレンダリングされます(ドットの束が散らばっています...)d3と連携するための接続/リンクを取得するにはどうすればよいですか?

ドキュメントを読んでいたところ、ソースとターゲットはノード配列内のノードのインデックスである必要があるようです。それを変える方法はありますか?だから、配列にあるインデックスではなく、ノードの名前を使用できますか?

4

6 に答える 6

18

以前に同じ問題が発生しました。これは、リンクのソース/ターゲットにnull値があるためです。ノードリンクの情報を印刷すると、デバッグに役立つ場合があります

于 2013-09-26T09:41:05.677 に答える
12

力指向レイアウトは、エッジの重みを使用してレイアウトを計算します。"weight":1すべての接続にダミーを追加してみてください。

リンクを初期化するコードは次のようになります。

links.forEach(function(d) {
    if (typeof d.source == "number") { d.source = nodes[d.source]; }
    if (typeof d.target == "number") { d.target = nodes[d.target]; }
});

おそらく、(d3ソースで)それを微調整して、任意のプロパティ/タイプを使用することができます。

于 2012-07-07T14:52:52.030 に答える
12

リンクのソース/ターゲットのnullに言及している回答に加えて、これの理由は、範囲外のソース/ターゲットの割り当てである可能性があります。たとえば、10個のノードがあり、ターゲットを11番目のインデックス付きノードに割り当てます。

于 2014-03-15T18:39:24.593 に答える
10

nullのソース値またはターゲット値を参照する上記の回答に感謝します。

http://bl.ocks.org/mbostock/4062045からグラフをテストしてきましたが、データが欠落しているノードを参照していることがわかりました。

これは、他の人がこの問題をデバッグするのに役立つ場合があります。

d3.json("my-buggy-data.json", function(error, graph) {

    // Find blank links, which give the error
    // "Uncaught TypeError: Cannot read property 'weight' of undefined"
    graph.links.forEach(function(link, index, list) {
        if (typeof graph.nodes[link.source] === 'undefined') {
            console.log('undefined source', link);
        }
        if (typeof graph.nodes[link.target] === 'undefined') {
            console.log('undefined target', link);
        }
    });

    force
        .nodes(graph.nodes)
        .links(graph.links)
        .start();
于 2015-04-13T12:43:57.223 に答える
5

ソースとターゲットにnull値がある可能性があると思います。私もこのバグを抱えていて、null値を除外することで修正しました。

于 2013-07-12T17:55:12.850 に答える
2

この問題はさまざまな方法で発生しました。最近、私は次のようにエッジリストを持っていました:

{Source: 0; Target: 1}

それ以外の:

{source: 0, target: 1}
于 2014-01-21T20:48:18.860 に答える