Сначала давайте посмотрим, что означает ошибка.
Она появляется в строке l.remove()
и означает, что переменная l
определена где-то в вашей функции, , но в момент вызова remove
, еще не определено .
Обратите внимание, что l
является локальной переменной, что означает, что один экземпляроно создается при вызове вашей функции и впоследствии уничтожается;он не передается между вызовами.
Тогда ясно, что, поскольку l
определен только в ветви if
, если берется ветвь else
, мы столкнемся с ошибкой, поскольку дляэтот конкретный вызов onclick
, l
не существует.
Решение состоит в том, чтобы просто добавить его к p_arts
, как вы делаете для художника scatterplot
.Я также немного очистил бы код следующим образом:
def onclick(event):
if len(p_arts) == 0:
# plot first scatter
scatter_artist = ax.scatter(event.xdata, event.ydata)
p_arts.append(scatter_artist)
elif len(p_arts) == 1:
# plot second scatter and line
scatter_artist = ax.scatter(event.xdata, event.ydata)
p_arts.append(scatter_artist)
line_artist = ax.plot([event.xdata], [event.ydata])[0]
p_arts.append(line_artist)
else:
# remove everything
for artist in p_arts:
artist.remove()
fig.canvas.draw()