2020-08-16 12:35:48 +02:00

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