Я довольно плохо знаком с Python и программированием в целом, но все еще надеюсь, что моя проблема может быть исправлена, так как я до сих пор не нашел достаточного ответа.
Моё основное упражнение - создатьнебольшая анимация орбит Земли и Юпитера на основе заданного вымышленного набора данных.Эта анимация очень простая (имеется в виду несколько цветных шариков, движущихся по кругу).
Теперь я использовал модуль matplotlib.animation.FuncAnimation для создания анимации, и он работал очень хорошо и по назначению.Проблема возникает, когда я пытаюсь сохранить анимацию.Процесс сохранения намного медленнее, чем первоначально созданная анимация, и чем дальше он продвигается, тем медленнее, почти полностью останавливаясь на пути к задаче.
Теперь я предполагаю, что, поскольку набор данных очень большой (10000точки) и функция сохранения (...) постоянно накладывает кадры друг на друга, это быстро становится слишком большим, чтобы справиться с программой.
Это примерно столько, сколько я получил до сих пор, но у меня нетне нашел ничего, чтобы решить проблему.Опять же, мои знания в области программирования весьма ограничены, но я все еще надеюсь, что есть решение.
ПРИМЕЧАНИЕ: этот код потребовал бы для запуска указанного файла "orbits.out".Я также могу попытаться сделать это доступным, но, возможно, в этом нет необходимости.
Я использую Anaconda в Windows 10 и код с кодом Microsoft Visual Studio (если это актуально)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation as ani
#read out basic information before reading out the data set
fileHandle = open("orbits.out")
basedata = fileHandle.read(41) #41
fileHandle.close()
#numpy array with the columns: t xSun ySun xEarth yEarth xJupiter yJuptier
dataset = np.loadtxt("orbits.out", skiprows = 5,
usecols = (0,1,2,4,5,7,8))
#create a image with the starting positions for all points
fig, grid = plt.subplots()
sun_data = [dataset[0,1], dataset[0,2]]
earth_data = [dataset[0,3], dataset[0,4]]
jupiter_data = [dataset[0,5], dataset[0,6]]
#create separate elements to use different colors and sizes
sun, = grid.plot(sun_data[0], sun_data[1], "yo",
markersize = 20, animated = True,
label = "Sun")
earth, = grid.plot(earth_data[0], earth_data[1], "bo",
markersize = 10, animated = True,
label = "Earth")
jupiter, = grid.plot(jupiter_data[0], jupiter_data[1], "mo",
markersize = 15, animated = True,
label = "Jupiter")
grid.legend(loc = "upper left")
def init():
grid.set_xlim(-6.5, 6.5)
grid.set_ylim(-6.5, 6.5)
return sun, earth, jupiter,
def system(frame):
f = frame
print("step number:", f)
#update the positions
sun.set_data(dataset[f,1], dataset[f,2])
earth.set_data(dataset[f,3], dataset[f,4])
jupiter.set_data(dataset[f,5], dataset[f,6])
return sun, earth, jupiter,
draw = ani(fig, system, frames = np.arange(1, len(dataset[:,0])),
init_func = init, blit = True, interval = 30,
repeat_delay = 0)
plt.show()
draw.save("orbits.gif", writer = "imagemagick")