2012-07-03 19 views
6

¿Alguien sabe si es posible tener un control detallado sobre las propiedades de línea al dibujar bordes de redx a través (por ejemplo) draw_networkx_edges? Me gustaría controlar la línea solid_capstyle y solid_joinstyle, que son (matplotlib) Line2D propiedades.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() 

En el ejemplo anterior, hay "espacios" entre los bordes que me gustaría ocultar controlando el estilo de cap. Pensé en agregar los nodos en el tamaño correcto para llenar los huecos, pero los bordes en mi trama final son de color, por lo que agregar nodos no lo cortará. No puedo deducir de la documentación o mirar edges.properties() cómo hacer lo que quiero hacer ... ¿alguna sugerencia?

Carson

Respuesta

7

Parece que no se puede establecer la capstyle en colecciones línea matplotlib.

Pero usted puede hacer su propia colección de bordes utilizando objetos Line2D que le permite controlar la 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

Gracias para que @Aric. ¡Funciona perfectamente! –

Cuestiones relacionadas