python and networkx で大きなグラフの視覚化に問題があります。グラフは視覚化したい方向性があり、エッジと頂点のセットサイズが215,000です)ドキュメント(トップページにリンクされています)は、networkxがmatplotlib
およびGraphVizを使用したプロットをサポートしていることは明らかです。matplotlib
およびnetworkxでは、描画は次のように行われます。
_import
networkx as nx
import matplotlib.pyplot as plt
#Let g be a graph that I created
nx.draw(g)
_
nx.draw(g)
の後にメモリエラーが発生します。その後、通常はplt.show()
またはplt。[some_function]を実行して、効率的な形式などでファイルを保存します。
次に、GraphVizを試してみました。 wikipedia page からdot
形式が有向グラフに使用され、ドットファイルを作成しました。
_nx.write_dot(g, "g.dot")
_
これはうまくいき、現在のディレクトリに12メガバイトのドットファイルがありました。次に、dot
プログラム(postvファイルを作成するためのgraphvizの一部)を実行しました。
_dot -Tps g.dot -o g.ps
_
これにより、コンピューターの速度が低下し、数分間実行され、ターミナルにKilled
が表示されます。したがって、実行できませんでした... graphvizのドキュメントを読んでいる間、無向グラフのみが大きなグラフの視覚化でサポートされているようです。
質問:これらの2つの失敗した試行により、pythonとnetworkxを使用して大きなグラフを視覚化する方法をだれにでも示すことができます215,000頂点と215,000エッジ?Graphvizの場合と同様に、中間形式に出力する必要があります(ただし、組み込み関数ほど簡単ではありませんが)、別のツールを使用して中間形式を読み取る必要があります。視覚化をフォーマットして出力します。
だから、私は以下を探しています:
さらに情報が必要な場合はお知らせください!
from matplotlib import pylab
import networkx as nx
def save_graph(graph,file_name):
#initialze Figure
plt.figure(num=None, figsize=(20, 20), dpi=80)
plt.axis('off')
fig = plt.figure(1)
pos = nx.spring_layout(graph)
nx.draw_networkx_nodes(graph,pos)
nx.draw_networkx_edges(graph,pos)
nx.draw_networkx_labels(graph,pos)
cut = 1.00
xmax = cut * max(xx for xx, yy in pos.values())
ymax = cut * max(yy for xx, yy in pos.values())
plt.xlim(0, xmax)
plt.ylim(0, ymax)
plt.savefig(file_name,bbox_inches="tight")
pylab.close()
del fig
#Assuming that the graph g has nodes and edges entered
save_graph(g,"my_graph.pdf")
#it can also be saved in .svg, .png. or .ps formats
これはあなたの最初の問題に答えます。 Networkxにはノードを拡大する機能がありません。この機能にはGephiを使用してください。 Gephiは、CSV形式のEdgeリストを受け入れ、視覚化を生成します。ここで、インタラクティブにズームできます。