我有一个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年的数据。更大的问题是,针对其他类别绘制的数据未针对正确的年份绘制。我一直在寻找解决方案,并尝试了各种修改,但似乎没有任何效果。
任何欢迎您解决此问题的建议。
答案 0 :(得分: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)