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.

Agrupa el diagrama de dispersión por color a partir del diccionario en matplotlib (Python).

Tengo un diccionario de datos que me gustaría representar gráficamente. Mi diccionario está estructurado actualmente de la siguiente manera: (# = algún número)

data = { '15': [{'x': #, 'y': #}, {'x': #, 'y': #}, etc..], '16': [{'x': #, 'y': #}, {'x': #, 'y': #}, etc..], '17': [{'x': #, 'y': #}, {'x': #, 'y': #}, etc..] }

En este momento estoy recorriendo cada una de las claves del diccionario y agregando los valores de x e y a dos arreglos, luego grafico x e y.

fig, ax = plt.subplots()
ax.scatter(x, y)
plt.show()

Aún así, me gustaría representar todos estos puntos x e y, pero colorear/separar los puntos por la clave de la cual provienen.

Para este ejemplo de diccionario, me gustaría tener una leyenda en la gráfica con puntos de diferentes colores correspondientes a las categorías: ’15’, ’16’, ’17’.

He buscado algunos recursos en línea, específicamente este enlace: https://www.kite.com/python/answers/how-to-color-a-scatter-plot-by-category-using-matplotlib-in-python

Y he intentado separar de la siguiente manera, pero no creo que esta sea la dirección correcta:

pd.DataFrame(data)
pd.DataFrame.groupby(list(data.keys()))
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el gráfico deseado con diferentes colores para diferentes categorías, puedes usar la biblioteca pandas para agrupar los datos por las claves del diccionario y recorrer cada grupo para trazar los valores correspondientes de x y y con un color diferente. Aquí tienes un ejemplo de fragmento de código:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    data = { '15': [{'x': 1, 'y': 2}, {'x': 2, 'y': 4}, {'x': 3, 'y': 1}],
             '16': [{'x': 4, 'y': 3}, {'x': 1, 'y': 5}, {'x': 2, 'y': 2}],
             '17': [{'x': 3, 'y': 4}, {'x': 4, 'y': 2}, {'x': 1, 'y': 3}]}
    
    df = pd.DataFrame([(k, d['x'], d['y']) for k, v in data.items() for d in v],
                      columns=['categoría', 'x', 'y'])
    grupos = df.groupby('categoría')
    
    fig, ax = plt.subplots()
    
    colores = ['r', 'g', 'b'] # especifica un color para cada categoría
    for i, (nombre, grupo) in enumerate(grupos):
        ax.scatter(grupo['x'], grupo['y'], color=colores[i], label=nombre)
    
    ax.legend()
    plt.show()
    

    En este código, primero convertimos el diccionario en un DataFrame de pandas con columnas ‘categoría’, ‘x’ y ‘y’, iterando sobre cada par clave-valor en el diccionario y aplanando los diccionarios dentro de las listas de valores. Luego agrupamos el DataFrame por la columna ‘categoría’ usando el método groupby.

    Finalmente, recorremos cada grupo, trazamos los valores correspondientes de x y y con un color diferente (especificado por la lista ‘colores’) y agregamos una etiqueta a la leyenda. El gráfico resultante debería tener puntos de diferentes colores para cada categoría, con una leyenda que muestra los nombres de las categorías.

Comments are closed.