2014-09-03 6 views
8

मैं ग्राफ सही ढंग से उत्पादन करने में कामयाब रहे, लेकिन कुछ अधिक परीक्षण के साथ कोड के निम्नलिखित दो अलग-अलग लाइन के लिए असंगत परिणाम का उल्लेख किया:networkx - परिवर्तन रंग/चौड़ाई अनुसार बढ़त विशेषताओं के लिए - असंगत परिणाम

nx.draw_circular(h,edge_color=[h.edge[i][j]['color'] for (i,j) in h.edges_iter()], width=[h.edge[i][j]['width'] for (i,j) in h.edges_iter()]) 

nx.draw_circular(h,edge_color=list(nx.get_edge_attributes(h,'color').values()), width=list(nx.get_edge_attributes(h,'width').values())) 

पहले रेखा परिणाम लगातार उत्पादन, जबकि दूसरे किनारों के आदेश के अनुसार गलत रंग/आकार का उत्पादन।

हालांकि, मुझे लगता है कि उपर्युक्त दो पंक्तियां दोनों किनारों के क्रम में गुणों को वापस करने के लिए फ़ंक्शन कॉल पर भरोसा करती हैं। अलग-अलग परिणाम क्यों?

h[][][] के साथ विशेषताओं तक पहुंचने के लिए यह मेरे लिए थोड़ा बेकार लग रहा है; क्या डॉट सम्मेलन द्वारा इसे एक्सेस करना संभव है, उदा। edge.color for edge in h.edges()

या मुझे कुछ याद आया?

उत्तर

13

ड्राइंग कार्यों में पारित किनारों का क्रम महत्वपूर्ण है। यदि आप निर्दिष्ट नहीं करते हैं (किनारों के कीवर्ड का उपयोग करके) आपको G.edges() का डिफ़ॉल्ट क्रम प्राप्त होगा। यह स्पष्ट रूप से इस तरह पैरामीटर देने के लिए सबसे सुरक्षित है:

import networkx as nx 

G = nx.Graph() 
G.add_edge(1,2,color='r',weight=2) 
G.add_edge(2,3,color='b',weight=4) 
G.add_edge(3,4,color='g',weight=6) 

pos = nx.circular_layout(G) 

edges = G.edges() 
colors = [G[u][v]['color'] for u,v in edges] 
weights = [G[u][v]['weight'] for u,v in edges] 

nx.draw(G, pos, edges=edges, edge_color=colors, width=weights) 

यह इस तरह एक आउटपुट में परिणाम: enter image description here

+0

tkyou! आपका कोड मूल रूप से कोड की मेरी पहली पंक्ति के समान ही है। लेकिन, क्या आपका मतलब है कि function_edges_attributes किनारों() के रूप में किनारों को वापस नहीं करेगा? – timeislove

संबंधित मुद्दे