У меня есть фрейм данных Pandas, который содержит столбец с данными 'year' и столбец с данными 'count'. Существует также столбец, содержащий переменную категории. Не в каждой категории есть данные за каждый год. Я хотел бы построить массив гистограмм, один над другим, используя общую ось х (год). Код, который я написал, почти работает, за исключением оси 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 баров каждой категории строятся независимо от значения на оси х. Предположительно, причина построения только 5 баров в том, что в последней категории были данные только за 5 лет. Еще большая проблема заключается в том, что данные, представленные для других категорий, не сопоставлены с правильным годом. Я искал решения и пробовал различные модификации, но, похоже, ничего не работает.
Любые предложения по решению этой проблемы будут приветствоваться.