Похоже ли это на то, что вы хотите?
Вы можете сделать это sh, вручную нарисовав 'блоки' с помощью matplotlib.patches
, это просто требует дополнительных манипуляций, чтобы сделать это алгоритмически. Вот полный пример с использованием данных, представленных в вопросе
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import numpy as np
import pandas as pd
t20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120)]
for i in range(len(t20)):
r, g, b = t20[i]
t20[i] = (r / 255., g / 255., b / 255.)
fig, ax = plt.subplots(1)
df['Time'] = pd.to_datetime(df['Time'])
df = df.sort_values('Time')
cat = df['Category'].unique()
cidx = dict(zip(cat, range(len(cat))))
mw = max(df['Points'])
names = list(df['Team Name'].unique())
nt = len(names)
h = 0.5
hs = [0]*3
for ii in range(len(df.index)):
w = float(df['Points'].iloc[ii])/mw
idx = names.index(df['Team Name'].iloc[ii])
r = Rectangle((idx - w/2.0, hs[idx]), w, h, color=t20[cidx[df['Category'].iloc[ii]]])
hs[idx] += 0.5
ax.add_patch(r)
plt.xlim([-0.5, len(names)-0.5])
plt.ylim([0, max(hs)+3])
plt.xticks(range(len(names)), names)
plt.show()
Я использовал первые 4 цвета в палитре tableau на случай, если вы заинтересованы.
Редактировать
Вы можете добавить легенду со строкой
plt.legend(handles=[Patch(facecolor=t20[ii], label=cat[ii]) for ii in range(len(t20))])
, если включен дополнительный импорт Patches
из matplotlib.patches
, то есть
from matplotlib.patches import Rectangle, Patch
А на выходе будет