Configuración del rango de la barra de colores matplotlib (rango mayor que los valores trazados)

Quiero trazar algunos datos (entre 0 y 18) pero quiero que la barra de colores muestre un rango entre 0 y 40. Después de ver varios ejemplos en línea, ¡no tengo idea de cómo lograr lo que necesito!

Aquí hay un ejemplo simple:

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)

He intentado esto también:

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

¡Pero sigo obteniendo la misma imagen, con una barra de colores que va de 0 a 20! Sé que podría usar elset_over método, pero no quiero obtener un solo color ... Quiero toda mi gama de colores (como se define encores, de 0 a 40) para aparecer!

¡Gracias por tu ayuda!

Respuestas a la pregunta(1)

Su respuesta a la pregunta