#python #matplotlib #animation
#python #matplotlib #Анимация
Вопрос:
У меня есть 20 файлов, которые я хотел бы отобразить, как показано ниже, а затем показывать один за другим, напоминая анимацию. Один данный график выглядит так, как показано на рисунке.
20 графиков имеют разные диапазоны для своей оси y. Итак, в то время как показанный на рисунке выше диапазон от -184000 до -176000, другой может варьироваться от -160000 до -170000. Сохранение постоянной оси в диапазоне минимального и максимального значений всех графиков приводит к тому, что графики слишком растягиваются или сжимаются.
Я написал следующий код:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ims = []
for i in range(1, 21):
file_out = "out" "_" str(i)
outfile = pd.read_table(file_out,
skip_blank_lines=True, skipinitialspace=True, sep='s ')
x = outfile['col1']
y = outfile['col2']
im = plt.plot(x, y)
ims.append(im)
ani = animation.ArtistAnimation(fig, ims, repeat=False, interval = 500)
plt.show()
Есть ли способ изменить диапазоны осей для каждого нового графика в анимации?
Я попытался добавить следующую строку в код, но мне это не удалось:
plt.axes(xlim = (0, 100), ylim = (min(y), max(y)))
Спасибо!
Ответ №1:
При использовании ArtistAnimation
все линии наносятся на одни и те же оси и переключаются видимыми / невидимыми в каждом кадре, поэтому все они имеют одинаковый масштаб. Чтобы получить желаемый результат, я думаю, вам нужно использовать FuncAnimation
вместо ArtistAnimation
.
Что-то вроде этого (непроверенное):
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
def animate(i):
file_out = "out" "_" str(i)
outfile = pd.read_table(file_out,
skip_blank_lines=True, skipinitialspace=True, sep='s ')
x = outfile['col1']
y = outfile['col2']
plt.cla()
im = plt.plot(x, y)
return im
ani = animation.FuncAnimation(fig, animate, frames=range(1,21), repeat=False, interval = 500)
plt.show()