<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>old_animation example code: movie_demo.py — Matplotlib v1.1.1 documentation</title> <link rel="stylesheet" href="../../_static/mpl.css" type="text/css" /> <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../', VERSION: '1.1.1', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../_static/jquery.js"></script> <script type="text/javascript" src="../../_static/underscore.js"></script> <script type="text/javascript" src="../../_static/doctools.js"></script> <link rel="search" type="application/opensearchdescription+xml" title="Search within Matplotlib v1.1.1 documentation" href="../../_static/opensearch.xml"/> <link rel="top" title="Matplotlib v1.1.1 documentation" href="../../index.html" /> </head> <body> <!-- Piwik --> <script type="text/javascript"> if ("matplotlib.sourceforge.net" == document.location.hostname || "matplotlib.sf.net" == document.location.hostname) { var pkBaseURL = (("https:" == document.location.protocol) ? "https://apps.sourceforge.net/piwik/matplotlib/" : "http://apps.sourceforge.net/piwik/matplotlib/"); document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E")); } </script> <script type="text/javascript"> if ("matplotlib.sourceforge.net" == document.location.hostname || "matplotlib.sf.net" == document.location.hostname) { piwik_action_name = ''; piwik_idsite = 1; piwik_url = pkBaseURL + "piwik.php"; piwik_log(piwik_action_name, piwik_idsite, piwik_url); document.write(unescape('%3Cobject%3E%3Cnoscript%3E%3Cp%3E%3Cimg src="http://apps.sourceforge.net/piwik/matplotlib/piwik.php?idsite=1" alt="piwik"/%3E%3C/p%3E%3C/noscript%3E%3C/object%3E')); } </script> <!-- End Piwik Tag --> <link rel="shortcut icon" href="_static/favicon.ico"> <div style="background-color: white; text-align: left; padding: 10px 10px 15px 15px"> <a href="../../index.html"><img src="../../_static/logo2.png" border="0" alt="matplotlib"/></a> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li><a href="../../index.html">home</a>| </li> <li><a href="../../search.html">search</a>| </li> <li><a href="../index.html">examples</a>| </li> <li><a href="../../gallery.html">gallery</a>| </li> <li><a href="../../contents.html">docs</a> »</li> </ul> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../../_sources/examples/old_animation/movie_demo.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../../search.html" method="get"> <input type="text" name="q" size="18" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="old-animation-example-code-movie-demo-py"> <span id="old-animation-movie-demo"></span><h1>old_animation example code: movie_demo.py<a class="headerlink" href="#old-animation-example-code-movie-demo-py" title="Permalink to this headline">ΒΆ</a></h1> <p>[<a class="reference external" href="movie_demo.py">source code</a>]</p> <div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/python</span> <span class="c">#</span> <span class="c"># Josh Lifton 2004</span> <span class="c">#</span> <span class="c"># Permission is hereby granted to use and abuse this document</span> <span class="c"># so long as proper attribution is given.</span> <span class="c">#</span> <span class="c"># This Python script demonstrates how to use the numarray package</span> <span class="c"># to generate and handle large arrays of data and how to use the</span> <span class="c"># matplotlib package to generate plots from the data and then save</span> <span class="c"># those plots as images. These images are then stitched together</span> <span class="c"># by Mencoder to create a movie of the plotted data. This script</span> <span class="c"># is for demonstration purposes only and is not intended to be</span> <span class="c"># for general use. In particular, you will likely need to modify</span> <span class="c"># the script to suit your own needs.</span> <span class="c">#</span> <span class="kn">import</span> <span class="nn">matplotlib</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s">'Agg'</span><span class="p">)</span> <span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span> <span class="c"># For plotting graphs.</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span> <span class="kn">import</span> <span class="nn">subprocess</span> <span class="c"># For issuing commands to the OS.</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="c"># For determining the Python version.</span> <span class="c">#</span> <span class="c"># Print the version information for the machine, OS,</span> <span class="c"># Python interpreter, and matplotlib. The version of</span> <span class="c"># Mencoder is printed when it is called.</span> <span class="c">#</span> <span class="k">print</span> <span class="s">'Executing on'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">uname</span><span class="p">()</span> <span class="k">print</span> <span class="s">'Python version'</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">version</span> <span class="k">print</span> <span class="s">'matplotlib version'</span><span class="p">,</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">__version__</span> <span class="n">not_found_msg</span> <span class="o">=</span> <span class="s">"""</span> <span class="s">The mencoder command was not found;</span> <span class="s">mencoder is used by this script to make an avi file from a set of pngs.</span> <span class="s">It is typically not installed by default on linux distros because of</span> <span class="s">legal restrictions, but it is widely available.</span> <span class="s">"""</span> <span class="k">try</span><span class="p">:</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s">'mencoder'</span><span class="p">])</span> <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span> <span class="k">print</span> <span class="s">"mencoder command was found"</span> <span class="k">pass</span> <span class="c"># mencoder is found, but returns non-zero exit as expected</span> <span class="c"># This is a quick and dirty check; it leaves some spurious output</span> <span class="c"># for the user to puzzle over.</span> <span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span> <span class="k">print</span> <span class="n">not_found_msg</span> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s">"quitting</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span> <span class="c">#</span> <span class="c"># First, let's create some data to work with. In this example</span> <span class="c"># we'll use a normalized Gaussian waveform whose mean and</span> <span class="c"># standard deviation both increase linearly with time. Such a</span> <span class="c"># waveform can be thought of as a propagating system that loses</span> <span class="c"># coherence over time, as might happen to the probability</span> <span class="c"># distribution of a clock subjected to independent, identically</span> <span class="c"># distributed Gaussian noise at each time step.</span> <span class="c">#</span> <span class="k">print</span> <span class="s">'Initializing data set...'</span> <span class="c"># Let the user know what's happening.</span> <span class="c"># Initialize variables needed to create and store the example data set.</span> <span class="n">numberOfTimeSteps</span> <span class="o">=</span> <span class="mi">100</span> <span class="c"># Number of frames we want in the movie.</span> <span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">,</span><span class="mi">10</span><span class="p">,</span><span class="mf">0.01</span><span class="p">)</span> <span class="c"># Values to be plotted on the x-axis.</span> <span class="n">mean</span> <span class="o">=</span> <span class="o">-</span><span class="mi">6</span> <span class="c"># Initial mean of the Gaussian.</span> <span class="n">stddev</span> <span class="o">=</span> <span class="mf">0.2</span> <span class="c"># Initial standard deviation.</span> <span class="n">meaninc</span> <span class="o">=</span> <span class="mf">0.1</span> <span class="c"># Mean increment.</span> <span class="n">stddevinc</span> <span class="o">=</span> <span class="mf">0.1</span> <span class="c"># Standard deviation increment.</span> <span class="c"># Create an array of zeros and fill it with the example data.</span> <span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">numberOfTimeSteps</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)),</span> <span class="nb">float</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">numberOfTimeSteps</span><span class="p">)</span> <span class="p">:</span> <span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="n">np</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">*</span><span class="n">stddev</span><span class="p">))</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="p">((</span><span class="n">x</span><span class="o">-</span><span class="n">mean</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mi">2</span><span class="o">*</span><span class="n">stddev</span><span class="p">))</span> <span class="n">mean</span> <span class="o">=</span> <span class="n">mean</span> <span class="o">+</span> <span class="n">meaninc</span> <span class="n">stddev</span> <span class="o">=</span> <span class="n">stddev</span> <span class="o">+</span> <span class="n">stddevinc</span> <span class="k">print</span> <span class="s">'Done.'</span> <span class="c"># Let the user know what's happening.</span> <span class="c">#</span> <span class="c"># Now that we have an example data set (x,y) to work with, we can</span> <span class="c"># start graphing it and saving the images.</span> <span class="c">#</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">y</span><span class="p">))</span> <span class="p">:</span> <span class="c">#</span> <span class="c"># The next four lines are just like MATLAB.</span> <span class="c">#</span> <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">[</span><span class="n">i</span><span class="p">],</span><span class="s">'b.'</span><span class="p">)</span> <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">((</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span><span class="o">-</span><span class="mf">0.25</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span> <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s">'time (ms)'</span><span class="p">)</span> <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s">'probability density function'</span><span class="p">)</span> <span class="c">#</span> <span class="c"># Notice the use of LaTeX-like markup.</span> <span class="c">#</span> <span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s">r'$\cal{N}(\mu, \sigma^2)$'</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span> <span class="c">#</span> <span class="c"># The file name indicates how the image will be saved and the</span> <span class="c"># order it will appear in the movie. If you actually wanted each</span> <span class="c"># graph to be displayed on the screen, you would include commands</span> <span class="c"># such as show() and draw() here. See the matplotlib</span> <span class="c"># documentation for details. In this case, we are saving the</span> <span class="c"># images directly to a file without displaying them.</span> <span class="c">#</span> <span class="n">filename</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="s">'</span><span class="si">%03d</span><span class="s">'</span> <span class="o">%</span> <span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="s">'.png'</span> <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span> <span class="c">#</span> <span class="c"># Let the user know what's happening.</span> <span class="c">#</span> <span class="k">print</span> <span class="s">'Wrote file'</span><span class="p">,</span> <span class="n">filename</span> <span class="c">#</span> <span class="c"># Clear the figure to make way for the next image.</span> <span class="c">#</span> <span class="n">plt</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span> <span class="c">#</span> <span class="c"># Now that we have graphed images of the dataset, we will stitch them</span> <span class="c"># together using Mencoder to create a movie. Each image will become</span> <span class="c"># a single frame in the movie.</span> <span class="c">#</span> <span class="c"># We want to use Python to make what would normally be a command line</span> <span class="c"># call to Mencoder. Specifically, the command line call we want to</span> <span class="c"># emulate is (without the initial '#'):</span> <span class="c"># mencoder mf://*.png -mf type=png:w=800:h=600:fps=25 -ovc lavc -lavcopts vcodec=mpeg4 -oac copy -o output.avi</span> <span class="c"># See the MPlayer and Mencoder documentation for details.</span> <span class="c">#</span> <span class="n">command</span> <span class="o">=</span> <span class="p">(</span><span class="s">'mencoder'</span><span class="p">,</span> <span class="s">'mf://*.png'</span><span class="p">,</span> <span class="s">'-mf'</span><span class="p">,</span> <span class="s">'type=png:w=800:h=600:fps=25'</span><span class="p">,</span> <span class="s">'-ovc'</span><span class="p">,</span> <span class="s">'lavc'</span><span class="p">,</span> <span class="s">'-lavcopts'</span><span class="p">,</span> <span class="s">'vcodec=mpeg4'</span><span class="p">,</span> <span class="s">'-oac'</span><span class="p">,</span> <span class="s">'copy'</span><span class="p">,</span> <span class="s">'-o'</span><span class="p">,</span> <span class="s">'output.avi'</span><span class="p">)</span> <span class="c">#os.spawnvp(os.P_WAIT, 'mencoder', command)</span> <span class="k">print</span> <span class="s">"</span><span class="se">\n\n</span><span class="s">about to execute:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n\n</span><span class="s">"</span> <span class="o">%</span> <span class="s">' '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">command</span><span class="p">)</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">command</span><span class="p">)</span> <span class="k">print</span> <span class="s">"</span><span class="se">\n\n</span><span class="s"> The movie was written to 'output.avi'"</span> <span class="k">print</span> <span class="s">"</span><span class="se">\n\n</span><span class="s"> You may want to delete *.png now.</span><span class="se">\n\n</span><span class="s">"</span> </pre></div> </div> <p>Keywords: python, matplotlib, pylab, example, codex (see <a class="reference internal" href="../../faq/howto_faq.html#how-to-search-examples"><em>Search examples</em></a>)</p> </div> </div> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../../py-modindex.html" title="Python Module Index" >modules</a> |</li> <li><a href="../../index.html">home</a>| </li> <li><a href="../../search.html">search</a>| </li> <li><a href="../index.html">examples</a>| </li> <li><a href="../../gallery.html">gallery</a>| </li> <li><a href="../../contents.html">docs</a> »</li> </ul> </div> <div class="footer"> © Copyright 2008, John Hunter, Darren Dale, Michael Droettboom. Last updated on Oct 04, 2012. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7. </div> </body> </html>