data = np.array([a, b, c, d])
bottom = np.cumsum(data, axis=0)
colors = '#ff3333', '#33ff33', '#3333ff', '#33ffff'
plt.bar(ind, data[0], color=colors[0])
for j in range(1, data.shape[0]):
    plt.bar(ind, data[1], color=colors[j], bottom=bottom[i - 1])
Более эффективная гистограмма с накоплением matplotlib - как рассчитать нижние значения