Python и удалить аннотацию с рисунка

Я использую matplotlib внутри графического интерфейса wxpython. Короче говоря, я подготовил кучу данных. Затем я нажимаю на точку данных (используя DataCursor, расположенный по адресу:

Существует ли эквивалент Matplotlib для режима обработки данных MATLAB?

или же

Всплывающие аннотации на matplotlib в wxPython

Вторая ссылка - моя фактическая реализация. Я ссылаюсь на класс datacursor из других классов. Что мне интересно, как мне удалить аннотацию, нажав кнопку события? Например, у меня есть кнопка события, которая обновляет мой точечный график (используя plot_handle.set_data, а не очищая рисунок). Тем не менее, аннотация остается точно там, где она была, независимо от того, есть точка или нет. Как я могу удалить это?

Спасибо!

2 ответа

Решение

Большинство объектов matplotlib имеют remove() функция (я думаю, что она унаследована от Artist). Просто назовите это на объекте, который вы хотите удалить.

Редактировать:

Если у вас есть

dc = DataCursor(...) # what ever aruguements you give it
# bunch of code
dc.annotation.remove()
del dc
plt.draw() # need to redraw to make remove visible

В Python нет понятия "приватные" атрибуты, поэтому вы можете просто добраться до объекта и вызвать удалить аннотацию. Смотрите учебник по классам для более подробной информации.

Обратной стороной этого является то, что теперь у вас есть объект странного состояния. Если у вас есть другие ссылки на них, они могут вести себя плохо. Если вы хотите сохранить DataCursor объект вокруг вы можете изменить annotation объект, использующий это set_* функции или изменить его видимость, чтобы временно скрыть его ( док)

Вы должны добавить это как художник, чтобы удалить это как художник

arrow2 = matplotlib.text.Annotation("I love it",xy=(0.5,0.5),xycoords='data',arrowprops=dict(arrowstyle="-")) 
ax2.add_artist(arrow2) 
arrow2.remove() 
Другие вопросы по тегам