Как сделать задержку в matplotlib python
У меня есть две аннотации:
list_time_1 = [100, 20, 30, 60, 10]
a_1 = plt.annotate("максимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(max(list_time_1)), max(list_time_1)), xytext=(0, 50))
a_2 = plt.annotate("минимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(min(list_time_1)), min(list_time_1)), xytext=(0, 10))
Я хочу, чтобы у меня после первой аннотации появилась задержка, а после нее удалить a_2.
Как сделать задержку?
Пробовал sleep, keyboard.waitkey() ничего не работает.
Вот код полностью:
from matplotlib import pyplot as plt
plt.title("Анализ")
plt.xlabel("Номер")
plt.ylabel("Время")
plt.plot(list_time_1, label="Ваше время", color="k", ls="-", lw="4", marker="o", mec="m", mfc="m", ms="8")
plt.plot([60 for i in range(len(list_time_1))], label="среднее значение", color="b", ls="--", lw="4", mec="m", mfc="m")
a_1 = plt.annotate("максимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(max(list_time_1)), max(list_time_1)), xytext=(0, 50))
a_2 = plt.annotate("минимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(min(list_time_1)), min(list_time_1)), xytext=(0, 10))
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не уверен, что правильно понял то, что вы хотите сделать,
но как вариант предложу попробовать:
Запустите цикл событий графического интерфейса на интервал секунд.
from matplotlib import pyplot as plt
list_time_1 = [100, 20, 30, 60, 10]
plt.title("Анализ")
plt.xlabel("Номер")
plt.ylabel("Время")
plt.plot(list_time_1, label="Ваше время", color="k", ls="-", lw="4", marker="o", mec="m", mfc="m", ms="8")
plt.pause(1.5)
plt.plot([60 for i in range(len(list_time_1))], label="среднее значение", color="b", ls="--", lw="4", mec="m", mfc="m")
plt.pause(2.0)
a_1 = plt.annotate("максимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(max(list_time_1)), max(list_time_1)), xytext=(0, 50))
plt.pause(0.5)
a_2 = plt.annotate("минимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(min(list_time_1)), min(list_time_1)), xytext=(0, 10))
plt.show()
Update:
Я наверное не уточнил, но мне нужно что-то по типу анимации.
Показывается одна аннотация и через некоторое время её заменяет другая.
Можно ли как-то обойтись без matplotlib.animation?
Вы можете удалить artist, используя метод remove().
from matplotlib import pyplot as plt
list_time_1 = [100, 20, 30, 60, 10]
plt.title("Анализ")
plt.xlabel("Номер")
plt.ylabel("Время")
plt.plot(list_time_1, label="Ваше время", color="k", ls="-", lw="4", marker="o", mec="m", mfc="m", ms="8")
plt.pause(1.5)
plt.plot([60 for i in range(len(list_time_1))], label="среднее значение", color="b", ls="--", lw="4", mec="m", mfc="m")
plt.pause(2.0)
a_1 = plt.annotate("максимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(max(list_time_1)), max(list_time_1)), xytext=(0, 50))
plt.pause(0.5)
a_1.remove() # <--------------
a_2 = plt.annotate("минимальное значение", arrowprops=dict(facecolor="m"), xy=(list_time_1.index(min(list_time_1)), min(list_time_1)), xytext=(0, 10))
plt.show()


