2013-06-29 60 views
19

私は、大きなグラフの視覚化をPythonとnetworkxに持っています。グラフは視覚化され、215,000のエッジと頂点セットサイズを持っています。トップページにリンクされているドキュメントから、networkxはmatplotlibとGraphVizでプロットをサポートしています。 pythonと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]など、効率的かつための形式でファイルを保存するために次のように matplotlibとnetworkx図において行われます。 。

次へGraphVizを試しました。 wikipedia pageからdot形式は有向グラフのために使用され、私は、ドットファイル作成されます。

nx.write_dot(g, "g.dot") 

これはうまく働いたが、私は12メガバイトである私の現在のディレクトリにドットファイルを持っていました。これは私のコンピュータを遅く

dot -Tps g.dot -o g.ps 

、数分間実行した後、ターミナルでKilledを表示:次の私はdotプログラム(PostScriptファイルを作成するために、graphvizのの一部)を実行しました。だから、決して実行することはできません... graphvizのドキュメントを読んでいるうちに、大きなグラフの視覚化のために無向グラフだけがサポートされているようです。

質問:これらの2回失敗して 誰もがおよそ215,000頂点と215,000エッジにPythonとnetworkxを使用して、私の大規模なグラフを視覚化する方法を私を見ることができますか?私はGraphvizのように中間形式に出力しなければならないと考えています(これは難しくありませんが、組み込み関数ほど簡単ではありません)。中間形式を読み込んで視覚化。

だから、私は、次のを探しています:中間フォーマットを読み、大きなを可視化する新しいパッケージ/ソフトウェア/ツール(理想のpython-インタラクティブ)で中間形式

  • にnetworkxから

    1. 出力グラフグラフ

    さらに詳しい情報が必要な場合は、私に知らせてください!

  • +1

    この大きなグラフのPostScriptイメージの作成に成功したとします。あなたはそれで何をしますか?各ノードを調べるのに10秒を費やしたとします。グラフ全体を調べるのにおよそ25日間かかります。関心のあるサブグラフを「ズームイン」するには何かの方法が必要です(1つのPostScriptイメージとして)全体を表示するのではなく、私のように思えます。 – unutbu

    +0

    私のグラフがどのように見えるかを知りたい。私は考えを持っているので、サブグラフ、クリーク、コミュニティに焦点を当てます。 – CodeKingPlusPlus

    答えて

    14
    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形式のエッジリストを受け入れ、対話的にズームを行うことができる視覚化を生成します。

    +0

    私はちょうどedgelist形式でグラフを保存するためにnetworkx関数を使い、それをGephiに読み込めました! – CodeKingPlusPlus

    関連する問題