matplotlib - 确保 0 在 RdBu 颜色条中变为白色

使用matplotlib创建热图时,如果数据中间值不为0,颜色条中的0不会显示为白色。解决方法是通过DivergingNorm(在matplotlib3.2后为TwoSlopeNorm)设置规范,确保0值被映射到白色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib - 确保 0 在 RdBu 颜色条中变为白色

matplotlib - 确保 0 在 RdBu 颜色条中变为白色 - IT工具网

标签 matplotlib colormap

我使用以下代码段创建了一个热图:
 

<span style="color:#212529"><span style="background-color:#ffffff"><span style="color:#212529"><code style="margin-left:2px"><span style="color:#5f9182">import</span> numpy <span style="color:#5f9182">as</span> np
<span style="color:#5f9182">import</span> matplotlib.pyplot <span style="color:#5f9182">as</span> plt
d = np.random.normal(<span style="color:#ae7313">.4</span>,<span style="color:#ae7313">2</span>,(<span style="color:#ae7313">10</span>,<span style="color:#ae7313">10</span>))
plt.imshow(d,cmap=plt.cm.RdBu)
plt.colorbar()
plt.show()
</code></span></span></span>

结果如下图:



现在,由于数据的中间点不是 0,因此颜色图值为 0 的单元格不是白色,而是略带红色。

如何强制颜色图使 max=blue、min=red 和 0=white?

最佳答案

使用 DivergingNorm .
注:从 matplotlib 3.2 开始 DivergingNorm更名为 TwoSlopeNorm

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

d = np.random.normal(.4,2,(10,10))

norm = mcolors.DivergingNorm(vmin=d.min(), vmax = d.max(), vcenter=0)
plt.imshow(d, cmap=plt.cm.RdBu, norm=norm)

plt.colorbar()
plt.show()

关于matplotlib - 确保 0 在 RdBu 颜色条中变为白色,我们在Stack Overflow上找到一个类似的问题: matplotlib - Making sure 0 gets white in a RdBu colorbar - Stack Overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值