我用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)
现在,我想为0
和4
之间的每个节点分配一个值
import random
val = []
for i in range(0, len(G.nodes()):
val.append(randint(0,4))
我想基于val
列表中的每个节点分配颜色,并绘制类似于here的图形
答案 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)
答案 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'))