matplotlib - 确保 0 在 RdBu 颜色条中变为白色
matplotlib - 确保 0 在 RdBu 颜色条中变为白色
我使用以下代码段创建了一个热图:
<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