Как построить несколько анимированных функций на одном графике с Matplotlib? - PullRequest
4 голосов
/ 18 января 2020

Я хочу построить две анимированные функции на одном графике для сравнения между двумя функциями, скажем, например, exp (-x 2) и exp (x 2). Я знаю, как анимировать функцию здесь это код, который я использовал для анимации функции

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
%matplotlib qt
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'r', animated=True)
f = np.linspace(-3, 3, 200)
def init():
    ax.set_xlim(-3, 3)
    ax.set_ylim(-0.25, 2)
    ln.set_data(xdata,ydata)
    return ln,
def update(frame):
    xdata.append(frame)
    ydata.append(np.exp(-frame**2))
    ln.set_data(xdata, ydata)
    return ln,
ani = FuncAnimation(fig, update, frames=f,enter code here
                    init_func=init, blit=True, interval = 2.5,repeat=False)
plt.show()



enter code here

, и тем же методом мы можем построить другую функцию, но как показать их на том же графике

1 Ответ

6 голосов
/ 18 января 2020

Как уже упоминалось в комментарии, добавление еще одной строки будет работать. Вот рабочий пример с exp (-x ^ 2) и exp (x ^ 2), я также изменил пределы, чтобы лучше видеть оба:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation


fig, ax = plt.subplots()
xdata, ydata0, ydata1 = [], [], []
ln0, = plt.plot([], [], 'r', animated=True)
ln1, = plt.plot([], [], 'b', animated=True)
f = np.linspace(-3, 3, 200)

def init():
    ax.set_xlim(-3, 3)
    ax.set_ylim(-0.25, 10)
    ln0.set_data(xdata,ydata0)
    ln1.set_data(xdata,ydata1)
    return ln0, ln1

def update(frame):
    xdata.append(frame)
    ydata0.append(np.exp(-frame**2))
    ydata1.append(np.exp(frame**2))
    ln0.set_data(xdata, ydata0)
    ln1.set_data(xdata, ydata1)
    return ln0, ln1,

ani = FuncAnimation(fig, update, frames=f,
                    init_func=init, blit=True, interval=2.5, repeat=False)
plt.show()

Для рисунка ниже я изменил plt.show() строка должна быть ani.save('animated_exp.gif', writer='imagemagick') и изменил интервал на 25.

gif created with example code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...