Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > a44f8c7e78ee9c5838c1fb080c9e7630 > files > 1071

python-matplotlib-doc-1.1.1-1mdv2010.1.noarch.rpm

.. _animation-subplots:

animation example code: subplots.py
===================================

[`source code <subplots.py>`_]

::

    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(1, 2, 1)
            ax2 = fig.add_subplot(2, 2, 2)
            ax3 = fig.add_subplot(2, 2, 4)
    
            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(-2, 2)
            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_xlim(-1, 1)
            ax2.set_ylim(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)
    
            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.y[:i], self.z[:i])
            self.line2a.set_data(self.y[head_slice], self.z[head_slice])
            self.line2e.set_data(self.y[head], self.z[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()
    

Keywords: python, matplotlib, pylab, example, codex (see :ref:`how-to-search-examples`)