Python中的自定义Colormap

Bow*_*Bow 13 python matplotlib colormap

我想在python中创建自己的自定义颜色映射,我查看了一些在线示例并找到了命令

from matplotlib import cm 
import matplotlib.pyplot as plt 
from matplotlib.colors import LinearSegmentedColormap

cdict1 = {'red':   ((0.0, 0.0, 0.0),
                    (0.5, 0.0, 0.1),
                    (1.0, 1.0, 1.0)),

         'green': ((0.0, 0.0, 0.0),
                   (1.0, 0.0, 0.0)),

         'blue':  ((0.0, 0.0, 1.0),
                   (0.5, 0.1, 0.0),
                   (1.0, 0.0, 0.0))
         }

blue_red1 = LinearSegmentedColormap('BlueRed1', cdict1)
plt.imshow(big,interpolation='nearest',  cmap=blue_red1, aspect='auto')
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

通过上面的命令,我得到一个颜色图(红色 - 黑色 - 蓝色),其中红色为最大,蓝色为最小.我想创建一个颜色贴图(黑色 - 白色 - 黑色).有人可以告诉我应该做什么或任何其他方法?

Joe*_*ton 18

对于它的价值,还有一种更简单的方法.

完整的形式LinearSegmentedColormap使您能够在同一个色彩映射中具有"硬"停止和渐变,因此它必然很复杂.但是,对于简单的情况,例如您描述的内容,有一个便利构造函数.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

cmap = LinearSegmentedColormap.from_list('mycmap', ['black', 'white', 'black'])

fig, ax = plt.subplots()
im = ax.imshow(np.random.random((10, 10)), cmap=cmap, interpolation='nearest')
fig.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


tmd*_*son 7

您希望所有三个组件在0和1处均为0,并且所有三个组件在0.5时均为1.所以你有了:

cdict1 = {'red':  ((0.0, 0.0, 0.0),   # <- at 0.0, the red component is 0
                   (0.5, 1.0, 1.0),   # <- at 0.5, the red component is 1
                   (1.0, 0.0, 0.0)),  # <- at 1.0, the red component is 0

         'green': ((0.0, 0.0, 0.0),   # <- etc.
                   (0.5, 1.0, 1.0),
                   (1.0, 0.0, 0.0)),

         'blue':  ((0.0, 0.0, 0.0),
                   (0.5, 1.0, 1.0),
                   (1.0, 0.0, 0.0))
         }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述