Я использую фигуру matplotlib, встроенную в графический интерфейс WxPython, чтобы представить некоторые данные. Содержание рисунка (данные отображаются) постоянно изменяется в зависимости от нажатых кнопок, ...Очистить только часть фигуры matplotlib
Данные двух типов.
1) контурные линии
self.axes.contour(x_scale_map,y_scale_map,matrix,cl,cmap=my_cmap,extent=0,matrix.shape[1]-1,0,matrix.shape[0]-1))
Это относительно медленно нагрузки (~ 1 сек), но не меняется очень часто.
2) В верхней части этого контура, я сюжет, например, некоторые линии
self.axes.axhline(y,color='black')
Эти линии, очевидно, нарисованные мгновенно и часто изменяются в зависимости от того, что пользователь нажмет. В этих ситуациях ранее отрисованные линии должны исчезнуть, а новые должны появиться, а карта контура останется неизменной.
Теперь моя проблема заключается в следующем. Я не нашел способ удалить только строки, а не контур. Кажется, что единственный способ получить желаемый результат:
self.axes.clear()
, а затем повторить как контур, так и новые линии. Но, как уже упоминалось, перезагрузка контура каждый раз медленна и, следовательно, раздражает.
Есть ли способ очистить только линии от рисунка? Я пытался использовать наложенные подзаговоры делать что-то вроде:
self.axes1 = self.fig.add_subplot(111)
self.axes2 = self.fig.add_subplot(111)
self.axes1.contour(...)
self.axes2.axhline(y,color='black')
self.axes2.clear()
, но эта последняя строка очищает всю фигуру.
Кто-нибудь знает, как достичь желаемой функциональности? Thanks
Вы можете просто повернуть линии невидимыми и прочитать оси. (Для любого художника matplotlib вы можете сделать 'artist.set_visible (False)'.) Кроме того, если вы делаете что-то, где вы можете обновлять данные существующей строки, а не добавлять новую и скрывать старую, вы должны просто обновите старый. Наличие множества скрытых исполнителей в конечном итоге начнет замедлять работу сюжета. –
Привет @JoeKington, я не думал о решении проблемы так, как вы ее предлагаете. Я искал немного больше в этом направлении и нашел также следующее [Q & A] (http://stackoverflow.com/questions/4981815/how-to-remove-lines-in-a-matplotlib-plot). Другими словами, мне удалось получить все, что я хотел, используя комбинацию 'artist.set_visible (True/False)' и 'artist.remove()' вместе с 'del artist'. Спасибо – savantas
@tcaswell - сделано и спасибо – savantas