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