Я пытаюсь получить и установить положение перетаскиваемой легенды в matplotlib. Мое приложение состоит из интерактивного графического интерфейса, который имеет функцию перерисовки/построения графика, которая должна выполнять следующие этапы:Как я могу установить положение перетаскиваемой легенды в matplotlib
- сохранить положение текущей легенды.
- очистить текущие оси и выполнить различные операции построения графика, которые могут или могут добавлять метки к их графикам.
- построить новую перетаскиваемую легенду (
ax.legend().draggable()
) и восстановить старую позицию легенды.
В промежутке между этими шагами пользователь может перетащить легенду, и цель состоит в том, чтобы сохранить положение легенды при перерисовании сюжетов.
Мой первый подход состоял в том, чтобы использовать oldpos = legend.get_bbox_to_anchor()
и legend.set_bbox_to_anchor(oldpos)
в шагах 1 и 3. Однако это приводит к тому, что легенда полностью перемещается с видимой области.
Обратите внимание, что я должен использовать ax.legend()
и не может использовать fig.legend(lines, labels)
, так как шаг 2 полностью разъединены, то есть, я ничего не знаю о линий и меток на шаге 3. знать Согласно ответам на вопрос How to position and align a matplotlib figure legend?, как представляется, разница между этими двумя возможностями относительно координат осей или фигур. Очевидно, что моя проблема вызывает координаты фигур, но я не совсем понял, как преобразовать bbox в «bbox в координатах фигур».
Еще более серьезная проблема, которую я только осознал, заключается в том, что, видимо, legend.get_bbox_to_anchor()
всегда возвращает одинаковые значения независимо от положения перетаскивания. Так может быть, якорь может быть (ab-) использован для управления позицией статических легенд? Есть ли другой/правильный способ сохранить и восстановить положение перетаскиваемой легенды?