Как определяется порядок предметов в легенде matplotlib?

Мне нужно переупорядочить предметы в легенде, когда я не думаю, что должен. Я попробую:

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() 

и в конечном итоге с Нижним выше среднего. Как я могу получить правильный заказ? Не определяется ли заказ на создание?

  • Заполните правый столбец легенды matplotlib
  • Matplotlib: текстовый код цвета в легенде вместо строки
  • Как изменить размер легенды с помощью matplotlib.pyplot
  • увеличьте ширину линии линий легенды в matplotlib
  • Матплотлиб
  • Можно ли добавить строку как элемент легенды в matplotlib
  • Код приводит к неправильному порядку описания легенды

    Обновление. Для принудительного заказа можно использовать следующие. Я думаю, что это может быть самый простой способ сделать это, и это кажется неудобным. Вопрос в том, что определяет первоначальный порядок?

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

  • Получить состояние цветового цикла matplotlib
  • Анимация Matplotlib либо замерзает после нескольких кадров, либо просто не работает
  • Графики Matplotlib: удаление оси, легенд и пробелов
  • построение орбитальных траекторий в python
  • Как добавить текстуры к моим барам и клиньям?
  • Установка (сборка) matplotlib в mac osx lion
  • 4 Solutions collect form web for “Как определяется порядок предметов в легенде matplotlib?”

    Порядок детерминирован, но часть частных кишок поэтому может быть изменена в любое время, см. Здесь код (элементы self.* – это списки добавленных художников, поэтому список ручек сортируется сначала по типу, второй по заказу они были добавлены).

    Если вы хотите явно контролировать порядок элементов в вашей легенде, тогда соберите список обработчиков и меток, как вы делали в своем редактировании.

    Вот быстрый фрагмент для сортировки записей в легенде. Предполагается, что вы уже добавили элементы графика с меткой, например, что-то вроде

     ax.plot(..., label='label1') ax.plot(..., label='label2') 

    а затем основной бит:

     handles, labels = ax.get_legend_handles_labels() # sort both labels and handles by labels labels, handles = zip(*sorted(zip(labels, handles), key=lambda t: t[0])) ax.legend(handles, labels) 

    Это просто простая адаптация из кода, указанного в http://matplotlib.org/users/legend_guide.html

    Следующая функция ищет дескрипторы дескрипторов и меток, сортирует или частично сортирует их в соответствии с заданным списком ( order ):

     def reorderLegend(ax=None,order=None,unique=False): """ Returns tuple of handles, labels for axis ax, after reordering them to conform to the label order `order`, and if unique is True, after removing entries with duplicate labels. """ if ax is None: ax=plt.gca() handles, labels = ax.get_legend_handles_labels() # sort both labels and handles by labels labels, handles = zip(*sorted(zip(labels, handles), key=lambda t: t[0])) if order is not None: # Sort according to a given list (not necessarily complete) keys=dict(zip(order,range(len(order)))) labels, handles = zip(*sorted(zip(labels, handles), key=lambda t,keys=keys: keys.get(t[0],np.inf))) if unique: # Keep only the first of each handle labels, handles= zip(*unique_everseen(zip(labels,handles), key = labels)) ax.legend(handles, labels) return(handles, labels) def unique_everseen(seq, key=None): seen = set() seen_add = seen.add return [x for x,k in zip(seq,key) if not (k in seen or seen_add(k))] 

    Функция в обновленной форме находится в cpblUtilities.mathgraph адресу http://github.com/cpbl

    Цитаты: Кевин (эта страница) и Маркус Ярдерот ( Как удалить дубликаты из списка при сохранении порядка? ).

    Небольшое отклонение от некоторых других игроков. Порядок списка должен иметь ту же длину, что и количество элементов легенды, и указывать новый порядок вручную.

     handles, labels = plt.gca().get_legend_handles_labels() order = [0,2,1] plt.legend([handles[idx] for idx in order],[labels[idx] for idx in order]) 
    Python - лучший язык программирования в мире.