Python Matplotlib Colormap

时间:2012-03-27 16:10:38

标签: python matplotlib

我使用colormap“jet”来绘制我的图形。但是,我希望将较低的值设置为白色,并且此颜色图从蓝色变为红色。我也不想使用另一种色彩图,因为我需要这种颜色...... 我试图使我的色彩图与“jet”相同,其中一系列值为白色,但这太难了。 有人可以帮我吗? 谢谢

3 个答案:

答案 0 :(得分:9)

可能应该有一个最简单的解决方案,但我想出的方法是创建自己的matplotlib.colors.LinearSegmentedColormap,基于“jet”。

(你的色彩图的最低级别是在每个红色,绿色和蓝色元组的第一行中定义的,所以这就是你开始编辑的地方。我添加了一个额外的元组,在下半部分有一个明显的白点。 ...对于每种颜色,在元组的第一个元素中,您指示颜色栏中的位置(从0到1),在第二个和第三个颜色本身中。)

from matplotlib.pyplot import *
import matplotlib
import numpy as np

cdict = {'red': ((0., 1, 1),
                 (0.05, 1, 1),
                 (0.11, 0, 0),
                 (0.66, 1, 1),
                 (0.89, 1, 1),
                 (1, 0.5, 0.5)),
         'green': ((0., 1, 1),
                   (0.05, 1, 1),
                   (0.11, 0, 0),
                   (0.375, 1, 1),
                   (0.64, 1, 1),
                   (0.91, 0, 0),
                   (1, 0, 0)),
         'blue': ((0., 1, 1),
                  (0.05, 1, 1),
                  (0.11, 1, 1),
                  (0.34, 1, 1),
                  (0.65, 0, 0),
                  (1, 0, 0))}

my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)

pcolor(np.random.rand(10,10),cmap=my_cmap)
colorbar()
show()

您将获得以下内容: jet colormap with white

答案 1 :(得分:7)

在没有定义新的colobar的情况下,还有另一种方法可以做到这一点。 您可以使用cmap.set_under方法定义要用于低于给定阈值的所有值的颜色。阈值是在pcolormesh期间定义的:

from matplotlib.pyplot import *
import numpy as np

mycmap = cm.get_cmap('jet')
mycmap.set_under('w')

pcolor(np.random.rand(10,10), cmap=mycmap, vmin=.1)
colorbar()
show()

答案 2 :(得分:6)

colormaps page上有这个例子。在我的机器上挖掘matplotlib来源,jet被定义为(在_cm.py中):

_jet_data =   {'red':   ((0., 0, 0), (0.35, 0, 0), (0.66, 1, 1), (0.89,1, 1),
                         (1, 0.5, 0.5)),
               'green': ((0., 0, 0), (0.125,0, 0), (0.375,1, 1), (0.64,1, 1),
                         (0.91,0,0), (1, 0, 0)),
               'blue':  ((0., 0.5, 0.5), (0.11, 1, 1), (0.34, 1, 1), (0.65,0, 0),
                         (1, 0, 0))}