2016-05-08 17 views
0

grid_2d_graphのノードのラベルをnx.convert_node_labels_to_integersで変更しています。ラベルを変更する前と同じ場所にノードを残しておきます。明らかに、私はposをノードラベルを変換したのと同じ方法で変換しなければならず、posを引数としてnx.draw()に与えなければなりません。しかし、私はこれを簡単に行う方法を理解することはできません。手伝って頂けますか?grid_2d_graphネットワークノードでノードラベルを変更してposを変更する

は、ここでは、ノードの属性として位置を保存することができ、彼らが再ラベリングを通じて持続します私のコード

import networkx as nx 
import matplotlib.pyplot as plt 

start = 0 
end = 7 

G = nx.grid_2d_graph(3,3) 
pos = dict(zip(G,G)) # dictionary of node names->positions 
G = nx.convert_node_labels_to_integers(G, ordering = 'sorted') 

node_colors = ["lightblue" if n == start or n == end else "white" for n in G.nodes()] 
edge_colors = ["blue" if n == (1, 2) else "gray" for n in G.edges()] 
nx.draw(G, with_labels=True, edge_color = edge_colors, node_color = node_colors, width = 3) 

答えて

0

です。私はまた、属性「起源」として、元のノード名を記録し「起源」へlabel_attributeキーワードを設定

import networkx as nx 
import matplotlib.pyplot as plt 

start = 0 
end = 7 

G = nx.grid_2d_graph(3,3) 
pos = dict(zip(G,G)) # dictionary of node names->positions 
nx.set_node_attributes(G,'pos',pos) 
G = nx.convert_node_labels_to_integers(G, ordering = 'sorted', 
             label_attribute = 'origin') 

node_colors = ["lightblue" if n == start or n == end else "white" for n in G.nodes()] 
edge_colors = ["blue" if n == (1, 2) else "gray" for n in G.edges()] 
pos = nx.get_node_attributes(G,'pos') 
nx.draw(G, pos=pos, with_labels=True, edge_color = edge_colors, node_color = node_colors, width = 3) 

次のようにnetworkx.set_node_attributes()networkx.get_node_attributes()を使用してください。結果を確認することができます

>>> list(G.nodes(data=True)) 
[(0, {'origin': (0, 0), 'pos': (0, 0)}), 
(1, {'origin': (0, 1), 'pos': (0, 1)}), 
(2, {'origin': (0, 2), 'pos': (0, 2)}), 
(3, {'origin': (1, 0), 'pos': (1, 0)}), 
(4, {'origin': (1, 1), 'pos': (1, 1)}), 
(5, {'origin': (1, 2), 'pos': (1, 2)}), 
(6, {'origin': (2, 0), 'pos': (2, 0)}), 
(7, {'origin': (2, 1), 'pos': (2, 1)}), 
(8, {'origin': (2, 2), 'pos': (2, 2)})] 
関連する問題