2013-05-06 201 views
19

我想在使用imshow的图像中使用颜色地图rainbow。它完美的工作,但我想重新定义值为0的颜色。我不想使用白色,而是使用白色。如何在matplotlib颜色地图中为特定值重新定义颜色

我想只为零值,所有其他值可以保留在颜色映射中的默认值。

任何想法如何做到这一点没有必须手动编辑颜色映射?

+1

参见:http://stackoverflow.com/questions/16152052/matplotlib-python-change-single-color-in-colormap/16163481 – 2013-05-06 13:59:12

+0

的问题是不同的,最后我不想直接编辑阵营......彩虹色彩地图的定义并不明确 – otmezger 2013-05-06 18:36:35

+0

你根本不必编辑斜坡,我的意思是创建一个蒙版的蒙版,并使用蒙版'cmap.set_bad( '白')'。但是,解决方法与从下面使用'cmap.set_under()'相当。 – 2013-05-07 06:35:43

回答

29

您还可以使用set_under我认为让更多的语义感比使用set_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,参见exampledocs

的答案,复制与更完整的示例,请参阅How to create matplotlib colormap that treats one value specially?

+0

就像一个魅力!谢谢。唯一的问题是,颜色条不会显示白色,但这不是一个大问题...... – otmezger 2013-05-06 15:32:47

+1

(编辑以解决上述问题) – tacaswell 2014-02-14 14:45:31

+0

一旦用'set_under'修改了cmap,'set_over' ,或'set_bad'修改'cmap'。即使使用'matplotlib.cm.get_cmap'再次回顾,原始的cmap仍然会被修改。如何回到原来的状态?或者如何创建一个新的修改而不更改原始cmap? – 2017-06-15 00:58:14

相关问题