2013-08-02 19 views
6

Desidero disegnare un reticolo quadrato con Networkx. Ho fatto qualcosa di simile:Disegno di reticoli e grafici con Networkx

import matplotlib.pyplot as plt 
import numpy as np 
import networkx as nx 
L=4 

G = nx.Graph() 

pos={} 
for i in np.arange(L*L): 
    pos[i] = (i/L,i%L) 

nx.draw_networkx_nodes(G,pos,node_size=50,node_color='k')  

plt.show() 

Tuttavia, l'output è solo una cifra vuota. Come posso risolvere questo?

Inoltre, vorrei unire i punti orizzontalmente e verticalmente con le frecce. La direzione delle frecce che vanno da (i,j) to (i+1,j) dovrebbe dipendere dal segno dell'elemento i, j di una matrice A che ho già. Come fare questo?

risposta

8

Questi è un costruttore grafico esplicita per questo nx.grid_2d_graph:

G = nx.grid_2d_graph(L,L) 
nx.draw(G,node_size=2000) 
plt.show() 

enter image description here

Possiamo modificare questo grafico non orientato in un grafo orientato che si adatta ai tuoi criteri bordo. Ad esempio, ho rimosso i bordi che puntano lontano dall'origine. È possibile adattare questo per soddisfare le vostre esigenze:

G2 = nx.DiGraph(G) 
for edge in G2.edges(): 
    if edge != tuple(sorted(edge)): 
     G2.remove_edge(*edge) 

nx.draw_spectral(G2,node_size=600,node_color='w') 

enter image description here