Network循环中的节点属性,NetworkX

时间:2017-01-25 15:33:32

标签: networkx

我正在尝试对网络上的投票动态进行建模,并希望能够在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()

1 个答案:

答案 0 :(得分:2)

您可以使用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)

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