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.
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)
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)
-
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
Kyofa
eso debería ayudar
df.groupby(['NFF', 'ABUSE']).size().unstack().plot(kind='bar', stacked=True)
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.
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