for 循环中的节点属性,NetworkX
Node attributes in for loops, NetworkX
我正在尝试对网络上的投票动态进行建模,并希望能够在 NetworkX 中创建一个图表,在其中我可以在节点上迭代选民流程,使它们的颜色变化与他们的投票相对应 'labels'.
我已经设法获得这段代码,让我可以看到每个节点的属性,但是我该如何在 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 循环来根据节点编号进行这种类型的颜色编码,如下所示,但未能使其适用于我的 'vote' 状态。
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)
迭代节点属性,其中 returns 字典中的节点名称和节点属性。这是使用您的图表的完整示例。
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=0
和 vmax=1
以便颜色值是绝对的(而不是相对于彼此)。
以上代码的输出:
更新:
我不知道您可以在 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 中创建一个图表,在其中我可以在节点上迭代选民流程,使它们的颜色变化与他们的投票相对应 'labels'.
我已经设法获得这段代码,让我可以看到每个节点的属性,但是我该如何在 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 循环来根据节点编号进行这种类型的颜色编码,如下所示,但未能使其适用于我的 'vote' 状态。
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)
迭代节点属性,其中 returns 字典中的节点名称和节点属性。这是使用您的图表的完整示例。
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=0
和 vmax=1
以便颜色值是绝对的(而不是相对于彼此)。
以上代码的输出:
更新:
我不知道您可以在 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)
请注意,通过这种方式您可以获得与上图中不同的蓝色和黄色阴影。