y=sin(x)
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), "b") point, = axl.plot(0, 0, "o") # draw full curve to set view limits in right Axes sine, = axr.plot(x, np.sin(x),c="b") # 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 animation = animation.FuncAnimation( fig, animate, interval=100, blit=False, # blitting can't be used with Figure artists frames=x, repeat_delay=0, ) animation.save('ex407.gif', writer='imagemagick') plt.show()
Recent Comments