Используя базовый пример 2 колледжа, я сделал то, что вы хотели, суммируя различия в поступлении из года в год поверх абсолютных значений этих поступлений. Если вы делаете это для нескольких колледжей, очевидно, что вы захотите сделать это в цикле, чтобы вам не приходилось явно создавать каждый бар. Это решение должно дать вам инструменты, необходимые для создания того, что вы хотите. Я бы добавил, что в качестве средства сбора информации я не считаю этот график очень полезным. Лично я просто представляю поступление из года в год и позволяю глазам понять, насколько они разные, или наклеить ярлыки, которые обозначают разницу между годами.
import pandas as pd
from matplotlib import pyplot as plt
df = pd.DataFrame({'college1' : [0.14, 0.1, 0.12, 0.07],
'college2' : [0.14, 0.16, 0.18, 0.12]}).T
df.columns = ['today', '5years', '10years', '15years']
width = 0.5
#plot the today bars
p1 = plt.bar([1, 4], df['today'], width, color =['#0247fe', '#175d1e'])
#plot the difference bars
p2 = plt.bar([1.5, 4.5], df['today']- df['5years'], width,
bottom=df['5years'], color=['#6363ff', '#427741'])
p3 = plt.bar([2, 5], df['today']- df['10years'], width,
bottom = df['10years'], color = ["#8d81ff", "#679164"])
p4 = plt.bar([2.5, 5.5], df['today']- df['15years'], width,
bottom = df['15years'], color=["#ae9fff", "#8cac88"])
#other controls
plt.xticks([1.25, 1.75, 2.25, 2.75, 4.25, 4.75, 5.25, 5.75], ['c1 today', '5yearDiff', '10yearDiff', '15yearDiff','c2 today', '5yearDiff', '10yearDiff', '15yearDiff'],
rotation='vertical')
plt.ylabel("Admissions")
plt.ylim(0, 0.2)
plt.xlim(0.75, 6)
plt.gcf().set_size_inches(8, 8)
plt.subplots_adjust(bottom=0.2)
plt.show()
