2012-07-03 16 views
6

Qualcuno sa se è possibile avere un controllo fine sulle proprietà della linea quando si disegnano i bordi della rete tramite (ad esempio) draw_networkx_edges? Vorrei controllare la linea solid_capstyle e solid_joinstyle, che sono proprietà (matplotlib) Line2D.networkx draw_networkx_edges capstyle

>>> import networkx as nx 
>>> import matplotlib.pyplot as plt 
>>> G = nx.dodecahedral_graph() 
>>> edges = nx.draw_networkx_edges(G, pos=nx.spring_layout(G), width=7) 
>>> plt.show() 

Nell'esempio di cui sopra, ci sono 'buchi' tra i bordi che mi piacerebbe nascondere controllando la capstyle. Ho pensato di aggiungere i nodi alla giusta dimensione per riempire gli spazi vuoti, ma i bordi della trama finale sono colorati, quindi aggiungere nodi non lo taglierà. Non riesco a capire dalla documentazione o guardando edges.properties() come fare ciò che voglio fare ... qualche suggerimento?

Carson

risposta

7

Sembra che non è possibile impostare la capstyle sulle collezioni della linea matplotlib.

Ma si può fare la propria collezione di bordi con oggetti Line2D, che permette di controllare il capstyle:

import networkx as nx 
import matplotlib.pyplot as plt 
from matplotlib.lines import Line2D 
G = nx.dodecahedral_graph() 
pos = nx.spring_layout(G) 
ax = plt.gca() 
for u,v in G.edges(): 
    x = [pos[u][0],pos[v][0]] 
    y = [pos[u][1],pos[v][1]] 
    l = Line2D(x,y,linewidth=8,solid_capstyle='round') 
    ax.add_line(l) 
ax.autoscale() 
plt.show() 
+0

Grazie per questo @Aric. Funziona perfettamente! –

Problemi correlati