2013-07-26 3 views
0

Допустим, я делаю серию AnnotationBbox'es в Matplotlib через цикл, как это:Matplotlib: Удаление всех художников и линий

for city in cities: 
    x, y = self.map(city[1], city[0]) 

    ab = AnnotationBbox(imagebox, [x,y], 
           xybox=(0, 0), 
           xycoords='data', 
           boxcoords="offset points", 
           frameon=False) 
      self.axes.add_artist(ab) 
      self.locationImages.append(ab) 

В этом примере я создал серию AnnotationBBoxes, и сохранили их в списке, называемом self.locationImages. Тогда я иду через self.locationImages в цикле, и удалить каждый, делая это:

for image in self.locationImages: 
     image.remove() 

Есть ли способ, чтобы удалить все художники, без того, чтобы пройти через цикл? Или удалить всех артистов и строк полностью, без необходимости снимать оси или фигуру?

Я рисую точки на карте, и мне нужна карта, чтобы остаться. Я делаю масштабирование и выходы, но во время увеличения и уменьшения масштаба мне нужно удалить все и заменить. Я работаю с большим набором данных и выполнение итераций является дорогостоящим мероприятием

+0

Использование 'set_visible' может быть лучшим вариантом, чем удаление артистов. http://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_visible Вам все равно придется запускать повторную ничью, но вам не придется настраивать и срывать художников. – tacaswell

ответ

0

Из интерфейса Matplotlib в pyplot, вы можете pyplot.cla() очистить всю ось и pyplot.clf() очистить всю фигуру.

+0

Это также функции уровня «axes» и 'figure' ->' ax.cla() 'и' fig.clf() ', но они удалят все, включая карту, которую хочет сохранить OP. – tacaswell

+0

@tcaswell возглашает. не уверен, как я пропустил это! –

Смежные вопросы