Я столкнулся со странной проблемой с художниками matplotlib.
Отказ от ответственности: К сожалению, я когда-либо использовал matplotlib только в ноутбуках jupyter и в графическом интерфейсе tkinter (последний, где я нашел это), поэтому я не знаю, какнаписать простой код, который будет повторять проблему.Однако я не думаю, что пример - это код, который абсолютно необходим в этом случае.
Теперь проблема:
В целях ускорения построения графиков в графическом интерфейсе я не рисую все заново, когда элементыСюжет меняется, но лучше использовать такие методы, как set_ydata
и canvas.draw
.Иногда также необходимо полностью удалить строки, что можно сделать с помощью artist.remove
.Вот проблема: Когда у меня есть один или несколько исполнителей, сохраненных в списке, я могу успешно удалить их из графика, перебирая список и вызывая remove
.Однако, если я сохраню ссылку напрямую (как атрибут класса, управляющего графиками), вызов remove
ничего не делает.
В качестве эскиза кода предположим, что у нас есть
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
первый случай генерируется чем-то вроде
artist_list = list()
for x in range(5):
line = ax.axhline(x)
artist_list.append(line)
и может быть удален с помощью
for line in artist_list:
line.remove()
artist_list = list()
(последний нужен для того, чтобы это работало).
тогда как второй будет
line = ax.axhline(1)
line.remove()
, который не удаляет линию из графика (даже если добавлены del line
или line = None
).
Кажется, что сохранение художника всписок, а затем присвоение этой переменной новому пустому списку является каким-то более полным удалением, чем переназначение переменной, в которой непосредственно хранится художник, или даже ее удаление.Кто-нибудь знает, что здесь происходит?Как удалить строку, если она просто хранится как line
, а не как список?