我发现了这个有用的类
MidpointNormalize
,它允许您选择一个数据值来对应于您的色彩比例尺的中点颜色。有效地说,这意味着您可以通过正确重新映射区间[0,1]本身来移动您的色条的中点颜色。我需要使用这个类,并同时屏蔽某些数据值。然而,当我屏蔽某些值时,它们并没有变得透明,而是出现了过饱和的颜色。
所以:我如何使用这个MidpointNormalize
类使被屏蔽的数据透明?我发布一个可运行的最小示例。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cm
class MidpointNormalize(colors.Normalize):
def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
self.midpoint = midpoint
colors.Normalize.__init__(self, vmin, vmax, clip)
def __call__(self, value, clip=None):
x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
return np.ma.masked_array(np.interp(value, x, y))
N = 100
non_masked_data = np.random.rand(N,N)*4.0-2.0
data = np.ma.masked_where(non_masked_data < -1.0, non_masked_data)
fig, ax = plt.subplots()
ax.set_axis_bgcolor('black')
norm_me = MidpointNormalize(midpoint=1.,vmin=data.min(),vmax=data.max())
plot = plt.imshow(data, origin='lower', interpolation='none', cmap="RdBu_r", norm=norm_me)
cb = fig.colorbar(plot)
plt.show()