在绘制多个网络时,我努力显示节点颜色。基本上,我从一个看起来像这样的数据帧开始:
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
每行都是一个网络节点(边列表存储在另一个文件中),我使用x
和y
列作为节点布局。我的观点是绘制四次网络图,节点颜色紧跟四列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))
但是后来我不知道在绘制网络时如何使用它。可以这样工作吗?
不幸的是,我没有共享可重复的代码,因为我对输入数据进行了很多预处理(而且,这些数据目前还不公开)。
谢谢。
答案 0 :(得分:0)
实际上,这是数据帧和网络之间的索引顺序和节点顺序的问题。很抱歉问傻问题。