В моей системе у меня есть некоторые фоновые элементы фиксированы и никогда не меняются, а некоторые другие элементы подвержены движениям в зависимости от времени. В качестве минимального рабочего примера рассмотрим следующий код:
Код: Выделить всё
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
Мобильная версия