2013-02-18 41 views
12

マルチグラフnumpy隣接行列をnetworkxに渡したとき(from_numpy_matrix関数を使用) matplotlibを使用してグラフを描画しようとすると、複数のエッジが無視されます。matplotlibまたはgraphvizを使用してnetworkxでマルチグラフを描画する方法

どのようにして複数の辺を描画することもできますか?

+0

http://stackoverflow.com/questions/10379448/plotting-directed-graphs-in-python-in-を使用してwrite_dotを呼び出すことですa-way-that-show-all-edges-separateとhttp://stackoverflow.com/questions/15053686/networkx-overlapping-edges-when-visualizing-multigraph –

+0

これはnetworkxに実装されていないこともあります。 – famargar

答えて

12

Graphvizは平行エッジを描画するのに適しています。ドットファイルを作成してGraphvizで処理することで、NetworkXでそれを使うことができます(例えば、以下のneatoレイアウト)。あなたがNetworkX 1.11以降でNetworkX

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 

enter image description here

に加えて、PYDOTまたはpygraphvizが必要になります、nx.write_dotissue on networkx githubどおりに動作しません。この問題を回避するには、

from networkx.drawing.nx_pydot import write_dot

または

from networkx.drawing.nx_agraph import write_dot

関連
+0

networkx、pygraphviz、graphvizのどのバージョンを使用していますか? – eyaler

+0

これは私が持っているものです。しかし、最近のバージョンでも同じ結果が得られるはずです。 $のpython -c "輸入pygraphviz;印刷pygraphviz .__ version__" -V ドット 1.2.dev1990 は$ドット - graphvizのバージョン2.29.20120625.0446(20120625.0446) $のpython -c「輸入networkx;印刷networkx .__ version__ " 1.8.dev_20130108070258 – Aric

+0

グラフの画像を生成するためにneatoを使用していますが、有向グラフ(無向ではありません)とエッジ(1,2)のみを表示し、エッジ(2、 1)。どうして無向でないのですか?そして、なぜもう片方の端が見えないのですか?どうかしてください! –

関連する問題