2009-12-05 16 views
7

Bir ağın sahip olduğum verilerle görselleştirilmesini istedim ve bunları belirli kenar uzunluklarıyla grafiklemek istiyorum. Python'u kullanıyorum ve networkx ve igraph'ı çizim yapmaya çalıştım ama hepsi sabit kenar uzunlukları atayabiliyor.Belirtilen kenar uzunlukları networkx/igraph (Python)

a.) Kodları yanlış yaptığımı veya paketlerin gerçekten yetenekli olmadığını merak ediyorum. Networkx veya igraph için belirtilen kenar uzunluklarını düzgün bir şekilde nasıl uygularsınız?

b.) Eğer networkx ve igraph bunu yapamazsa, hangi paketi önerebilirsiniz? (Tercihen 80 binin üzerinde düğüm taşıyabilir.)

Teşekkürler!

+2

Genel ağ/grafik çizim programları sabit kenar uzunlukları atamanıza izin vermeyecektir, çünkü kenar uzunluklarını da düzeltirseniz tüm grafikler çizilemez. 1,1,100 yan uzunlukları olan bir üçgen düşünün. Yani bir paket varsa, genel bir grafik çizme paketi olmayacaktır. Ya grafiğiniz hakkında mümkün olan özel bir şey var ya da bunu kendiniz programlamanız gerekiyor. – unutbu

cevap

5

Bu çalışması gerekir:

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') 

En grafik çizim algoritmaları tabii kenar uzunluğuna değişir SMACOF, bir versiyonunu kullanır; bununla birlikte, grafviz mizanpaj motoru 'neato' (yukarıda 'çizme' için ikinci argüman olarak verilir), eğer mümkün ise, kullanıcı tarafından ayarlanan kenar uzunluklarını korumalıdır.

Burada kullandığım kütüphane kesinlikle 80.000 düğümle başa çıkacak kadar sağlam.

İlgili konular