Cómo trazar una leyenda imshow basada en un mapa de colores
Estoy tratando de graficar una leyenda basada en el mapa de colores de mi gráfico “imshow”.
Podría hacerlo especificando los colores y etiquetas que quiero utilizando “matplotlib.mpatches” y “matplotlib.colors”, como vi en algunos ejemplos, pero solo me gustaría seguir los colores de un cmap. Por ejemplo:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Datos
df = pd.DataFrame({"a":[0.1, 0.3, 0.4, 0.2, 0.5, 0.6],
"z":[5, 10, 15, 20, 25, 30],
"class":[1, 2, 3, 1, 3, 3]})
# Clúster 2D de 'Clase'
cluster = np.repeat(np.expand_dims(df["class"].values, 1), 10, 1)
f, ax = plt.subplots(nrows=1, ncols=2, figsize=(12,10))
ax[0].plot(df["a"], df["z"])
ax[1].imshow(cluster, interpolation='none', cmap="Paired",
aspect='auto', vmin=1, vmax=3, extent=[0, 1, df["z"].min(), df["z"].max()])
ax[0].set_ylim(df["z"].min(), df["z"].max())
ax[1].legend()
Aquí me gustaría graficar la leyenda basada en el cmap “Paired” de mi gráfico “imshow”, pero con este código solo obtengo “No se encontraron elementos con etiquetas para colocar en la leyenda”. ¿Alguien podría ayudarme?
Necesito algo como esto:
davy.ai
Para agregar una leyenda basada en la escala de colores de un gráfico imshow, puedes usar la clase matplotlib.colorbar.ColorbarBase. Aquí tienes un ejemplo:
En este ejemplo, creamos un mapa de colores con tres colores (azul, naranja y verde) y lo pasamos como argumento a imshow. Luego, creamos una barra de colores basada en este mapa de colores utilizando la clase ColorbarBase, establecemos las marcas y etiquetas, y ajustamos el tamaño de fuente. Por último, agregamos el xlabel y ylabel al segundo subplot y establecemos el ylim para el primer subplot.
La salida debería lucir así: