Una barra de color (colorbar) es la leyenda de una escala de colores: muestra qué valor corresponde a cada color en gráficos como mapas de calor, gráficos de contorno o gráficos de dispersión coloreados según una variable numérica.
Pasa el objeto que devuelve la función del gráfico (imshow, scatter, contourf, pcolormesh…) a fig.colorbar o plt.colorbar. Los colores de la barra se toman del colormap de ese objeto.
import numpy as np
import matplotlib.pyplot as plt
data = np.random.default_rng(1).random((10, 10))
fig, ax = plt.subplots()
im = ax.imshow(data, cmap = "viridis")
fig.colorbar(im, ax = ax)
# plt.show()

Barra de color para un gráfico de dispersión
En un gráfico de dispersión colorea los puntos según una variable numérica con el argumento c y un colormap.
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(2)
x, y = rng.normal(size = (2, 100))
fig, ax = plt.subplots()
sc = ax.scatter(x, y, c = x + y, cmap = "plasma")
fig.colorbar(sc, ax = ax)
# plt.show()

Agrega un título a la barra de color con el argumento label o con set_label, que también admite propiedades de texto como size o rotation.
import numpy as np
import matplotlib.pyplot as plt
data = np.random.default_rng(1).random((10, 10))
fig, ax = plt.subplots()
im = ax.imshow(data)
cbar = fig.colorbar(im, ax = ax)
cbar.set_label("Temperatura (ºC)", size = 12)
# plt.show()

Utiliza location ("right", "left", "top" o "bottom") para colocar la barra de color, shrink para hacerla más corta, aspect para cambiar la relación entre su longitud y su anchura y pad para establecer la distancia al gráfico.
import numpy as np
import matplotlib.pyplot as plt
data = np.random.default_rng(1).random((10, 10))
fig, ax = plt.subplots()
im = ax.imshow(data)
fig.colorbar(im, ax = ax, location = "bottom",
shrink = 0.8, aspect = 30, pad = 0.08)
# plt.show()

Establece la posición de los ticks con el argumento ticks y reemplázalos por etiquetas personalizadas con set_ticklabels. El argumento extend agrega triángulos en los extremos para indicar que hay valores fuera del rango.
import numpy as np
import matplotlib.pyplot as plt
data = np.random.default_rng(1).random((10, 10))
fig, ax = plt.subplots()
im = ax.imshow(data, vmin = 0, vmax = 1)
cbar = fig.colorbar(im, ax = ax, ticks = [0, 0.5, 1], extend = "both")
cbar.set_ticklabels(["Bajo", "Medio", "Alto"])
# plt.show()

Para agrupar los valores en intervalos con un color cada uno crea un BoundaryNorm con los límites de los intervalos y pásalo al argumento norm.
import numpy as np
import matplotlib.pyplot as plt
data = np.random.default_rng(1).random((10, 10))
import matplotlib as mpl
bounds = [0, 0.25, 0.5, 0.75, 1]
norm = mpl.colors.BoundaryNorm(bounds, plt.get_cmap("viridis").N)
fig, ax = plt.subplots()
im = ax.imshow(data, cmap = "viridis", norm = norm)
fig.colorbar(im, ax = ax, ticks = bounds)
# plt.show()

Cuando varios subplots comparten la misma escala, establece los mismos vmin y vmax en todos ellos y pasa la lista de ejes a fig.colorbar. La barra de color se colocará junto a todos ellos.

import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(3)
fig, axs = plt.subplots(1, 3, figsize = (8, 3.5))
for ax in axs:
im = ax.imshow(rng.random((8, 8)), vmin = 0, vmax = 1)
fig.colorbar(im, ax = axs, shrink = 0.8)
# plt.show()
Consulta la lista completa de colormaps de matplotlib para elegir los colores de la escala o aprende a crear un mapa de calor en matplotlib.
También te puede interesar