2009-12-05 26 views
7

私は持っているデータを使ってネットワークを可視化し、特定の辺の長さでグラフ化したいと考えました。私はPythonを使い、networkxとigraphをプロットしようとしましたが、すべて固定長の長さを割り当てるようです。networkx/igraph(Python)の指定された辺の長さ

)。コードを間違ってしまったのか、パッケージが本当に機能しないのだろうかと思います。 networkxまたはigraphに指定されたエッジの長さを適切に実装するにはどうすればよいですか?

b。)networkxとigraphで実行できない場合は、どのパッケージを推奨できますか? (好ましくは、8万ノードを超えることができるもの)

ありがとう!

+2

一般的に、ネットワーク/グラフプロットプログラムでは固定長の長さを割り当てることはできません。なぜなら、エッジの長さも固定するとすべてのグラフをプロットできるわけではないからです。辺の長さが1,1,100の三角形を考えてみましょう。したがって、パッケージがあれば、それは一般的なグラフプロットパッケージではありません。グラフを特別なものにすることで可能になります。そうでない場合は、自分でプログラムしなければなりません。 – unutbu

答えて

5

これは動作するはず:

import networkx as NX 
import pygraphviz as PG 

G = PG.AGraph() 
nlist = "A B C D E".split() 
a, b = "A A B", "B C D" 
elist = zip(a.split(), b.split()) 

G.add_nodes_from(nlist) 
G.add_edges_from(elist) 
G.node_attr.update(color="red", style="filled") 
G.edge_attr.update(color="blue", len="2.0", width="2.0") 

print(G.edge_attr) 
# returns {'color': 'red', 'width': '', 'len': '2.0'} 

# add new edge with custom length (all others have length=2.0): 
G.add_edge("C", "E", len="3.0", color="blue", width="2.0") 

edge = G.get_edge("C", "E") 
print(edge_attr) 
# returns {'color': 'blue', 'width': '2.0', 'len': '3.0'} 

# and you can confirm that introspection by drawing & printing this graph: 
G.draw('somefolderandfilename.png', format='png', prog='neato') 

ほとんどグラフ描画アルゴリズムはもちろん、エッジ長を変化SMACOF、いくつかのバージョンを使用します。しかし、graphvizレイアウトエンジン 'neato'(上記の 'draw'の第2引数として提供されています)は、可能であれば、ユーザが設定した辺の長さを保持しなければなりません。

ここで使用しているライブラリは、確かに80,000ノードを処理するのに十分頑丈です。

関連する問題