1

我做了这个颜色条:

import matplotlib.pyplot as plt
import matplotlib as mpl

fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)

cmap = mpl.cm.viridis
norm = mpl.colors.Normalize(vmin=0, vmax=1)

cb1 = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
                                norm=norm,
                                orientation='horizontal')
cb1.set_label('Some Units')
fig.show()

在此处输入图像描述

但我正在尝试使用 plt.contourf 将此颜色条应用于此随机变量的颜色图(我需要将 plt.contourf 用于我的实际数据集,所以我不能使用 plt.imshow。我知道 plt.imshow 的颜色图正确,但是在这种情况下,我不能使用 plt.imshow)。

data = np.random.rand(100,200,144)

x = plt.contourf(data[-1],cmap=cmap,norm=norm)
plt.colorbar(x)
plt.show()

在此处输入图像描述

为什么颜色条不是从 0 到 1 而是从 0 到 1.05 的间隔?如何复制创建的颜色条 (cb1) 以将其应用于数据?

4

1 回答 1

1

plt.contourf()似乎做了一些四舍五入以使其水平具有“不错”的价值。您可以显式设置您的级别,例如levels=np.linspace(0, 1, 11)获取10区域(11区域边缘)。

import numpy as np
import matplotlib as mpl

cmap = mpl.cm.viridis
norm = mpl.colors.Normalize(vmin=0, vmax=1)

data = np.random.rand(100, 200, 144)
cntr = plt.contourf(data[-1], cmap=cmap, norm=norm, levels=np.linspace(0, 1, 11))
plt.colorbar(cntr)
plt.show()

示例图

于 2021-03-01T15:07:35.290 回答