2013-12-11 5 views
2

Я использую python и «networkx» для случайного назначения ребер кивкам. кивки находятся в двух категориях, и каждая категория имеет одинаковое количество узлов. код работает, но у меня есть один вопрос: как я могу изменить цвет узлов? теперь узлы обеих категорий имеют собственный цвет.python и networkx: как изменить цвет узлов

import numpy as np 
import networkx as nx 
import matplotlib.pyplot as plt 
N = int(raw_input("Enter the number of each race to be used: ")) 

gamma = float(raw_input("Enter the probability of same-race ties: ")) 

delta = float(raw_input("Enter the probability of cross-race ties: ")) 
connectr11 = np.zeros((N,N),dtype=np.int32) 

for i in range(0,N): 
     dval = np.diag((np.random.random_sample(size=(N-i))<gamma).astype(np.int32),i) 
     connectr11 += dval 
     if (i>0): 
       connectr11 += dval.T 
##print connectr11 

connectr22 = np.zeros((N,N),dtype=np.int32) 

for i in range(0,N): 
     dval = np.diag((np.random.random_sample(size=(N-i))<gamma).astype(np.int32),i) 
     connectr22 += dval 
     if (i>0): 
       connectr22 += dval.T 

##print connectr22 

connectr12 = np.zeros((N,N),dtype=np.int32) 

for i in range(0,N): 
     dval = np.diag((np.random.random_sample(size=(N-i))<delta).astype(np.int32),i) 
     connectr12 += dval 
     if (i>0): 
       connectr12 += dval.T 

##print connectr12 


connectr21 = np.zeros((N,N),dtype=np.int32) 

for i in range(0,N): 
     dval = np.diag((np.random.random_sample(size=(N-i))<delta).astype(np.int32),i) 
     connectr12 += dval 
     if (i>0): 
       connectr12 += dval.T 
##print connectr21 

concr1x=np.concatenate((connectr11, connectr12), axis=0) 
concrx2=np.concatenate((connectr21, connectr22), axis=0) 
concr12=np.concatenate((concr1x, concrx2), axis=1) 
##print concr12 


print concr12 


A=np.matrix(concr12) 
G=nx.from_numpy_matrix(A) 


for i in range(0,N): 
    if i < N: 
     G.node[i] = 1 
     node_color='b' 
    else: 
     G.node[i] = 0 
     node_color='r' 



nx.draw_circular(G, node_color=node_color) 
plt.show() 
+1

Много примеров рисунков с кодом здесь: http://networkx.github.io/documentation/latest/gallery.html – Aric

ответ

3

Вы хотите, чтобы ваш node_color был списком. В вашей второй до последней строке назначение node_color = node_color делает ВСЕ из узлов независимо от последнего значения, назначенного node_color. То, что вам нужно, - это список равных по длине количеству узлов, которые у вас есть.

попробовать:

for i in range(0,N): 
     if i < N: 
      node_colors.append('b') 
     else: 
      node_colors.append('r') 
    nx.draw_circular(G, node_color = node_colors) 
    plt.show() 
Смежные вопросы