2012-07-03 10 views
6

networkxの端を(たとえば)draw_networkx_edges経由で描画するときに、線のプロパティをきめ細かく制御できるかどうか知りませんか?私は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() 

上記の例では、キャプションを制御することによって非表示にするエッジ間に「ギャップ」があります。ギャップを埋めるのにちょうどいいサイズでノードを追加することを考えましたが、最終的なプロットのエッジは色付けされているので、ノードを追加してもそれをカットしません。 私はドキュメントから理解することができませんまたはedges.properties()私がやりたいことを行う方法...任意の提案を見て?

カーソン

答えて

7

あなたはmatplotlibの行コレクションにcapstyleを設定することはできませんように見えます。

しかし、あなたはcapstyleを制御することができたLine2Dオブジェクト使用してエッジの独自のコレクションを作ることができます。そのため@Aric

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

感謝を。完璧に動作します! –