2016-02-14 32 views
1

我使用这段代码绘制使用networkX二分图:如何更改networkX中二分图的节点和边的颜色?

import networkx as nx 

G = bipartite.from_biadjacency_matrix(a_matrix, create_using=None, edge_attribute='weight') 
X, Y = bipartite.sets(G) 
pos = dict() 
pos.update((n, (0, i*10)) for i, n in enumerate(X)) 
pos.update((n, (0.5, i*10)) for i, n in enumerate(Y)) 
nx.draw(G, pos=pos) 

enter image description here

有一种随机改变不同组节点边缘之间的颜色他们?

回答

1

产生一些随机数:

edge_color=np.random.random(num_edges) 
node_color=np.random.random(num_nodes) 

并设置边缘彩色地图:

edge_cmap=plt.get_cmap('Blues') 

和节点彩色地图:

cmap=plt.get_cmap('Reds') 

import numpy as np 
import networkx as nx 
import matplotlib.pyplot as plt 
from networkx.algorithms import bipartite 
import scipy.sparse as sparse 

a_matrix = sparse.rand(10, 10, format='coo', density=0.8) 

G = bipartite.from_biadjacency_matrix(a_matrix, create_using=None, 
             edge_attribute='weight') 
X, Y = bipartite.sets(G) 
pos = dict() 
pos.update((n, (0, i*10)) for i, n in enumerate(X)) 
pos.update((n, (0.5, i*10)) for i, n in enumerate(Y)) 
num_edges = G.number_of_edges() 
num_nodes = G.number_of_nodes() 
nx.draw(G, pos=pos, with_labels=True, 
     edge_color=np.random.random(num_edges), 
     edge_cmap=plt.get_cmap('Blues'), 
     node_color=np.random.random(num_nodes), 
     cmap=plt.get_cmap('Reds')) 
plt.show() 

enter image description here

0

你可以使用子图上色连接的节点:

C = nx.connected_component_subgraphs(G) 
    for g in C: 
     node_colors = [random.random()] * nx.number_of_nodes(g) 
     nx.draw(g, pos, node_size=40, node_color=node_colors, vmin=0.0, vmax=1.0, with_labels=False)