43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import numpy as np
|
|
from scipy.integrate import odeint, quad
|
|
from scipy.optimize import brentq
|
|
import matplotlib.pyplot as plt
|
|
from matplotlib import animation, rc
|
|
import seaborn as sbs
|
|
#rc('font', **{'family': 'serif', 'serif': ['Computer Modern'], 'size': 20})
|
|
#rc('text', usetex=True)
|
|
#rc('animation', html='jshtml')
|
|
#plt.rcParams["animation.html"] = "jshtml"
|
|
|
|
|
|
def tsanim(tss):
|
|
"Plot an array of time series data t, x = [ti], [xi]."
|
|
nrows = len(tss)
|
|
fig, axes = plt.subplots(nrows=nrows, ncols=1)
|
|
tsmax = lambda ts: max(len(ts[0]), len(ts[1]))
|
|
ts_maxlen = max(map(tsmax, tss))
|
|
tinit = int(0.1*ts_maxlen)
|
|
print("Animate time series from t=%d with %d frames" % (tinit, ts_maxlen))
|
|
|
|
def tsplot(ax, ts):
|
|
t, x = ts
|
|
ax.set_ylabel(r'$x$')
|
|
ax.set_ylim(np.min(x), np.max(x))
|
|
line, = ax.plot(t[:tinit], x[:tinit])
|
|
return line
|
|
|
|
lines = list(map(lambda axts: tsplot(*axts), zip(axes, tss)))
|
|
axes[-1].set_xlabel(r'$t$')
|
|
|
|
def animate(i):
|
|
"""Update the image for iteration i of the Matplotlib animation."""
|
|
for ax, line, ts in zip(axes, lines, tss):
|
|
t, x = ts
|
|
line.set_data(t[:i+1], x[:i+1])
|
|
ax.set_xlim(0, t[i])
|
|
return
|
|
|
|
plt.tight_layout()
|
|
anim = animation.FuncAnimation(fig, animate, frames=ts_maxlen, interval=10)
|
|
return anim
|