matplotlib 如何替换代表两个最小值的色彩Map表的颜色

8mmmxcuj  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(106)

我在matplotlib中绘制了一个动画等高线图,颜色条在每一帧都会改变。(我使用的是发散的色彩Map表),为此我使用了奇数个级别。问题是,当我这样做时,即使色彩Map表的中心颜色(cm.seismic)为白色,此颜色未出现在色彩Map表中。我希望能够替换最小值的颜色(浅红色和浅蓝色)乘以白色,这样就没有一个中心层的颜色是白色(零),我有两个(两个最小的值)。

k0pti3hp

k0pti3hp1#

您可以提供一个颜色列表,而不是提供一个色彩Map表。该列表可以从给定的色彩Map表中计算出来,中间的颜色可以显式地设置为白色。
下面是一个示例:

import matplotlib.pyplot as plt
import numpy as np

x = y = np.linspace(-3.0, 3.01, 100)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X ** 2 - Y ** 2)
Z2 = np.exp(-(X - 1) ** 2 - (Y - 1) ** 2)
Z = (Z1 - Z2) * 2

num_levels = 9
colors = plt.cm.seismic(np.linspace(0, 1, num_levels + 1))
colors[num_levels // 2] = [1, 1, 1, 1] # set to white
colors[num_levels // 2 + 1] = [1, 1, 1, 1]

fig, ax1 = plt.subplots(figsize=(10, 5))
CS = ax1.contourf(X, Y, Z, num_levels, colors=colors, origin='lower')
cbar = fig.colorbar(CS, ax=ax1)
plt.show()

相关问题