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

ema*_*max 7 python matplotlib networkx

我生成了一个图表networkx

import networkx 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.nodes[nodes[i]]['pos'] = p[i]

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

nx.draw(G, pos)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我想为0和之间的每个节点分配一个值4

from random import randint
val = []
for i in range(0, len(G.nodes())):
    val.append(randint(0,4)) 
Run Code Online (Sandbox Code Playgroud)

我想为列表中的每个节点分配颜色并绘制如下val所示的内容

在此输入图像描述

vur*_*mux 8

networkx.draw具有node_color、vmin、vmax 和 cmap参数:

\n\n

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

\n\n

vmin,vmax (浮点数,可选(默认=无)) \xe2\x80\x93 节点颜色图缩放的最小值和最大值

\n\n

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

\n\n

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

\n\n
colors = [i/len(G.nodes) for i in range(len(G.nodes))]\n...\n...\nnx.draw(G, pos, node_color=colors)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n


Com*_*tes 3

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

nx.set_node_attributes(G, val, 'val')
Run Code Online (Sandbox Code Playgroud)

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'))
Run Code Online (Sandbox Code Playgroud)