Я новичок в python и только что установил pyCharm и попытался запустить тестовый пример, заданный по следующему вопросу: Как обновить сюжет в matplotlib?
В этом примере обновляется график для анимации движущегося синусоидального сигнала. Вместо ретрансляции он обновляет данные объекта сюжета.
Он работает в командной строке, но этот показатель не отображается при запуске в PyCharm. Добавление plt.show(block=True)
в конце script вызывает цифру, но на этот раз она не будет обновляться.
Любые идеи?
Обновление связанного вопроса основано на предположении, что график встроен в приложение tkinter, что здесь не так.
Для участка обновления как отдельного окна вам необходимо включить интерактивный режим, т.е. plt.ion()
. В PyCharm это должно быть включено по умолчанию.
Чтобы отобразить фигуру в интерактивном режиме, вам нужно нарисовать ее, plt.draw()
. Чтобы он оставался отзывчивым, вам нужно добавить паузу, plt.pause(0.02)
. Если вы хотите оставить его открытым после завершения цикла, вам нужно отключить интерактивный режим и показать рисунок.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 6*np.pi, 100)
y = np.sin(x)
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
line1, = ax.plot(x, y, 'r-')
plt.draw()
for phase in np.linspace(0, 10*np.pi, 500):
line1.set_ydata(np.sin(x + phase))
plt.draw()
plt.pause(0.02)
plt.ioff()
plt.show()
Как отмечено ImportanceOfBeingErnest в отдельном вопросе, на некоторых системах жизненно важно добавьте эти две строки в начало кода из примера OP:
import matplotlib
matplotlib.use("TkAgg")
Это может сделать ненужные вызовы plt.ion
и plt.ioff
; код теперь работает без них в моей системе.