Created
September 17, 2013 14:17
-
-
Save akira093/6594923 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import matplotlib.pyplot as plt | |
from matplotlib.lines import Line2D | |
import matplotlib.animation as animation | |
# This example uses subclassing, but there is no reason that the proper function | |
# couldn't be set up and then use FuncAnimation. The code is long, but not | |
# really complex. The length is due solely to the fact that there are a total | |
# of 9 lines that need to be changed for the animation as well as 3 subplots | |
# that need initial set up. | |
class SubplotAnimation(animation.TimedAnimation): | |
def __init__(self): | |
fig = plt.figure() | |
ax1 = fig.add_subplot(2, 2, 1) | |
ax2 = fig.add_subplot(2, 2, 2) | |
ax3 = fig.add_subplot(2, 2, 3) | |
self.t = np.linspace(0, 80, 400) | |
self.x = np.cos(2 * np.pi * self.t / 10.) | |
self.y = np.sin(2 * np.pi * self.t / 10.) | |
self.z = 10 * self.t | |
ax1.set_xlabel('x') | |
ax1.set_ylabel('y') | |
self.line1 = Line2D([], [], color='black') | |
self.line1a = Line2D([], [], color='red', linewidth=2) | |
self.line1e = Line2D([], [], color='red', marker='o', markeredgecolor='r') | |
ax1.add_line(self.line1) | |
ax1.add_line(self.line1a) | |
ax1.add_line(self.line1e) | |
ax1.set_xlim(-1, 1) | |
ax1.set_ylim(-1, 1) | |
ax1.set_aspect('equal') #, 'datalim') | |
ax2.set_xlabel('y') | |
ax2.set_ylabel('z') | |
self.line2 = Line2D([], [], color='black') | |
self.line2a = Line2D([], [], color='red', linewidth=2) | |
self.line2e = Line2D([], [], color='red', marker='o', markeredgecolor='r') | |
ax2.add_line(self.line2) | |
ax2.add_line(self.line2a) | |
ax2.add_line(self.line2e) | |
ax2.set_ylim(-1, 1) | |
ax2.set_xlim(0, 800) | |
ax3.set_xlabel('x') | |
ax3.set_ylabel('z') | |
self.line3 = Line2D([], [], color='black') | |
self.line3a = Line2D([], [], color='red', linewidth=2) | |
self.line3e = Line2D([], [], color='red', marker='o', markeredgecolor='r') | |
ax3.add_line(self.line3) | |
ax3.add_line(self.line3a) | |
ax3.add_line(self.line3e) | |
ax3.set_xlim(-1, 1) | |
ax3.set_ylim(0, 800) | |
ax3.set_position([.16, .1, .28, .4]) | |
animation.TimedAnimation.__init__(self, fig, interval=50, blit=True) | |
def _draw_frame(self, framedata): | |
i = framedata | |
head = i - 1 | |
head_len = 10 | |
head_slice = (self.t > self.t[i] - 1.0) & (self.t < self.t[i]) | |
self.line1.set_data(self.x[:i], self.y[:i]) | |
self.line1a.set_data(self.x[head_slice], self.y[head_slice]) | |
self.line1e.set_data(self.x[head], self.y[head]) | |
self.line2.set_data(self.z[:i], self.y[:i]) | |
self.line2a.set_data(self.z[head_slice], self.y[head_slice]) | |
self.line2e.set_data(self.z[head], self.y[head]) | |
self.line3.set_data(self.x[:i], self.z[:i]) | |
self.line3a.set_data(self.x[head_slice], self.z[head_slice]) | |
self.line3e.set_data(self.x[head], self.z[head]) | |
self._drawn_artists = [self.line1, self.line1a, self.line1e, | |
self.line2, self.line2a, self.line2e, | |
self.line3, self.line3a, self.line3e] | |
def new_frame_seq(self): | |
return iter(range(self.t.size)) | |
def _init_draw(self): | |
lines = [self.line1, self.line1a, self.line1e, | |
self.line2, self.line2a, self.line2e, | |
self.line3, self.line3a, self.line3e] | |
for l in lines: | |
l.set_data([], []) | |
ani = SubplotAnimation() | |
ani.save('test_sub.mp4') | |
#plt.show() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment