Добавление маркеров прокси-легенд в существующую легенду - PullRequest
0 голосов
/ 20 февраля 2019

В документации Matplotlib Legend Guide есть пример того, как создавать прокси-исполнителей специально для легенды.

В этом примере патч создается специально для отображения в легенде.,Затем объект патча передается дескриптору легенды (если я правильно интерпретирую пример).

Мой вопрос заключается в том, что произойдет, если вы уже выполнили несколько экземпляров сюжета, так что в них есть куча вещей:

plt.gca().get_legend_handles_labels()

и вы хотите сделать:

plt.legend()

, а затем добавьте прокси-исполнителей / материал к легенде, отсутствующей на рисунке или оси.

Очень похожий вопрос здесь , с одним ответом, который никогда не был отмеченкак правильно, но кажется, что я ищу.К сожалению, как пользователь с низкой репутацией, я не смог прокомментировать существующий вопрос.Ответ от tacaswell подразумевает, что это можно сделать, но я не могу интерпретировать этот шаг:

"просто добавьте объект патча в список дескрипторов, как если бы вы были объектом Line2D"

У меня есть пример кода, который я мог бы написать, чтобы показать мой конкретный случай, но не был уверен, поможет ли он кому-нибудь ответить или просто сделает вопрос слишком конкретным и трудным для интерпретации.

Любая помощь или совет приветствуется.

1 Ответ

0 голосов
/ 20 февраля 2019

Предложение

"просто добавьте объект патча в список дескрипторов, как если бы это был объект Line2D"

, который следует понимать буквально.Предположим, что вы создали red_patch, и у вас есть список дескрипторов handles, вы добавляете (+), что red_patch к handles

plt.legend(handles=handles + [red_patch])

Полный пример:

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt

for i in range(3):
    plt.plot([0,1],[i,i+1], label=f"Label {i}")

red_patch = mpatches.Patch(color='red', label='The red data')


handles, labels = plt.gca().get_legend_handles_labels()
# "just add the patch object to the handles list as you would a Line2D object"
plt.legend(handles=handles + [red_patch])

plt.show()

enter image description here

...