Оригинал:
>>> from matplotlib import pylab
>>> data1 = [0.3, 0.9, 0.1]
>>> data2 = [3.0, 0.2, 0.5]
>>> colors = ['b','magenta','cyan']
>>> data_list = [data1,data2]
>>> num_bars = len(data_list)
>>> for i, d in enumerate(data_list):
... for j,value in enumerate(sorted(d,reverse=True)):
... c = colors[j]
... obj_list = pylab.bar(i*0.4,value,width=0.8/num_bars,color=c)
...
Вы можете нарисовать их по порядку, например, или сделать zorder
Edit:
Я немного обострил это. По сути, ключ заключается в сортировке данных для каждого бара от наибольшего к наименьшему до вызова бара. Но вы можете вернуться позже и выполнить set_zorder и т. Д. Фактически я сохраняю объекты, возвращенные из bar (), на тот случай, если вы захотите их проверить.
import numpy as np
from pylab import *
data = [[6.7, 1.5, 4.5], [2.0, 3.25, 5.7]]
w = 0.5
xlocations = np.array(range(len(data)))+w
colors = ['r','b','cyan']
oL = list()
for x,d in zip(xlocations, data):
for c,value in zip(colors, sorted(d,reverse=True)):
b = bar(x, value, width=w, color=c)
oL.extend(b)
show()