Прежде чем перейти к проблеме PolyCollection
, мне уже любопытно, есть ли краткий способ добавления нового элемента в существующую легенду в целом.Например:
import matplotlib.pyplot as plt
f, ax = plt.subplots()
ax.legend(handles=ax.plot([0, 1], [0, 1], '-', label='foo'))
p, = ax.plot([1, 2], [1, 2], '--o', label='bar')
Теперь я хотел бы добавить p
к существующей легенде ax.get_legend()
.Я обнаружил, что могу сделать (хотя это не совсем обновление ):
ax.legend(handles=ax.get_legend().legendHandles + [p])
Я чувствую, что должен существовать более чистый путь.Не так ли?
Но когда легенда содержит PolyCollection
, соответствующая метка теряется:
ax.legend(handles=[ax.fill_between([0, 1], 0, 1, color='green', label='foo')])
p = ax.fill_between([1, 2], 0, 1, color='orange', label='bar')
ax.legend(handles=ax.get_legend().legendHandles + [p])
Теперь я искал способ извлечь метки, которые хранятся в легенде, но, к счастью, dir(ax.get_legend())
не показал ничего полезного.Интересно, что соответствующая handle
тоже не знает своей метки (хотя для первого примера она имеет plot
):
ax.get_legend().legendHandles[0].get_label() # Empty string.
Так что мне интересно, как легенда знает, какой метке соответствует эта метка?справиться;он должен храниться где-то внутри объекта легенды.
И мой главный вопрос: Как я могу обновить существующую легенду новым элементом, не теряя при этом никакой предыдущей информации?