Вот несколько указателей, с которых можно начать.
Допустим, у вас есть ваш фрейм данных как df
, и вы хотите построить ItemStatus
ячейки для Phase2
:
df = df[df['ItemPhase'] == 'Phase2']
total = df['ItemStatus'].count()
Первое, что вы можете построить, это пунктирная полоса с количеством предметов.Если каждая ячейка status имеет высоту 1.0
(для разделения на Complete и WIP проценты), мы можем выделить что-то вроде 40% (height=1.4
) большедля метки.
ax.bar(0, 1.4, width=1, edgecolor='black', lw=1, ls='dotted', color="white")
Теперь давайте построим основную часть, вам нужен первый бар, который идет от 0
до частоты ItemStatus == WIP
, и второй бар, который начинается с этой частоты и идет вверх.к одному.Вы можете получить каждый счетчик состояний с помощью value_counts
и разделить на total
, чтобы получить проценты.
bottom = 0
for i, s in enumerate(df['ItemStatus'].value_counts().iteritems()):
label, count = s
freq = count / float(total)
r, = ax.bar(0, freq, width=1, bottom=bottom, color=bg[i], edgecolor='black', lw=3)
ax.text(r.get_x() + r.get_width()/2.,
r.get_y() + r.get_height()/2.,
'{}% ({}) Items {}'.format(int(freq * 100), count, label),
ha="center", va="center", color=fg[i])
bottom += freq
Теперь вам просто нужна метка n Items
.Вы можете использовать самые последние гистограммы r
координаты, чтобы правильно отцентрировать его.
ax.text(r.get_x() + r.get_width()/2., 1.2,
'{} Items'.format(total),
ha="center", va='center', color='black')
И вот что вы получите
Теперь вам нужно:
- найти какой-нибудь хороший
pandas
способ перебрать все ячейки - использовать информацию о дате для оси x
- добавить дополнительныеэтикетки типа
Phase x
, Item Status
и т. д.