【问题标题】:Plotting Pandas data as an array of bar chart does not honour sharex = True将 Pandas 数据绘制为条形图数组不符合 sharex = True
【发布时间】:2019-01-23 12:30:09
【问题描述】:

我有一个 Pandas 数据框,其中包含一个包含“年份”数据的列和一个包含“计数”数据的列。还有一个包含“类别”变量的列。并非每个类别都有每年的数据。我想使用一个共同的 x 轴(年份)绘制一组条形图,一个在另一个之上。我编写的代码几乎可以工作,只是 x 轴并非对所有绘图都通用。

代码示例如下。基本上,代码使用 sharex=True 创建一个轴数组,然后逐步遍历每个轴,绘制数据框中的相关数据。

# Define dataframe
myDF = pd.DataFrame({'year':list(range(2000,2010))+list(range(2001,2008))+list(range(2005,2010)),
                     'category':['A']*10 + ['B']*7 + ['C']*5,
                     'count':[2,3,4,3,4,5,4,3,4,5,2,3,4,5,4,5,6,9,8,7,8,6]})

# Plot counts for individual categories in array of bar charts
fig, axarr = plt.subplots(3, figsize = (4,6), sharex = True)

for i in range(0,len(myDF['category'].unique())):
    myDF.loc[myDF['category'] == myDF['category'].unique()[i],['year','count']].plot(kind = 'bar',
                                                                                     ax = axarr[i],
                                                                                     x = 'year',
                                                                                     y = 'count',
                                                                                     legend = False,
                                                                                     title = 'Category {0} bar chart'.format(myDF['category'].unique()[i]))

fig.subplots_adjust(hspace=0.5)

plt.show()

结果截图如下:

我预计 A 类酒吧从 2000 年延伸到 2009 年,B 类酒吧从 2001 年延伸到 2007 年,C 类酒吧从 2005 年延伸到 2009 年。但是,似乎每个类别的前 5 个酒吧无论 x 轴上的值如何,都会绘制。据推测,之所以只绘制 5 个条形图,是因为最后一个类别只有 5 年的数据。一个更大的问题是,为其他类别绘制的数据没有针对正确的年份绘制。我已经搜索了解决方案并尝试了各种修改,但似乎没有任何效果。

非常欢迎任何解决此问题的建议。

【问题讨论】:

    标签: python pandas plot bar-chart


    【解决方案1】:

    尝试以下方法:

    d = myDF.groupby(['year', 'category'])['count'].sum().unstack()
    
    fig, axarr = plt.subplots(3, figsize = (4,6), sharex=True)
    for i, cat in enumerate(d.columns):
        d[cat].plot(kind='bar', ax=axarr[i], title='Category {cat} bar chart'.format(cat=cat))
    
    fig.subplots_adjust(hspace=0.5)
    

    【讨论】:

    • 效果很好!非常感谢。您是否有机会解释为什么第一个版本不起作用,这样我就可以避免将来在类似情况下陷入同样的​​障碍。无论如何,我已将其标记为已接受的答案。
    • 老实说,我不太确定为什么您的方法没有按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2021-01-26
    • 2018-09-28
    • 2019-01-15
    相关资源
    最近更新 更多