Python NetworkX —根据值列表自动设置节点颜色

时间:2019-04-05 13:58:50

标签: python matplotlib networkx

我用networkx

生成了一个图
import netwokx as nx  
s = 5
G = nx.grid_graph(dim=[s,s])
nodes = list(G.nodes)
edges = list(G.edges)
p = []
for i in range(0, s):
    for j in range(0, s):
        p.append([i,j])
for i in range(0, len(nodes)):
    G.node[nodes[i]]['pos'] = p[i]

pos = {}
for i in range(0, len(nodes)):
        pos[nodes[i]] = p[i]

nx.draw(G, pos)

enter image description here

现在,我想为04之间的每个节点分配一个值

import random
val = []
for i in range(0, len(G.nodes()):
    val.append(randint(0,4)) 

我想基于val列表中的每个节点分配颜色,并绘制类似于here的图形

enter image description here

2 个答案:

答案 0 :(得分:0)

networkx.draw具有node_color, vmin, vmax and cmap参数:

cmap(Matplotlib颜色图,可选(默认=无))–用于映射节点强度的颜色图

vmin,vmax(浮点型,可选(默认=无))–节点颜色图缩放的最小值和最大值

node_color(颜色字符串或浮点数数组,(默认='#1f78b4'))–节点颜色。可以是单个颜色格式字符串,也可以是与节点列表长度相同的颜色序列。如果指定了数值,则将使用cmap和vmin,vmax参数将它们映射为颜色。有关更多详细信息,请参见matplotlib.scatter。

您可以在其中写一个列表,这样您的节点将被着色(例如):

colors = [i/len(G.nodes) for i in range(len(G.nodes))]
...
...
nx.draw(G, pos, node_color=colors)

enter image description here

答案 1 :(得分:0)

要设置节点属性,可以使用:

nx.set_node_attributes(G, val, 'val')

Networkx绘制调用到draw_networkx_nodes,这需要一个cmap和颜色列表,因此您要做的只是:

nx.draw(G, pos, node_color = nx.get_node_attributes(G,'val'), vmin=0, vmax=4, cmap = plt.cm.get_cmap('rainbow'))