如何使用networkx根据属性的值映射节点的颜色?

时间:2014-11-18 02:30:37

标签: python matplotlib networkx

我对此网络的每个节点都有网络和属性情绪。这个属性是一个浮点数,大约从-1到1不等。我想根据这个属性来对网络的节点进行collor,这意味着当值接近1时,颜色更强(alpha 1)或蓝色,当属性接近-1时,颜色变弱(alpha更接近到0)或红色。我怎么能这样做?

以下是我的代码的一部分:

#sentiment
G.node[tweet['user'][ u'id']]['sentiment'] = 0.92762

#plot
color_map = {0:'#3B5998', 1:'#E4AF48'} 
nx.draw_networkx(G, node_color=[color_map[G.node[node]['match']] for node in G], with_labels=False)

它返回以下错误:

Traceback (most recent call last):
File "graph_better.py", line 38, in <module>
nx.draw_networkx(G, node_color=[color_map[G.node[node]['sentiment']] for node in G], with_labels=False)
KeyError: -0.351317

1 个答案:

答案 0 :(得分:1)

您的color_map是一个只包含两个键的词典:01。中间的任何值都不是字典的正确键,因此您得到KeyError

要修复代码,您必须:首先将node_color参数传递给值列表。在你的情况下,它将是:

node_color = [G.node[node]['sentiment'] for node in G]

其次,您需要使用cmap参数,例如:

cmap = plt.cm.Reds_r

所以最后你会:

nx.draw_networkx(G, node_color = [G.node[node]['sentiment'] for node in G], cmap = plt.cm.Reds_r, with_labels = False)

现在唯一剩下的就是将正确的颜色映射传递给cmap