删除色彩映射的一部分

时间:2016-02-29 22:24:01

标签: python matplotlib plot graphics

我非常喜欢" RdBu_r" colormap,但我想剪掉蓝色和红色之间的白色部分。有一个简单的方法吗?

1 个答案:

答案 0 :(得分:7)

是的,但在您的情况下,可能更容易制作在蓝色和红色之间进行插值的色彩映射。

例如:

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

cmap = LinearSegmentedColormap.from_list('name', ['red', 'blue'])

fig, ax = plt.subplots()
im = ax.imshow(np.random.random((10, 10)), cmap=cmap)
fig.colorbar(im)
plt.show()

enter image description here

请注意,如果您想要一个不是HTML颜色名称的红色阴影,您可以替换确切的RGB值。

然而,如果你确实想要"切断中间"在另一个色彩映射表中,您可以在不包含中间色的范围内对其进行评估并创建新的色彩映射表:

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

# Remove the middle 40% of the RdBu_r colormap
interval = np.hstack([np.linspace(0, 0.3), np.linspace(0.7, 1)])
colors = plt.cm.RdBu_r(interval)
cmap = LinearSegmentedColormap.from_list('name', colors)

# Plot a comparison of the two colormaps
fig, axes = plt.subplots(ncols=2)
data = np.random.random((10, 10))

im = axes[0].imshow(data, cmap=plt.cm.RdBu_r, vmin=0, vmax=1)
fig.colorbar(im, ax=axes[0], orientation='horizontal', ticks=[0, 0.5, 1])
axes[0].set(title='Original Colormap')

im = axes[1].imshow(data, cmap=cmap, vmin=0, vmax=1)
fig.colorbar(im, ax=axes[1], orientation='horizontal', ticks=[0, 0.5, 1])
axes[1].set(title='New Colormap')

plt.show()

enter image description here