Проблема в том, что создание аннотаций находится внутри цикла for. Когда вы делаете aux1.remove()
, вы удаляете только последнюю аннотацию на осях.
Одним из решений было бы поместить aux1
в список и после завершения цикла for выполнить цикл по списку и удалить аннотации:
aux = plt.scatter(obj_dy[:], obj_dx[:], color='green')
aux1_list = [] # empty list that the annotation will go in
for k in range(len(obj_index)):
aux1 = plt.annotate(str(obj_index[k]), xy = (obj_dy[k], obj_dx[k]))
aux1_list.append(aux1)
plt.pause(0.1)
aux.remove() # remove scatter points
# remove annotations
for ann in aux1_list:
ann.remove()
plt.pause(0.01)
plt.show()
Еще один способ сделать это без сохранения аннотации в списке - циклически просмотреть дочерние элементы axes
, проверить, являются ли они аннотациями, и удалить, если это так:
for child in plt.gca().get_children():
if isinstance(child, matplotlib.text.Annotation):
child.remove()