Python 如何在matplotlib colormap中为特定值重新定义颜色

Python 如何在matplotlib colormap中为特定值重新定义颜色,python,matplotlib,color-mapping,Python,Matplotlib,Color Mapping,我想使用imshow在图像中使用彩色贴图rainbow。它工作得很好,但我想为值0重新定义颜色。我想用白色代替紫罗兰色 我只想对值0执行此操作,所有其他值都可以保留colormap中的默认值 你知道如何在不必手动编辑彩色地图的情况下完成这项工作吗?你也可以在下使用set\u,我认为这比使用set\u bad更有语义意义 my_cmap = matplotlib.cm.get_cmap('rainbow') my_cmap.set_under('w') imshow(np.arange(25).r

我想使用
imshow
在图像中使用彩色贴图
rainbow
。它工作得很好,但我想为值
0
重新定义颜色。我想用白色代替紫罗兰色

我只想对值0执行此操作,所有其他值都可以保留colormap中的默认值


你知道如何在不必手动编辑彩色地图的情况下完成这项工作吗?

你也可以在
下使用
set\u,我认为这比使用
set\u bad
更有语义意义

my_cmap = matplotlib.cm.get_cmap('rainbow')
my_cmap.set_under('w')
imshow(np.arange(25).reshape(5, 5),
       interpolation='none',
       cmap=my_cmap,
       vmin=.001)
您可以使用kwarg
extend
,调整颜色栏以显示“下”(和对称的“上”)颜色,请参见和


关于一个重复的更完整的例子的答案,请参见

参见:问题不同,mince我不想直接编辑营地。。。彩虹颜色贴图的定义并不明确。你根本不需要编辑渐变,我的意思是创建一个带零掩码的掩码数组,并使用
cmap.set\u bad('white')
。但是解决方法与从下面使用
cmap.set_under()
相当。你应该这样做。效果非常好!谢谢唯一的问题是,色条不会显示白色,但这不是一个大问题……一旦使用
set\u下的
修改cmap,
set\u上的
,或
set\u bad
修改
cmap
。即使再次使用
matplotlib.cm.get\u cmap
检索,原始cmap仍会保持修改状态。如何回到原来的状态?或者,如何创建一个新的cmap进行修改而不更改原始cmap?
cmap=copy.deepcopy(cm.get\u cmap(…)
。它在2.1版中没有deepcopy就可以工作。因此,对于低于2.1版的
mpl
版本,除非手动重置原始颜色,否则无法将
cmap
恢复到原始状态?顺便说一句,
copy
模块中的
deepcopy
成功了。我找到了将
cmap
返回到原始状态的方法,例如,
viridis
在极端值被修改后:mpl.cm.viridis.\u rgba_under=None;绿色植物