Como é determinada a ordem dos itens na legenda matplotlib?

Estou tendo que reordenar itens de uma lenda, quando acho que não deveria. Eu tento:

from pylab import *
clf()
ax=gca()
ht=ax.add_patch(Rectangle((1,1),1,1,color='r',label='Top',alpha=.01))
h1=ax.bar(1,2,label='Middle')
hb=ax.add_patch(Rectangle((1,1),1,1,color='k',label='Bottom',alpha=.01))
legend()
show()

e termine com Bottom acima do Middle. Como posso obter o pedido certo? Não é determinado pela ordem de criação?

Atualização: O seguinte pode ser usado para forçar o pedido. Eu acho que essa pode ser a maneira mais simples de fazer isso, e isso parece estranho. A questão é o que determina a ordem original?

hh=[ht,h1,hb]
legend([ht,h1.patches[0],hb],[H.get_label() for H in hh])

questionAnswers(4)

yourAnswerToTheQuestion