Я сделал эту цветовую полосу, но теперь я не могу применить ее к своему контурному графику

#python #matplotlib #jupyter #colorbar

Вопрос:

Я сделал эту цветовую панель:

 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), чтобы применить ее к данным?

Ответ №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()
 

примерный сюжет