Существует несколько способов анимации графика matplotlib. Ниже мы рассмотрим два минимальных примера, используя график рассеяния.
plt.ion()
. Для анимации нам нужен цикл событий. Один из способов получения цикла событий - использовать plt.ion()
(«интерактивный»). Затем нужно сначала нарисовать фигуру и затем обновить график в цикле. Внутри цикла нам нужно нарисовать холст и ввести небольшую паузу для окна для обработки других событий (например, взаимодействия с мышью и т. Д.). Без этой паузы окно замерзло. Наконец, мы вызываем plt.waitforbuttonpress()
, чтобы окно оставалось открытым даже после завершения анимации.
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
fig, ax = plt.subplots()
x, y = [],[]
sc = ax.scatter(x,y)
plt.xlim(0,10)
plt.ylim(0,10)
plt.draw()
for i in range(1000):
x.append(np.random.rand(1)*10)
y.append(np.random.rand(1)*10)
sc.set_offsets(np.c_[x,y])
fig.canvas.draw_idle()
plt.pause(0.1)
plt.waitforbuttonpress()
FuncAnimation
. Многое из вышеизложенного может быть автоматизировано с использованием matplotlib.animation.FuncAnimation
. FuncAnimation позаботится о цикле и перерисовке и будет постоянно вызывать функцию (в данном случае animate()
) по истечении заданного интервала времени. Анимация запускается только после вызова plt.show()
, тем самым автоматически запускается в цикле событий окна графика.
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
fig, ax = plt.subplots()
x, y = [],[]
sc = ax.scatter(x,y)
plt.xlim(0,10)
plt.ylim(0,10)
def animate(i):
x.append(np.random.rand(1)*10)
y.append(np.random.rand(1)*10)
sc.set_offsets(np.c_[x,y])
ani = matplotlib.animation.FuncAnimation(fig, animate,
frames=2, interval=100, repeat=True)
plt.show()
Похоже, что инициализация вашего окна занимает много времени, попробуйте выгрузить некоторые элементы управления, которые не должны быть видны при запуске:
Если в вашем пользовательском интерфейсе есть элементы, которые по умолчанию свернуты, все еще создается при запуске, даже если они не видны. Вы можете отложить загрузку этих элементов, пока они не отобразятся, установив для атрибута x: DeferLoadStrategy значение «Lazy». Это может улучшить производительность при запуске. Для получения дополнительной информации см. Атрибут x: DeferLoadStrategy.
blockquote>Источник: https://docs.microsoft.com/de-de/windows/uwp/design/layout/layouts-with-xaml
Вы запускали приложение в режиме выпуска? Одно это может улучшить время запуска.
Грубая вещь, которую я делал в прошлом, состояла в том, чтобы запустить приложение с отладкой и постоянно нажимать на паузу в Visual Studio. Если отладчик всегда останавливается в одном и том же месте, это проблемная область. Надеюсь, это в вашем собственном коде, так что у вас есть возможность изменить его.
Если у вас есть доступ к профилировщику, который обрабатывает ваш код, попробуйте использовать его. Visual Studio поставляется с одним, но вы можете использовать его только с определенными лицензиями.