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.

¿Cómo puedo dividir el histograma en múltiples gráficos basados en dos columnas?

Tengo problemas con los subplots en pandas. Mi objetivo es crear una serie de histogramas a partir de datos de precisión que he recopilado. Me gustaría trazar estos histogramas en ejes separados según su ‘id’ y ‘código de barras’. Tengo 2 códigos de barras y un total de 5 variantes de id, por lo que me gustaría trazar 10 histogramas. Los datos se ven algo así, excepto que hay alrededor de un millón de filas.

df = pd.DataFrame {‘id’: ‘a’, ‘b’, ‘c’, ‘código de barras’: ‘2’, ‘3’, ‘4’, ‘precisión’: ’99’, ’98’, ’99’}

He intentado:

fig, ax = plt.subplots(5, 2, sharey=’none’, sharex=’none’, figsize=(20,20))
df.groupby(‘id’)[‘precisión’].hist(by=df[‘código de barras’])

Esto solo divide los histogramas por código de barras, así que intenté:

df[‘precisión’].hist(by=df[‘id’, ‘código de barras’])

Lo cual me dio un error de clave para ‘[id, código de barras]’

¿Quizás hay un módulo mejor para hacer esto en lugar de pandas?

Cualquier ayuda sería muy apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de lograr su objetivo de crear múltiples histogramas basados en tanto ‘id’ como ‘barcode’ es utilizar la función groupby de Pandas junto con un bucle para crear subgráficos para cada combinación de ‘id’ y ‘barcode’. Aquí tienes un ejemplo de código que puedes modificar para adaptarlo a tus datos específicos y requisitos de trazado:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # crear datos de muestra
    data = {'id': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
            'barcode': [2, 2, 3, 3, 4, 4, 2, 3, 4],
            'accuracy': [99, 98, 99, 97, 95, 96, 98, 99, 97]}
    df = pd.DataFrame(data)
    
    # obtener combinaciones únicas de id y barcode
    combos = df.groupby(['id', 'barcode'])
    
    # crear subgráficos para cada combinación
    fig, axs = plt.subplots(len(combos), figsize=(10, 15))
    
    # recorrer cada combinación y trazar un histograma en el subgráfico correspondiente
    for i, combo in enumerate(combos):
        ax = axs[i] if len(combos)>1 else axs
        ax.hist(combo[1]['accuracy'])
        ax.set_title(f"id={combo[0][0]}, barcode={combo[0][1]}")
    
    plt.show()
    

    Este código:

    1. Crea datos de muestra similares a tu ejemplo.
    2. Utiliza groupby para agrupar los datos por combinaciones únicas de ‘id’ y ‘barcode’.
    3. Crea un subgráfico para cada combinación de ‘id’ y ‘barcode’ utilizando la función subplots.
    4. Utiliza un bucle para recorrer cada combinación única y trazar un histograma en el subgráfico correspondiente utilizando la función hist.
    5. Establece el título de cada subgráfico para mostrar la combinación actual de ‘id’ y ‘barcode’.

    Puedes modificar los parámetros de la función subplots para ajustar el tamaño y diseño de los subgráficos, y la función hist para cambiar la apariencia de los histogramas. También puedes guardar la figura resultante utilizando la función savefig.

Comments are closed.