我有一个Pandas dataframe,其中包含一个包含'year‘数据的列和一个包含'count’数据的列。还有一个包含'category‘变量的列。并不是每个类别都有每年的数据。我想绘制一个条形图数组,一个在另一个之上,使用一个公共的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年。但是,无论x轴上的值是多少,似乎只绘制了每个类别的前5个条形图。据推测,之所以只绘制了5个条形图,是因为最后一个类别只有5年的数据。一个更大的问题是,为其他类别绘制的数据没有针对正确的年份绘制。我已经寻找了解决方案,并尝试了各种修改,但似乎都不起作用。
任何解决这个问题的建议都将非常受欢迎。
发布于 2019-01-23 22:22:19
尝试以下方法:
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)https://stackoverflow.com/questions/54327324
复制相似问题