Why not just to make a stacked bar plot? Somethin like this:
res = df.T.drop_duplicates().T
# df here is your source dataframe
fig, ax = plt.subplots()
for name, group in res.groupby("PVR Group"):
ax.bar((group['min_x']+(group['max_x']-group['min_x'])/2),
group['max_y']-group['min_y'],
width=(group['max_x']-group['min_x']),
bottom=group['min_y'],
label=name,
edgecolor="black")
ax.legend()
plt.show()
I believe you could adjust the design to meet your taste.