单向渐变多用于单增的信号,且空间分布非常简单。复杂的空间分布应该采用多色渐变,区分度更大,比如地形图。
双向渐变常用于有正负值的数据,比如相关系数、敏感性等等。今天就是要来讲一讲双向渐变colorbar。
我们平时经常遇到这样的数据,就是正负值不对称,比如值域范围是-1~100。为了能够使用双向渐变colorbar,我们需要调整数据中点,不然调色盘不对称,造成读数的困难!一个暴力的方法就是通过人为设定最大、最小值来设定数据中点:
plt.imshow(data, vmin=-100, vmax=100)
下面介绍一个更加合理、不浪费空间的简便方法:
from matplotlib.colors import Normalize
class MidpointNormalize(Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
# I'm ignoring masked values and all kinds of edge cases to make a
# simple example...
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
data = np.random.random((10,10))
data = 10 * (data - 0.8)
fig, ax = plt.subplots()
norm = MidpointNormalize(midpoint=0)
im = ax.imshow(data, norm=norm, cmap=plt.cm.bwr, interpolation='none')
fig.colorbar(im)
plt.show()
是不是很简单呀?原作者Joe还有好几种其他方法,以后可以试验一下。