2016-12-05 16 views
0

我知道之前曾問過類似的問題,但我的問題有點複雜。我試圖根據他們的出錯程度來定義networkx圖的節點大小,但是會弄得一團糟。這裏是我的代碼:根據網絡中的節點度定義節點大小時出現錯誤結果

nodes = pd.read_csv('nodes_1984.csv') 
edges = pd.read_csv('edges_1984.csv') 
nodes.head() 

this how my data containing nodes looks like (click)

network=nx.DiGraph() 
for row in nodes.iterrows(): 
    network.add_node(row[1][0], Label=row[1][1], region=row[1][2], pos=(row[1][4], row[1][3])) 
for row in edges.iterrows(): 
    network.add_edge(row[1][0],row[1][1], weight=row[1][3]) 

pos=nx.get_node_attributes(network,'pos') 

d_out = network.out_degree() #dictionary of {nodes:out_degree_values} 
d_out_val = [] #creating a list which contains values of out_degree of nodes and sorting them in the same order as they were in the d_out dict 

for w in sorted(d_out.keys()): 
    d_out_val.append(d_out[w]) 

d_out_val 

plt.figure(figsize=(32,28)) #plotting my network 
nx.draw(network, pos, with_labels=True, node_size=[s * 100 for s in d_out_val], node_color="w") 
plt.show() 

的結果是,我的圖中的節點尺寸不符合這些節點的出度值雖然我把盛度列表(d_out_val)上面的節點的值。 你能告訴我們這個問題可以解決嗎?

回答

1

通過nx.drawnodelist參數其中您給出了一個排序的節點列表。因此,而不是

nx.draw(network, pos, with_labels=True, node_size=[s * 100 for s in d_out_val], node_color="w") 

你必須:

nx.draw(network, pos, nodelist=sorted(network.nodes()), with_labels=True, node_size=[s * 100 for s in d_out_val], node_color="w") 

如果你不給nodelist說法,networkx將使用network.nodes()(這是不是不像你node_size列表排序)。