es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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(…)?

Tags:  , ,

Answer

  1. Avatar for 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 objeto Axes, que se obtiene llamando a plt.subplots() o fig.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 de plt.legend() para especificar qué objetos deben incluirse en la leyenda. En tu caso, puedes crear una lista de objetos Line2D, que representan los puntos en el gráfico de dispersión, y pasarlos a plt.legend(). Aquí tienes un ejemplo:

    import matplotlib.pyplot as plt
    from matplotlib.lines import Line2D
    
    colmap = {
        "domestic": "blue",
        "cheetah": "red",
        "leopard": "green",
        "tiger": "black"
    }
    
    colours = [colmap[i] for i in y_train]
    
    fig, ax = plt.subplots(figsize=[15, 5])
    sc = ax.scatter(X_train[:,0], X_train[:,2], c=colours)
    ax.set_xlabel('weight')
    ax.set_ylabel('height')
    ax.grid()
    
    # Crear handles personalizados para la leyenda
    handles = [Line2D([0], [0], marker='o', color='w', label=k, markerfacecolor=v, markersize=10)
               for k, v in colmap.items()]
    
    ax.legend(handles=handles)
    plt.show()
    

    En este ejemplo, creamos un handle de leyenda personalizado para cada etiqueta en el diccionario colmap utilizando Line2D. Luego pasamos estos handles a ax.legend() para crear una leyenda con los colores correctos. Ten en cuenta que ahora utilizamos el objeto ax 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.

Comments are closed.