注意
转到结尾 下载完整的示例代码。
多个坐标轴动画#
此示例展示了
如何在多个子图上进行动画,
使用动画中的图形艺术家。
通过 matplotlib.animation.Animation.to_jshtml
生成输出。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.patches import ConnectionPatch
fig, (axl, axr) = plt.subplots(
ncols=2,
sharey=True,
figsize=(6, 2),
gridspec_kw=dict(width_ratios=[1, 3], wspace=0),
)
axl.set_aspect(1)
axr.set_box_aspect(1 / 3)
axr.yaxis.set_visible(False)
axr.xaxis.set_ticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"])
# draw circle with initial point in left Axes
x = np.linspace(0, 2 * np.pi, 50)
axl.plot(np.cos(x), np.sin(x), "k", lw=0.3)
point, = axl.plot(0, 0, "o")
# draw full curve to set view limits in right Axes
sine, = axr.plot(x, np.sin(x))
# draw connecting line between both graphs
con = ConnectionPatch(
(1, 0),
(0, 0),
"data",
"data",
axesA=axl,
axesB=axr,
color="C0",
ls="dotted",
)
fig.add_artist(con)
def animate(i):
x = np.linspace(0, i, int(i * 25 / np.pi))
sine.set_data(x, np.sin(x))
x, y = np.cos(i), np.sin(i)
point.set_data([x], [y])
con.xy1 = x, y
con.xy2 = i, y
return point, sine, con
ani = animation.FuncAnimation(
fig,
animate,
interval=50,
blit=False, # blitting can't be used with Figure artists
frames=x,
repeat_delay=100,
)
plt.show()
脚本总运行时间:(0 分钟 3.972 秒)