Python Matplotlib 色图

4
我使用“jet”色标来绘制我的图形。但是,我希望将较低的值显示为白色,而这个色标从蓝色到红色变化。我也不想使用另一个色标,因为我需要这个颜色范围...... 我尝试使用白色值的范围来使我的色标与“jet”相同,但这太困难了。 请有人帮帮我吗? 谢谢
3个回答

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()

你将得到以下内容: 带白色的喷气火焰配色

8

有另一种方法可以在不定义新的颜色条的情况下完成相同的操作。您可以使用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()

6

调色板页面上,有一个很好的例子。通过查看我的计算机上的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))}

谢谢,但是我该如何为最低级别添加白色?我不太理解三位数字以及在哪里可以找到它们。例如,如果我想将颜色条从值0到10更改,我需要添加其他三位数字吗? - gwen
你的调色板的最低级别定义在每个红、绿、蓝元组的第一行中,其中元组的第一个元素表示伽马值(从0到1)(类比于颜色条中的“位置”)。 - carla
正如E先生所写,您可以在_cm.py中找到生成matplotlib colormaps的字典。该文件存储在Python文件夹内,通常位于以下路径:C:\Python##\Lib\site-packages\matplotlib\。 - carla
对于其他人:您也可以使用“_segmentdata”属性访问段数据。因此,mpl.cm.jet._segmentdata - 1313e

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接