首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Pandas数据绘制为条形图数组不支持sharex = True

将Pandas数据绘制为条形图数组不支持sharex = True
EN

Stack Overflow用户
提问于 2019-01-23 20:30:09
回答 1查看 88关注 0票数 0

我有一个Pandas dataframe,其中包含一个包含'year‘数据的列和一个包含'count’数据的列。还有一个包含'category‘变量的列。并不是每个类别都有每年的数据。我想绘制一个条形图数组,一个在另一个之上,使用一个公共的x轴(年份)。我写的代码几乎可以工作,除了x轴并不是所有绘图都通用的。

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

代码语言:javascript
复制
# 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年。但是,无论x轴上的值是多少,似乎只绘制了每个类别的前5个条形图。据推测,之所以只绘制了5个条形图,是因为最后一个类别只有5年的数据。一个更大的问题是,为其他类别绘制的数据没有针对正确的年份绘制。我已经寻找了解决方案,并尝试了各种修改,但似乎都不起作用。

任何解决这个问题的建议都将非常受欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-23 22:22:19

尝试以下方法:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54327324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档