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

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