小编Ach*_*aün的帖子

使用 Matplotlib 的任意非线性颜色条

我想使用 Networkx 和 Matplotlib 为网络的边缘着色,其中每个边缘(i,j)的值都G[i][j]['label']在 0 和 1 之间。

但是,通常,这些值要么非常接近于零,要么非常接近于 1。因此很难将颜色的变化可视化,因为所有东西要么非常红,要么非常蓝(使用coolwarm颜色图)。

然后,我的想法是应用filtR像以下过滤器之一:

在此处输入图片说明

它只是一个多项式函数,它提供从 [0,1] 到 [0,1] 的双射,并在 0 或 1 附近拉伸更多值。如果需要,逆是可以处理的。

现在,我只是将它应用于边缘的值,以定义它的颜色:

cm        = plt.get_cmap('coolwarm') 
cNorm     = colors.Normalize(vmin=0., vmax=1.)
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm)
colorList = []

# The color is defined by filtR(G[i][j]['label'])
val_map   = {(i,j): filtR(G[i][j]['label']) for (i,j) in G.edges()}
values    = [scalarMap.to_rgba(val_map[e]) for e in G.edges()]
edges     = nx.draw_networkx_edges(G,edge_color=values,edge_cmap=plt.get_cmap('coolwarm'))


# Definition of the colorbar :-(
sm = cmx.ScalarMappable(cmap=cmx.coolwarm)
sm.set_array(values)
plt.colorbar(sm) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib networkx colorbar

5
推荐指数
1
解决办法
1874
查看次数

标签 统计

colorbar ×1

matplotlib ×1

networkx ×1

python ×1