Ускоренное создание в matplotlib кадровых изображений для анимации.Python

Программы на Python
Ответить
Anonymous
 Ускоренное создание в matplotlib кадровых изображений для анимации.

Сообщение Anonymous »

Я моделирую некоторые физические процессы с помощью Python и хочу регулярно отображать состояние системы, чтобы создать анимацию. До сих пор я делал снимок системы через определенные промежутки времени, сохранял его в файл и, наконец, конвертировал изображения в видео с помощью Convert или ffmpeg. Однако в последнее время сюжет стал сложнее, и теперь создание одного изображения занимает 2-3 секунды, что слишком долго для моих нужд.
В моей системе у меня есть некоторые фоновые элементы фиксированы и никогда не меняются, а некоторые другие элементы подвержены движениям в зависимости от времени. В качестве минимального рабочего примера рассмотрим следующий код:

Код: Выделить всё

import matplotlib.pyplot as plt
import numpy as np
import time

class MWE():
def __init__(self):
self.x = 0.0
self.y = 0.0
self.dt = 0.01
self.imageCounter = 0
self.elapsed_time = 0.0

def evolve(self):
theta = 2 * np.pi * self.elapsed_time
self.x = np.cos(theta)
self.y = np.sin(theta)
self.elapsed_time += self.dt

def draw(self):
fig, ax = plt.subplots(figsize=(2, 2), layout='constrained')
ax.set_aspect('equal')
ax.axis('off')

ax.set_xlim((-2, 2))
ax.set_ylim((-2.2, 2))

for center_x in np.linspace(-2,2, 21)[1::2]:
for center_y in np.linspace(-2,2, 21)[1::2]:
blue_circle = plt.Circle((center_x, center_y), 0.1, color='blue', fill=False)
ax.add_patch(blue_circle)

red_circle = plt.Circle((self.x, self.y), 0.1, color='red', fill=True)
ax.add_patch(red_circle)
self.imageCounter += 1

ax.text(-1.9, -2.2, f'Time: {self.elapsed_time:.2f} s', color='black', size=8)

fig.savefig(f'MWE_{str(self.imageCounter).zfill(3)}.png')
plt.clf()
plt.cla()
plt.close()

mwe = MWE()

start_time = time.time()
while mwe.elapsed_time < 1.0:
mwe.evolve()
mwe.draw()
print(f"Execution: {time.time() - start_time:.2f} s" % ())

Код: Выделить всё

convert -resize 100% -delay 2 -loop 0 MWE_*.png loop.gif
Изображение

выполнение на моем компьютере занимает Execution: 51,32 с, поэтому я ищу альтернативный способ обработки графиков, будь то сохранение в памяти фонового рисунка или использование дополнительного пакета для анимации.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -animation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»