私はグラフを正しく作成できましたが、さらにいくつかのテストで、次の2つの異なるコード行で一貫性のない結果が示されました。
_nx.draw_circular(h,Edge_color=[h.Edge[i][j]['color'] for (i,j) in h.edges_iter()], width=[h.Edge[i][j]['width'] for (i,j) in h.edges_iter()])
nx.draw_circular(h,Edge_color=list(nx.get_Edge_attributes(h,'color').values()), width=list(nx.get_Edge_attributes(h,'width').values()))
_
1行目は一貫した出力を生成し、2行目はエッジの順序ごとに間違った色/サイズを生成します。
ただし、上記の2行はどちらも関数呼び出しに依存して、エッジの順序ごとに属性を返すように見えます。なぜ異なる結果になるのですか?
_h[][][]
_で属性にアクセスするのは少し不器用に見えます。ドット表記でアクセスできますか? Edge.color for Edge in h.edges()
。
または私は何かを見逃しましたか?
描画関数に渡されるエッジの順序は重要です。 (edgesキーワードを使用して)指定しない場合、G.edges()のデフォルトの順序が取得されます。次のようなパラメータを明示的に指定するのが最も安全です。
import networkx as nx
G = nx.Graph()
G.add_Edge(1,2,color='r',weight=2)
G.add_Edge(2,3,color='b',weight=4)
G.add_Edge(3,4,color='g',weight=6)
pos = nx.circular_layout(G)
edges = G.edges()
colors = [G[u][v]['color'] for u,v in edges]
weights = [G[u][v]['weight'] for u,v in edges]
nx.draw(G, pos, edges=edges, Edge_color=colors, width=weights)
これにより、次のような出力が生成されます。