#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()