Trazado de un gráfico de barras apiladas

3 minutos de lectura

Avatar de usuario de Kuzen
Kuzen

Estoy tratando de crear un gráfico de barras apiladas con pandas que replique la imagen, todos mis datos están separados de esa hoja de cálculo de Excel.

ingrese la descripción de la imagen aquí

No puedo entender cómo hacer un marco de datos para él como se muestra en la imagen, ni puedo entender cómo hacer el gráfico de barras apiladas. Todos los ejemplos que ubico funcionan de manera diferente a lo que estoy tratando de crear.

Mi marco de datos es un csv de todos los valores reducidos a los siguientes con un marco de datos de pandas.

      Site Name    Abuse/NFF
0    NORTH ACTON       ABUSE
1    WASHINGTON         -
2    WASHINGTON        NFF
3    BELFAST            -
4    CROYDON            - 

Me las arreglé para contar los datos con totales y obtener recuentos individuales para cada sitio, simplemente parece que no puedo combinarlos en una forma de gráfico.

Realmente agradecería una orientación sólida.

Código completo, muchas gracias por la ayuda para completar.

test5 = faultdf.groupby(['Site Name', 'Abuse/NFF'])['Site Name'].count().unstack('Abuse/NFF').fillna(0)

test5.plot(kind='bar', stacked=True)

  • Nota para los lectores: si está recibiendo la KeyError relacionado con el índice al probar la respuesta aceptada, use el código completo aquí en la pregunta.

    – Kobe John

    21 de diciembre de 2016 a las 5:04


avatar de usuario de chucklukowski
chucklukowski

¿Está recibiendo errores, o simplemente no está seguro de por dónde empezar?

%pylab inline
import pandas as pd
import matplotlib.pyplot as plt

df2 = df.groupby(['Name', 'Abuse/NFF'])['Name'].count().unstack('Abuse/NFF').fillna(0)
df2[['abuse','nff']].plot(kind='bar', stacked=True)

gráfico de barras apiladas

  • que produce esto i.imgur.com/hocPgWg.jpg lo cual no es del todo correcto, necesito que la parte apilada sea el conteo de la columna abuse/nff para cada sitio. No recibo errores, solo estoy luchando para comenzar. Saludos por la respuesta.

    – Kuzen

    2 mayo 2014 a las 15:25


  • He actualizado mi respuesta para incluir el [‘Abuse/NFF’] parte después de la función groupby. Agregar esto significa que la columna Abuso será el único valor agregado (contado en este ejemplo).

    – chucklukowski

    2 mayo 2014 a las 15:43

  • Lamentablemente, no funciona, es básicamente el mismo gráfico ahora pero sin estar apilado, sin errores, sin leyenda, básicamente sin verde. Está contando los totales en lugar de los totales de los valores en las columnas por tienda, si eso tiene sentido.

    – Kuzen

    2 mayo 2014 a las 15:53

  • Otro intento. Si desea ver los espacios en blanco, cambie el comienzo de la última línea a… df2.plot(

    – chucklukowski

    2 mayo 2014 a las 18:39

  • Saludos por otra fiesta, pero aún no hay alegría. Pondré el código en mi pregunta anterior, obteniendo un error. Error de clave: “[‘ABUSE’ ‘NFF’ ‘-‘] no en el índice “he hecho ajustes en el código para que coincidan con mi marco de datos, pero parece que no puedo hacer que funcione, también quiero – en los resultados, necesito cambiar – para significar defectuoso, simplemente no lo logré.

    – Kuzen

    2 mayo 2014 a las 19:06

Avatar de usuario de Kyofa
Kyofa

eso debería ayudar

df.groupby(['NFF', 'ABUSE']).size().unstack().plot(kind='bar', stacked=True)

Avatar de usuario de Rafael José González de Gouveia
Rafael José González de Gouveia

Tal vez puedas usar función de tabulación cruzada de pandas

test5 = pd.crosstab(index=faultdf['Site Name'], columns=faultdf['Abuse/NFF'])

test5.plot(kind='bar', stacked=True)

Si desea cambiar el tamaño de la trama, use arg figsize

df.groupby(['NFF', 'ABUSE']).size().unstack()
      .plot(kind='bar', stacked=True, figsize=(15, 5))

from matplotlib import cm
cmap = cm.get_cmap('Spectral') # Colour map (there are many others)

df.plot(kind='bar', stacked=True, figsize=(20, 10), cmap=cmap, edgecolor="None")
plt.show()

Esto también evitará colores duplicados en la leyenda de su gráfico de barras.

¿Ha sido útil esta solución?