节点的 Networkx 和 matplotlib 颜色图;不同网络的相同地图

Posted

技术标签:

【中文标题】节点的 Networkx 和 matplotlib 颜色图;不同网络的相同地图【英文标题】:Networkx and matplotlib colormap for nodes ; same map for different networks 【发布时间】:2020-05-26 18:16:35 【问题描述】:

在绘制多个网络时,我正在努力显示节点颜色。基本上,我从一个看起来像这样的数据框开始:

data.head()

    x     y     C1    C2    C3    C4            
n1  0.63  0.34  1.00  1.00  1.00  1.07
n2  0.56  0.27  0.94  0.91  0.94  1.11
n3  0.59  0.26  1.07  1.02  1.05  1.21
n4  0.65  0.38  1.15  1.27  1.55  0.98
n5  0.63  0.44  0.93  0.89  0.99  1.04

每一行都是一个网络节点(边缘列表存储在另一个文件中),我使用xy 列作为节点布局。我的意思是绘制四次网络,节点颜色跟随四列C1/C1/C3/C4 中的每一列的值。

因此,为了轻松比较每个节点的值的演变,我尝试在绘制网络时用四列的最小值和最大值定义颜色图的范围(在下面的代码示例中硬编码) :

cmap = plt.cm.YlOrRd
vmin, vmax = 0.0, 200.0
nodes_colors = data['C1'] # or C2,C3,C4
nx.draw_networkx_nodes(my_network, 
                       pos=my_positions_dict, 
                       node_size=200, 
                       edgecolors='black',
                       node_color=nodes_colors,                            
                       cmap=cmap, 
                       vmin=vmin, 
                       vmax=vmax)

但它不起作用!我有几个只有高值的节点,所以很容易手动检查,而且颜色是错误的。第一次尝试我做错了什么?

我尝试了另一种方法,使用ScalarMappable

import matplotlib.pyplot as plt
cmap = plt.cm.YlOrRd
vmin = 0.0
vmax = 200.0
sm = plt.cm.ScalarMappable(cmap=cmap, norm=plt.Normalize(vmin=vmin, vmax=vmax))

但是我不知道在绘制网络时如何使用它。它可以这样工作吗?

很遗憾,我没有分享可重现的代码,因为我对输入数据进行了很多预处理(此外,这些数据暂时不公开)。

提前致谢。

【问题讨论】:

【参考方案1】:

实际上是数据帧和网络之间的索引顺序和节点顺序的问题。很抱歉问了一些愚蠢的问题。

【讨论】:

以上是关于节点的 Networkx 和 matplotlib 颜色图;不同网络的相同地图的主要内容,如果未能解决你的问题,请参考以下文章

使用 networkX 和 matplotlib 绘制一个巨大的图形

networkx网络拓扑节点图和树,python

使用 NetworkX 和 Matplotlib 动画网络增长

使用 matplotlib 在网络中设置动态节点形状

使用 python 和 networkx 进行大图可视化

NetworkX 中的节点与边