38

私はまだnetworkxの初心者です。複数のタイプのノードを異なる位置に追加したいので、次のコードを使用しました

pos = {0: (40, 20), 1: (20, 30), 2: (40, 30), 3: (30, 10)} 
X=nx.Graph()
nx.draw_networkx_nodes(X,pos,node_size=3000,nodelist=[0,1,2,3],node_color='r')

しかし、グラフ X にアクセスしたい場合、 X.node と入力すると空のリストが返され、さらにノードを追加する場合は、最初に pos 辞書を使用して位置を設定する必要があります。

add_node() を使用して、特定の場所 x および y のグラフにノードを追加するにはどうすればよいですか?

4

2 に答える 2

64

次のアプローチを使用して、個々のノード位置を設定し、描画時に使用する「pos」ディクショナリを抽出できます。

In [1]: import networkx as nx

In [2]: G=nx.Graph()

In [3]: G.add_node(1,pos=(1,1))

In [4]: G.add_node(2,pos=(2,2))

In [5]: G.add_edge(1,2)

In [6]: pos=nx.get_node_attributes(G,'pos')

In [7]: pos
Out[7]: {1: (1, 1), 2: (2, 2)}

In [8]: nx.draw(G,pos)

アップデート

描画を追加

ここに画像の説明を入力

于 2012-08-04T13:54:06.993 に答える
39

何を達成したいのか完全にはわかりませんが、ノードをグラフに追加し、それらを必要な位置に描画し、グラフオブジェクトでそれらにアクセスできるようにしたいと思います。

グラフにノードを追加しないため、それが開始点になります。

X.add_nodes_from(pos.keys())

そうすれば、グラフを描画するときにノード リストを指定する必要がないため、新しいノードを追加するときに 2 つの異なる場所でコードを変更する必要がありません。

ノード属性としてノードの位置が必要な場合は、次のようにすることもできます。

for n, p in pos.iteritems():
    X.nodes[n]['pos'] = p

これらの位置は、グラフを描画するときに位置として使用されないことに注意してください。明示的に設定する必要があります。次に、次のようにグラフを描画して表示できます。

nx.draw(X, pos)
plt.show()

インポートを行ったと仮定しますfrom matplotlib import pyplot as plt

于 2012-08-04T07:35:04.870 に答える