Tengo dataframe:
payout_df.head(10)
¿Cuál sería la forma más fácil, inteligente y rápida de replicar el siguiente gráfico de Excel?
He intentado diferentes enfoques, pero no pude poner todo en su lugar.
Gracias
Si solo desea un gráfico de barras astackdas, una forma es usar un bucle para trazar cada columna en el dataframe y simplemente hacer un seguimiento de la sum acumulada, que luego pasa como el argumento bottom
de pyplot.bar
import pandas as pd import matplotlib.pyplot as plot # If it's not already a datetime payout_df['payout'] = pd.to_datetime(payout_df.payout) cumval=0 fig = plt.figure(figsize=(12,8)) for col in payout_df.columns[~payout_df.columns.isin(['payout'])]: plt.bar(payout_df.payout, payout_df[col], bottom=cumval, label=col) cumval = cumval+payout_df[col] _ = plt.xticks(rotation=30) _ = plt.legend(fontsize=18)
Además de la falta de datos, creo que el siguiente código producirá el gráfico deseado
import pandas as pd import matplotlib.pyplot as plt df.payout = pd.to_datetime(df.payout) grouped = df.groupby(pd.Grouper(key='payout', freq='M')).sum() grouped.plot(x=grouped.index.year, kind='bar', stacked=True) plt.show()
No sé cómo reproducir este elegante estilo de eje x. Además, su columna de payout
debe ser datetime, de lo contrario pd.Grouper no funcionará ( frecuencias disponibles ).