我通过.imshow()方法在2d中进行3D数据的交互式显示。我让用户在查看单个2d图层和查看所有2d图层之间的模式之间更改模式。这导致显示值范围的大的变化。因此,始终保持相同的颜色映射会导致图像过饱和且不可读。我使用AxesImage类的.set_data()方法来更改显示的数据,我需要一种同时重新计算颜色映射的方法。我最接近这个目标的是这个功能:
def blit_data(self, data):
c_norm = cs.Normalize(vmin=np.nanmin(data), vmax=np.nanmax(data))
cmap = plt.get_cmap('viridis')
scalar_map = cmx.ScalarMappable(norm=c_norm, cmap=cmap)
cmapped = scalar_map.to_rgba(data)
self.display.set_data(cmapped)
(cmx = matplotlib.cm, cs = matplotlib.colors, plt = matplotlib.pyplot)
然而,这会产生不必要的副作用:将鼠标悬停在显示图像中的像素上,现在将[r g b]元组显示为工具提示,而不是原始的float64值,这会阻碍对此数据的探索。出于这个原因,我正在寻找另一种方法来达到同样的效果。后续问题将是如何将此重新规范化传达给颜色条,因此它保持相关性。