¿La leyenda de Matplotlib está mapeada con el color?
Estoy muy confundido/a sobre matplotlib en general. Normalmente solo uso import matplotlib.pyplot as plt.
Y luego hago todo como plt.figure(), plt.scatter(), plt.xlabel(), plt.show(), etc.
Pero luego busco en Google cómo hacer algo como mapear la leyenda con un color y obtengo todos estos ejemplos que incluyen ax. Pero está plt.legend() y el ejemplo en la documentación de matplotlib solo muestra plt.legend(handles) pero no te muestra qué se supone que deben ser los handles. Y si quiero hacer lo del ax, entonces tengo que volver a escribir todo mi código porque quería usar plt ya que es más sencillo.
Aquí está mi código:
import matplotlib.pyplot as plt
colmap = {
“domestic”: “blue”,
“cheetah”: “red”,
“leopard”: “green”,
“tiger”: “black”
}
colours = []
for i in y_train:
colours.append(colmap[i])
plt.figure(figsize= [15,5])
plt.scatter(X_train[:,0], X_train[:,2],c=colours)
plt.xlabel(‘weight’)
plt.ylabel(‘height’)
plt.grid()
plt.show()
Ahora quiero agregar una leyenda que simplemente muestre los colores igual que en mi diccionario. Pero si hago:
plt.legend([“domestic”,”cheetah”,”leopard”,”tiger”])
solo muestra “domestic” en la leyenda y el color es rojo, lo cual en realidad no coincide con cómo lo he codificado con colores. ¿Hay alguna forma de hacer esto sin tener que volver a escribir todo con lo del “ax”? Y si no, ¿cómo adapto esto a ax? ¿Simplemente escribo ax = plt.scatter(…)?
davy.ai
Matplotlib puede resultar confuso al principio, ya que hay varias formas de lograr el mismo resultado. En tu ejemplo, estás utilizando el módulo
pyplot
de Matplotlib, que proporciona una interfaz sencilla para crear figuras, gráficos y otros gráficos. Sin embargo, para una personalización más avanzada, es posible que necesites utilizar el objetoAxes
, que se obtiene llamando aplt.subplots()
ofig.add_subplot()
. Esto te permite tener un mayor control sobre los gráficos individuales y sus propiedades.En cuanto a la leyenda, puedes utilizar el parámetro
handles
deplt.legend()
para especificar qué objetos deben incluirse en la leyenda. En tu caso, puedes crear una lista de objetosLine2D
, que representan los puntos en el gráfico de dispersión, y pasarlos aplt.legend()
. Aquí tienes un ejemplo:En este ejemplo, creamos un handle de leyenda personalizado para cada etiqueta en el diccionario
colmap
utilizandoLine2D
. Luego pasamos estos handles aax.legend()
para crear una leyenda con los colores correctos. Ten en cuenta que ahora utilizamos el objetoax
para crear el gráfico de dispersión y podemos acceder a sus propiedades a través de sus métodos (set_xlabel()
,set_ylabel()
, etc.).¡Espero que esto te ayude! Recuerda que Matplotlib tiene una curva de aprendizaje pronunciada pero es muy poderoso, así que sigue practicando y experimentando.