Configuração do intervalo da barra de cores matplotlib (intervalo maior que os valores plotados)

Quero plotar alguns dados (entre 0 e 18), mas quero que a barra de cores mostre um intervalo entre 0 e 40. Depois de passar por vários exemplos on-line, não tenho idéia de como conseguir o que preciso!

Aqui está um exemplo simples:

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)

Eu tentei isso também:

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

Mas continuo obtendo a mesma imagem, com uma barra de cores variando de 0 a 20! Eu sei que eu poderia usar oset_over método, mas não quero obter uma única cor ... Quero todo o meu intervalo de cores (conforme definido emcores, de 0 a 40) para aparecer!

Obrigado pela ajuda!

questionAnswers(1)

yourAnswerToTheQuestion