multigraph numpy adjacency matrix を networkx に渡し (from_numpy_matrix 関数を使用)、matplotlib を使用してグラフを描画しようとすると、複数のエッジが無視されます。
複数のエッジも描画するにはどうすればよいですか?
multigraph numpy adjacency matrix を networkx に渡し (from_numpy_matrix 関数を使用)、matplotlib を使用してグラフを描画しようとすると、複数のエッジが無視されます。
複数のエッジも描画するにはどうすればよいですか?
Graphviz は、平行なエッジを適切に描画します。ドットファイルを書き込んでからGraphvizで処理することで、NetworkXでそれを使用できます(たとえば、以下のneatoレイアウト)。NetworkX に加えて pydot または pygraphviz が必要です
In [1]: import networkx as nx
In [2]: G=nx.MultiGraph()
In [3]: G.add_edge(1,2)
In [4]: G.add_edge(1,2)
In [5]: nx.write_dot(G,'multi.dot')
In [6]: !neato -T png multi.dot > multi.png
NetworkX 1.11 以降では、networkx github の問題nx.write_dot
に従って機能しません。回避策は、を使用して呼び出すことですwrite_dot
from networkx.drawing.nx_pydot import write_dot
また
from networkx.drawing.nx_agraph import write_dot
計算したノード位置を使用して、matplotlib を直接使用できます。
G=nx.MultiGraph ([(1,2),(1,2),(1,2),(3,1),(3,2)])
pos = nx.random_layout(G)
nx.draw_networkx_nodes(G, pos, node_color = 'r', node_size = 100, alpha = 1)
ax = plt.gca()
for e in G.edges:
ax.annotate("",
xy=pos[e[0]], xycoords='data',
xytext=pos[e[1]], textcoords='data',
arrowprops=dict(arrowstyle="->", color="0.5",
shrinkA=5, shrinkB=5,
patchA=None, patchB=None,
connectionstyle="arc3,rad=rrr".replace('rrr',str(0.3*e[2])
),
),
)
plt.axis('off')
plt.show()