Установка диапазона цветовых полос matplotlib (диапазон больше, чем отображаемые значения)

Я хочу отобразить некоторые данные (от 0 до 18), но я хочу, чтобы цветная полоса показывала диапазон от 0 до 40. После просмотра нескольких онлайн-примеров я понятия не имею, как добиться того, что мне нужно!

Вот простой пример:

import matplotlib.pyplot as plt
import numpy as np

rd = np.random.rand(40,100) # random samples from a uniform distribution over [0, 1]
surface = 18 * rd           # maximum value will be 18

fig = plt.figure()
ax = fig.add_subplot(111)
cores = ax.contourf(surface[:], vmin=0, vmax=40)

cbar = plt.colorbar(cores)

Я тоже пробовал это:

cbar = plt.colorbar(cores, extend='both', extendrect=True)
cbar.set_clim(0, 40.)

Но я продолжаю получать одно и то же изображение с цветовой полосой от 0 до 20! Я знаю, что мог бы использовать метод set_over, но я не хочу получать один цвет... Я хочу, чтобы отображался весь мой цветовой диапазон (как определено в cores, от 0 до 40)!

введите описание изображения здесь

Спасибо за вашу помощь!


person carla    schedule 10.03.2017    source источник


Ответы (1)


Наконец-то мне удалось это решить. Вместо vmin и vmax я должен передать ключевое слово для управления отрисовываемыми уровнями, например:

import matplotlib.pyplot as plt
import numpy as np

rd = np.random.rand(40,100)
surface = 18 * rd           # maximum value will be 18

fig = plt.figure()
ax = fig.add_subplot(111)

cores = ax.contourf(surface[:], levels=range(41))
cbar = plt.colorbar(cores)

plt.show()

И я получаю изображение, которое хотел: введите здесь описание изображения

person carla    schedule 10.03.2017
comment
Спасибо большое! Это сводило меня с ума; Мне нравится, насколько мощным является matplotlib, но количество недокументированных функций и возникающее в результате неожиданное поведение могут быть совершенно бесит. - person Luke Davis; 16.10.2017