gpt4 book ai didi

networkx - for 循环中的节点属性,NetworkX

转载 作者:行者123 更新时间:2023-12-05 03:09:45 32 4
gpt4 key购买 nike

我正在尝试对网络上的投票动态进行建模,并希望能够在 NetworkX 中创建一个图表,在其中我可以在节点上迭代投票过程,让它们的颜色变化对应于它们的投票“标签”。

我已设法获得此代码以查看每个节点的属性,但如何在 for 循环中使用这些代码来指定颜色?

H = nx.Graph()

H.add_node(1,vote='labour')

H.add_node(2,vote='labour')

H.add_node(3,vote='conservative')

h=nx.get_node_attributes(H,'vote')

h.items()

给我结果:

[(1, 'labour'), (2, 'labour'), (3, 'conservative')]

我有一个 for 循环来根据节点编号进行这种类型的颜色编码,如下所示,但未能使其适用于我的“投票”状态。

S=nx.star_graph(10)
colour_map=[]
for node in S:
if node % 2 ==0:
colour_map.append('blue')
else: colour_map.append('yellow')
nx.draw(S, node_color = colour_map,with_labels = True)
plt.show()

最佳答案

您可以使用 H.nodes(data=True) 迭代节点属性,它返回字典中的节点名称和节点属性。这是使用您的图表的完整示例。

import networkx as nx
import matplotlib.pyplot as plt

H = nx.Graph()
H.add_node(1, vote='labour')
H.add_node(2, vote='labour')
H.add_node(3, vote='conservative')

color_map = []
for node, data in H.nodes(data=True):
if data['vote'] == 'labour':
color_map.append(0.25) # blue color
elif data['vote'] == 'conservative':
color_map.append(0.7) # yellow color

nx.draw(H, vmin=0, vmax=1, cmap=plt.cm.jet, node_color=color_map, with_labels=True)
plt.show()

此代码将在您每次运行时绘制不同的节点布局(某些布局,例如 draw_spring,可用 here)。

关于颜色,我对蓝色使用 0.25,对黄色使用 0.7。请注意,我使用了 jet matplotlib 颜色映射并且我设置了 vmin=0vmax=1 以便颜色值是绝对的(而不是相对于彼此)。

上面代码的输出:

enter image description here

更新:

我不知道您可以在 matplotlib 中简单地使用颜色名称。这是更新后的 for 循环:

for node, data in H.nodes(data=True):
if data['vote'] == 'labour':
color_map.append("blue")
elif data['vote'] == 'conservative':
color_map.append("yellow")

更新后的绘图命令:

nx.draw(H, node_color=color_map, with_labels=True)

请注意,通过这种方式您可以获得与上图中不同的蓝色和黄色阴影。

关于networkx - for 循环中的节点属性,NetworkX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41855510/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com