2012-07-03 55 views
6

有沒有人知道是否有可能通過(例如)draw_networkx_edges繪製networkx邊緣時對線屬性進行細粒度控制?我想控制行solid_capstylesolid_joinstyle,這是(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() 

在上面的例子中,我想通過控制capstyle來隱藏邊緣之間存在'間隙'。我考慮過以適當的大小添加節點來填補空白,但我最後一幅圖中的邊緣是彩色的,所以添加節點不會削減它。 我不知道從文檔或看edges.properties()如何做我想做的事情......任何建議?

卡森

回答

7

它看起來就像你不能設置matplotlib線集合的capstyle。

但是你可以使自己使用的Line2D對象邊緣的集合,它允許您控制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

感謝您的@Aric。完美的作品! –