2009-12-05 17 views
7

Volevo visualizzare una rete con i dati che ho e vorrei tracciarli con specifiche lunghezze dei bordi. Io uso Python, e ho provato networkx e igraph per la trama, ma tutti sembrano assegnare lunghezze di bordo fisse.Lunghezze di spigolo specificate su networkx/igraph (Python)

a.) Mi chiedo se ho sbagliato i codici oi pacchetti non sono realmente in grado. Come implementate correttamente le lunghezze dei bordi specificate per networkx o igraph?

b.) Se networkx e igraph non possono farlo, quale pacchetto potresti suggerire? (Preferibilmente uno che può trasportare oltre 80 mila nodi.)

Grazie!

+2

In generale i programmi di tracciatura di grafici/rete non consentono di assegnare lunghezze dei bordi fissi, poiché non tutti i grafici possono essere tracciati se si correggono anche le lunghezze dei bordi. Pensa a un triangolo con lunghezze laterali di 1,100. Quindi, se c'è un pacchetto, non sarà un pacchetto di tracciamento grafico generale. O c'è qualcosa di speciale nel tuo grafico che lo rende possibile, oppure dovrai programmarlo tu stesso. – unutbu

risposta

5

Questo dovrebbe funzionare:

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

maggior parte degli algoritmi di disegno grafico utilizzano alcune versioni di SMACOF, che ovviamente varia la lunghezza del bordo; tuttavia, il motore di layout graphviz 'neato' (fornito come secondo argomento per 'disegnare' sopra) dovrebbe preservare, se possibile, le lunghezze dei bordi impostate dall'utente.

La libreria che ho usato qui è sicuramente abbastanza robusta da gestire 80.000 nodi.

Problemi correlati