从熊猫数据框绘制堆积的条形图

时间:2018-04-18 00:35:32

标签: python pandas dataframe matplotlib plot

我有数据框:

payout_df.head(10)

enter image description here

复制以下excel图表最简单,最智能,最快捷的方法是什么?

enter image description here

我尝试过不同的方法,但无法将所有内容都放到位。

由于

2 个答案:

答案 0 :(得分:3)

如果您只想要一个堆积条形图,那么一种方法是使用循环绘制数据框中的每一列,并跟踪累积总和,然后将其作为bottom pyplot.bar参数传递{1}}

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)

enter image description here

答案 1 :(得分:2)

除了缺少数据外,我认为以下代码将生成所需的图形

dict={} 
for i in sixcities: #loop through the first list
    dict[i["_id"]]=i["count"]  
    for j in travelcities: #loop through second list
        if j["_id"] == i["_id"]:
            dict[i["_id"]]=j["count"]/(dict[i["_id"]]) #ratio

我不知道如何重现这种奇特的x轴样式。此外,您的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() 列必须是日期时间,否则pd.Grouper无法工作(available frequencies)。