2017-07-06 285 views
0

我想为每个节点设置不同的字母。为每个节点设置一个不同的颜色很容易,但只有一个值除外。有人知道怎么做吗?networkx:为每个节点设置不同的alpha值?

(我的目标是有从蓝色到红色的颜色渐变。如果值是它是蓝色的中点下方,如果上面是红色的。阿尔法将设置渐变。)

nx.draw_networkx_nodes(g,pos=pos,nodelist=nodelist, 
node_color=node_color, alpha=1.0) 

回答

1

的Alpha值将控制透明度,而不是颜色。

如果您已经提供了node_color参数,则您的节点将被着色。如果你想让他们根据这些强度从蓝色变为红色,而不是阿尔法,请使用colormap.'地震'从红色变为蓝色。

nx.draw_networkx_nodes(g,pos=pos,nodelist=nodelist,node_color=node_color, cmp='seismic')

编辑:我碰到一些奇怪的行为,试图更深入地研究这个偶然。我原以为networkx的绘图会像matplotlib的scatter绘图一样,并接受rgba颜色,允许您指定特定的颜色和透明度。但是,当我打电话draw_networkx_nodes用的4元组的阵列来表示RGBA颜色,它设置所有的α值设置为1

rgba_colors = np.zeros((5,4)) 
rgba_colors[:,0] = np.linspace(1,0,5) #red 
rgba_colors[:,2] = np.linspace(0,1,5) #blue 
rgba_colors[:,3] = np.linspace(0.1,1,5) #alpha values 

plt.scatter([1,2,3,4,5],[1,2,3,4,5], color=rgba_colors) 

该图表具有变化的颜色和透明度的一些点。但是,如果您尝试使用networkx绘图,则不仅得到的绘图不具有透明度,而且变量rgba_colors实际上已被修改。

G = nx.complete_graph(5) 
pos = {0: [0,0], 1: [1,1], 2: [2,2], 3: [2,1], 4: [2,3]} 
nx.draw_networkx_nodes(G, pos=pos, node_color=rgba_colors) 
print(rgba_colors) 

我不知道为什么会发生这种情况。

+0

alpha控件透明度和透明度会影响颜色的外观:) – Leigh

+0

您确定'rgba_colors'已被修改?它似乎并没有改变。 – Joel

+0

@Joel是的,它被修改。我可以通过使用元组列表而不是2D numpy数组来防止这种情况,但生成的图形是相同的。但是,我使用旧版本的networkx(1.9.1)和matplotlib(1.4.2)。 –