web-dev-qa-db-ja.com

pythonおよびnetworkxによる大きなグラフの視覚化

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の場合と同様に、中間形式に出力する必要があります(ただし、組み込み関数ほど簡単ではありませんが)、別のツールを使用して中間形式を読み取る必要があります。視覚化をフォーマットして出力します。

だから、私は以下を探しています:

  1. Networkxから中間形式へのグラフの出力
  2. 新しいパッケージ/ソフトウェア/ツール(理想的にはpython-interactive)で中間フォーマットを読み取り、大きなグラフを視覚化します

さらに情報が必要な場合はお知らせください!

31
 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リストを受け入れ、視覚化を生成します。ここで、インタラクティブにズームできます。

19
Vikram