Plot stacked bar chart from pandas data frame

前端 未结 2 580
礼貌的吻别
礼貌的吻别 2021-01-16 06:30

I have dataframe:

payout_df.head(10)

What would be the easiest, smartest and fastest way to replicate the following excel plot?

<
相关标签:
2条回答
  • 2021-01-16 07:04

    Besides the lack of data, I think the following code will produce the desired graph

    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()
    

    I don't know how to reproduce this fancy x-axis style. Also, your payout column must be a datetime, otherwise pd.Grouper won't work (available frequencies).

    0 讨论(0)
  • 2021-01-16 07:28

    If you just want a stacked bar chart, then one way is to use a loop to plot each column in the dataframe and just keep track of the cumulative sum, which you then pass as the bottom argument of pyplot.bar

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 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)
    

    0 讨论(0)
提交回复
热议问题