首页 > 解决方案 > 确保 0 在 RdBu 彩条中变白

问题描述

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

import numpy as np
import matplotlib.pyplot as plt
d = np.random.normal(.4,2,(10,10))
plt.imshow(d,cmap=plt.cm.RdBu)
plt.colorbar()
plt.show()

结果如下图: 在此处输入图像描述

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

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

标签: matplotlibcolormap

解决方案


使用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()

在此处输入图像描述


推荐阅读