2011-11-10 70 views
1

改變節點顏色我畫一張圖表networkx和draw_circularnetworkx:在draw_circular

networkx.draw_circular(g) 

我試着改變一些節點的顏色,可能與draw_networkx_nodes
但爲此,我需要知道節點的位置,我怎樣才能得到draw_circular節點的位置?
或直接,我如何改變draw_circular中某些節點的顏色?

回答

7

draw_circular將接受與draw_networkx相同的關鍵字參數。有一個可選參數node_color,您可以在其中爲單個節點提供顏色。傳遞給node_color的參數必須是一個列表,其長度爲節點數或將用於所有節點的單個值。顏色可以是由matplotlib識別的任何東西。

因此,像這樣會給下面的結果:

import networkx as nx 
import matplotlib.pyplot as plt 
from random import random 
g = nx.random_graphs.erdos_renyi_graph(10,0.5) 
colors = [(random(), random(), random()) for _i in range(10)] 
nx.draw_circular(g, node_color=colors) 
plt.show() 

enter image description here

編輯

Optinoally,您可以用networkx.layout.circular_layout得到一定的佈局節點的位置,等等...

+0

爲什麼使用'_i' var?我的問題是關於'_' – JuanPablo

+0

@JuanPablo:沒有特別的原因。把'_'放在未使用索引的開頭是我的習慣。它沒有其他用途。 – Avaris

2

只是添加到以前的答案(A varis),使用「networkx.draw_networkx_nodes()」的「nodelist」屬性也可能有用。

import matplotlib.pyplot as plt 
import networkx as nx 

nodes = [0,1,2,3] 
edges = [(0,1), (1,2), (3,1), (2,3)] 
nodeListA = [0,1] 
nodeListB = [2,3]  

G = nx.Graph() 
G.add_nodes_from(nodes) 
G.add_edges_from(edges) 
position = nx.circular_layout(G) 

nx.draw_networkx_nodes(G,position, nodelist=nodeListA, node_color="b") 
nx.draw_networkx_nodes(G,position, nodelist=nodeListB, node_color="r") 

nx.draw_networkx_edges(G,position) 
nx.draw_networkx_labels(G,position) 

plt.show() 

這會產生如下圖所示:

enter image description here

您也可以訪問變量「位置」的節點的位置。輸出看起來像這樣:

In [119]: position 
Out[119]: 
{0: array([ 1. , 0.5], dtype=float32), 
1: array([ 0.49999997, 1.  ], dtype=float32), 
2: array([ 0.  , 0.49999997], dtype=float32), 
3: array([ 0.5, 0. ], dtype=float32)}