{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", "\n", "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*\n", "\n", "*No changes were made to the contents of this notebook from the original.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Further Resources](03.13-Further-Resources.ipynb) | [Contents](Index.ipynb) | [Simple Line Plots](04.01-Simple-Line-Plots.ipynb) >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualization with Matplotlib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll now take an in-depth look at the Matplotlib package for visualization in Python.\n", "Matplotlib is a multi-platform data visualization library built on NumPy arrays, and designed to work with the broader SciPy stack.\n", "It was conceived by John Hunter in 2002, originally as a patch to IPython for enabling interactive MATLAB-style plotting via gnuplot from the IPython command line.\n", "IPython's creator, Fernando Perez, was at the time scrambling to finish his PhD, and let John know he wouldn’t have time to review the patch for several months.\n", "John took this as a cue to set out on his own, and the Matplotlib package was born, with version 0.1 released in 2003.\n", "It received an early boost when it was adopted as the plotting package of choice of the Space Telescope Science Institute (the folks behind the Hubble Telescope), which financially supported Matplotlib’s development and greatly expanded its capabilities.\n", "\n", "One of Matplotlib’s most important features is its ability to play well with many operating systems and graphics backends.\n", "Matplotlib supports dozens of backends and output types, which means you can count on it to work regardless of which operating system you are using or which output format you wish.\n", "This cross-platform, everything-to-everyone approach has been one of the great strengths of Matplotlib.\n", "It has led to a large user base, which in turn has led to an active developer base and Matplotlib’s powerful tools and ubiquity within the scientific Python world.\n", "\n", "In recent years, however, the interface and style of Matplotlib have begun to show their age.\n", "Newer tools like ggplot and ggvis in the R language, along with web visualization toolkits based on D3js and HTML5 canvas, often make Matplotlib feel clunky and old-fashioned.\n", "Still, I'm of the opinion that we cannot ignore Matplotlib's strength as a well-tested, cross-platform graphics engine.\n", "Recent Matplotlib versions make it relatively easy to set new global plotting styles (see [Customizing Matplotlib: Configurations and Style Sheets](04.11-Settings-and-Stylesheets.ipynb)), and people have been developing new packages that build on its powerful internals to drive Matplotlib via cleaner, more modern APIs—for example, Seaborn (discussed in [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb)), [ggpy](http://yhat.github.io/ggpy/), [HoloViews](http://holoviews.org/), [Altair](http://altair-viz.github.io/), and even Pandas itself can be used as wrappers around Matplotlib's API.\n", "Even with wrappers like these, it is still often useful to dive into Matplotlib's syntax to adjust the final plot output.\n", "For this reason, I believe that Matplotlib itself will remain a vital piece of the data visualization stack, even if new tools mean the community gradually moves away from using the Matplotlib API directly." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## General Matplotlib Tips\n", "\n", "Before we dive into the details of creating visualizations with Matplotlib, there are a few useful things you should know about using the package." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Importing Matplotlib\n", "\n", "Just as we use the ``np`` shorthand for NumPy and the ``pd`` shorthand for Pandas, we will use some standard shorthands for Matplotlib imports:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib as mpl\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``plt`` interface is what we will use most often, as we shall see throughout this chapter." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting Styles\n", "\n", "We will use the ``plt.style`` directive to choose appropriate aesthetic styles for our figures.\n", "Here we will set the ``classic`` style, which ensures that the plots we create use the classic Matplotlib style:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "plt.style.use('classic')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Throughout this section, we will adjust this style as needed.\n", "Note that the stylesheets used here are supported as of Matplotlib version 1.5; if you are using an earlier version of Matplotlib, only the default style is available.\n", "For more information on stylesheets, see [Customizing Matplotlib: Configurations and Style Sheets](04.11-Settings-and-Stylesheets.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ``show()`` or No ``show()``? How to Display Your Plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A visualization you can't see won't be of much use, but just how you view your Matplotlib plots depends on the context.\n", "The best use of Matplotlib differs depending on how you are using it; roughly, the three applicable contexts are using Matplotlib in a script, in an IPython terminal, or in an IPython notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting from a script\n", "\n", "If you are using Matplotlib from within a script, the function ``plt.show()`` is your friend.\n", "``plt.show()`` starts an event loop, looks for all currently active figure objects, and opens one or more interactive windows that display your figure or figures.\n", "\n", "So, for example, you may have a file called *myplot.py* containing the following:\n", "\n", "```python\n", "# ------- file: myplot.py ------\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "x = np.linspace(0, 10, 100)\n", "\n", "plt.plot(x, np.sin(x))\n", "plt.plot(x, np.cos(x))\n", "\n", "plt.show()\n", "```\n", "\n", "You can then run this script from the command-line prompt, which will result in a window opening with your figure displayed:\n", "\n", "```\n", "$ python myplot.py\n", "```\n", "\n", "The ``plt.show()`` command does a lot under the hood, as it must interact with your system's interactive graphical backend.\n", "The details of this operation can vary greatly from system to system and even installation to installation, but matplotlib does its best to hide all these details from you.\n", "\n", "One thing to be aware of: the ``plt.show()`` command should be used *only once* per Python session, and is most often seen at the very end of the script.\n", "Multiple ``show()`` commands can lead to unpredictable backend-dependent behavior, and should mostly be avoided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting from an IPython shell\n", "\n", "It can be very convenient to use Matplotlib interactively within an IPython shell (see [IPython: Beyond Normal Python](01.00-IPython-Beyond-Normal-Python.ipynb)).\n", "IPython is built to work well with Matplotlib if you specify Matplotlib mode.\n", "To enable this mode, you can use the ``%matplotlib`` magic command after starting ``ipython``:\n", "\n", "```ipython\n", "In [1]: %matplotlib\n", "Using matplotlib backend: TkAgg\n", "\n", "In [2]: import matplotlib.pyplot as plt\n", "```\n", "\n", "At this point, any ``plt`` plot command will cause a figure window to open, and further commands can be run to update the plot.\n", "Some changes (such as modifying properties of lines that are already drawn) will not draw automatically: to force an update, use ``plt.draw()``.\n", "Using ``plt.show()`` in Matplotlib mode is not required." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plotting from an IPython notebook\n", "\n", "The IPython notebook is a browser-based interactive data analysis tool that can combine narrative, code, graphics, HTML elements, and much more into a single executable document (see [IPython: Beyond Normal Python](01.00-IPython-Beyond-Normal-Python.ipynb)).\n", "\n", "Plotting interactively within an IPython notebook can be done with the ``%matplotlib`` command, and works in a similar way to the IPython shell.\n", "In the IPython notebook, you also have the option of embedding graphics directly in the notebook, with two possible options:\n", "\n", "- ``%matplotlib notebook`` will lead to *interactive* plots embedded within the notebook\n", "- ``%matplotlib inline`` will lead to *static* images of your plot embedded in the notebook\n", "\n", "For this book, we will generally opt for ``%matplotlib inline``:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After running this command (it needs to be done only once per kernel/session), any cell within the notebook that creates a plot will embed a PNG image of the resulting graphic:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "x = np.linspace(0, 10, 100)\n", "\n", "fig = plt.figure()\n", "plt.plot(x, np.sin(x), '-')\n", "plt.plot(x, np.cos(x), '--');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Saving Figures to File\n", "\n", "One nice feature of Matplotlib is the ability to save figures in a wide variety of formats.\n", "Saving a figure can be done using the ``savefig()`` command.\n", "For example, to save the previous figure as a PNG file, you can run this:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "fig.savefig('my_figure.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now have a file called ``my_figure.png`` in the current working directory:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-r--r-- 1 jakevdp staff 16K Aug 11 10:59 my_figure.png\r\n" ] } ], "source": [ "!ls -lh my_figure.png" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To confirm that it contains what we think it contains, let's use the IPython ``Image`` object to display the contents of this file:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbAAAAEgCAYAAADVKCZpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XdYFdfWBvD3UBRsCBZURBSkCaLY+7UBioAYG/YYjbFF\nk5t81yT3xiQmRo0pajSJiSUae0GK2BHU2BtWigUbKjbU0MuZ74998WoUpMyZPbPP+j2PTwSPM2/U\nc9bMnr3X1kmSJIEQQgjRGBPeAQghhJCyoAJGCCFEk6iAEUII0SQqYIQQQjSJChghhBBNogJGCCFE\nk6iAEUII0SQqYIQQQjSJChghhBBNogJGCCFEk6iAEUII0SQqYIQQQjSJChghhBBNogJGCCFEk6iA\nEUII0SQqYIQQQjSJChghhBBNogJGCCFEk6iAEUII0SQqYIQQQjSJChghhBBNogJGCCFEk6iAEUII\n0SRVFbAxY8bA1tYWXl5eRb5mypQpcHZ2RvPmzREXF6dgOkIIIWqiqgI2evRo7Ny5s8hf3759O65c\nuYJLly5h8eLFGD9+vILpCCGEqImqClinTp1gbW1d5K+Hh4dj5MiRAIC2bdviyZMnSE1NVSoeIYQQ\nFVFVAXudlJQU2NvbP/vazs4OKSkpHBMRQgjhRVMFjBBCCClkxjtAadjZ2eHmzZvPvr516xbs7Oxe\n+VqdTqdULEIIEYokSbwjlIjq7sAkSSryDy8oKAgrV64EABw5cgTVq1eHra3ta4/1OOsxZsTOwOiw\n0c++p8YfJ05IcHeXEBAgISpKQm7uq1+n10s4flzCmDES6teXEBlZ/HE/++wz7v9vavlBfxbF/1kU\n6Au45yrvj0ePJPTrJ6FBAwmzZ0u4f7/o1z59KuGbbyRYWn6GadPY17zz8/6hJaq6Axs6dChiY2Px\n8OFDNGjQAF988QVyc3Oh0+kwbtw4+Pv7Y9u2bWjcuDEqV66M5cuXl+i4VhZW+PQfnxo4fdnl5QFf\nfw0sWgTMmwcMGQIUdwOp0wGtWgFLlgAxMcDYscDatcCPPwI2NsrlJuIx0ZX8mjbpYRKir0ZjfKvx\nqhnxOHYMGDwY6NsXWLcOqFCh+NdXrQr83/8Bd++yH+7uQFgYe38R9VNVAVuzZs1rX7Nw4UIFkign\nKwsIDgYkCTh9GihiRLRI3boB584BH37Ifr5nD1CrlmGyEnHcTb+L5LTkch3DVGeKxScXY/+N/VgS\nuASVK1SWKV3ZLFwIzJgBLF4M9OtXut9btSrw3XesePn7A2vWAD17GiYnkY/qhhCVlpOfw+3c2dns\njWZjA2zbVvriVahSJXb3FhQEdO3KriSf17Vr1/JGFQb9WbA7pw5LO6Bi44rlOo6TjRMOjzkME50J\ngtcHc30vzZ8PLFgAHDlS+uIF/O/fRXAwsHEjMHQosGGDvBmJ/HSS1gY9S0in05VoPNf3D1+Mbj4a\nQ5oOUSDV/+TksDda1arA6tWAmUz3wjNmsKvHvXuBevXkOSYRR3JaMjou64gZ3WZgbIuxshwzX5+P\nQRsHwczEDGv7r4Wpiaksxy2plSuB//wHOHAAcHCQ55hnzrA7sdmzgREj5DmmVpT0s1MNjP4O7Dvf\n7zB1x1QcuH5AsXMWFAADBwKVK8tbvABg+nRg1CjAxwdIT5fvuET7/sr5C0HrgvBxp49lK14AYGZi\nhjX91+Bh1kPsv75ftuOWRHg48K9/ATt3yle8AKBZM2D3buCDD4CjR+U7LpGX0d+BAcCuK7swYssI\n7H9zP1xruho4GfD558C+fcCuXYC5uWHOMWYMkJnJ7sZU8nydcBayKQRVK1TFr4G/GmTSRYG+QNG7\nr6NHgcBANvxuqEkXkZHAhAlscoixjGho6Q6MCth/LTm1BLP/nI2T407CysLKYLn27AFGjgROngTq\n1jXYaZCVBXToALz1FvDuu4Y7D9GOU3dOwbO2JyqYvmZqngY8fQp4ewPfflu2Z16lMXMmK2SxsYCF\nhWHPpQZUwFSgLH8J47eORwf7DhjZbKRBMt25A7RsCfzxB9Cjh0FO8YKrV4F27dgwS/v2hj8fIUoZ\nPhyoUgX45RfDn0uS2NT8qlWBpUsNfz7eqICpQFn+EvSSvlTrYEojP59Ny+3WDfjsM4Oc4pUiI4GJ\nE4G4OKBGDeXOS4ihrFrF7opOnmQzcJWQkcGei82fD/Tpo8w5eaECpgJq+0v45hv2oHnXLsBU2Ula\nmDKFPQ9bskTZ8xLjFpMcg9SMVIR4hsh2zCtX2KjCnj2soCgpJoZNkDp/HqhWTdlzK0ltn53FoQKm\ngOvX2dDh0aOAk5Py53/6FPDwYDMeu3RR/vyEj7SsNFhbFr09kaGdv3ce3VZ0w8lxJ9HAqkG5jydJ\nbJ1jcDDw/vvlz1cW48YBJibKDF3yoqbPztcx+mn0SpgyBZg6lU/xAtjV4oIFwDvvsPVnRHxPsp+g\n2S/NcPH+RW4ZPGt7YlLrSfhw14eyHG/tWnYxNmWKLIcrk7lzgagoNqGD8EcFrBin7pxCZl5muY4R\nEQEkJLC1Kjz16we4ugJz5vDNQZTx0Z6P0LtxbzSp1YRrjmkdp+FYyjHsTd5bruP89RfrWbhwofJD\n8M+zsgJ++on1H80s30cDkQENIRZj8KbB8KzlWeZGwBkZbOhu2TKge/dyRZHFzZts6vGhQ4CLC+80\nxFDO3zuPHit7IHFyIqpbVOcdB6HxoZgeMx2n3zkNc9OyLXycNo21SFuxQuZwZTRgANCiBfDJJ7yT\nyE9LQ4hUwIqRnJaMVr+1wtnxZ2FXrfSNCj/+mBWNVavKFUNW333HHkZv3co7CTEU/9X+8HPyw9R2\nU3lHAcC2NRq/dTw+6vQRGlk3KvXvT0gAOnVikyfq1DFAwDK4fJlNJomPF695NhUwFZDrL+HjPR/j\ndvptrAgu3aVfSgrg5cU6xatpBX9ODhtKXLWKfSgQsURfjcY7W9/BxUkXhViwLElAr17sB6+JG0WZ\nOpXlW7CAdxJ5UQFTAbn+Ep7mPIXbQjdEDIlAq3ol71czYQJb+PjNN+WOILsVK4DffmPNT6nNlFie\n5jzFtcfX4GXrxTuKLKKj2XvpwgXDtV0rq/v32f5hhw8Dzs6808iHCpgKyPmXsOTUEoTGh2LbsG0l\nev2VK0DbtkBiojoXDxcUsLvDb74Rf1Em0S5JYqMEkyax7U3UaNYs4NQptgWLKKiAqYCcfwn5+nw8\nzXkKG8uSbXc8YgS7Ips+XZbTG0R4OMt3+jRb10KI2uzYAfzzn2wYnufMw+JkZrIh+Y0b2TMxEVAB\nUwFefwnnz7M+h5cvsyFEtZIk1uz33XfVe3VLxJSem47s/GzUrFSzyNdIEhvF+PBDYNAgBcOVwdKl\nbI3anj28k8hDSwWMrr1l9umnbMqvmosXwJ59zZrF8ubn805DjMl3h77DJ9HFzz+PimI7lg8YoFCo\nchg5Erh0iW25QpRFBUxGZ86wf8QTJvBOUjJdu7IZkps28U5CymPbpW2KbyRZHu+2fReh8aFITkt+\n5a9LEhve/uILbQxvm5uzRdazZvFOYnw08M9DO+bOZVNrLS15Jym5adNYdw6NjBiQvynQF+CfO/+J\nvII83lFKzMbSBhNaTcDMAzNf+esREezfY3CwwsHKYcwYNhvxwgXeSYwLFbBSuv74Oqbtnvby968D\n27ezfoNa4u8P5OWx7dOJ9oTGh6K6RXV0b6SCVi+l8M/2/0RofChSnqa89Gtz57IOF1pa4mFpCbz3\nHjB7Nu8kxoUKWCnVqVIHa86vwek7p1/4/g8/sKswK8Nt5mwQJiasTyP1SNQeSZIw88BMfNL5E+i0\n9GkPwNrSGsO9hmPR8UUvfP/oUdYEwNC7LBvChAnsIvbqVd5JjAcVsFKqaFYR77Z5F/OOznv2vUeP\ngJUr2fChFg0Zwh5CnzjBOwkpje2Xt0Mv6RHgEsA7Spl80P4D+Dv7v/C9775j7yMzM06hysHKio3A\nzJ3LO4nxoGn0ZfAo6xGcFjghflI86lSpg5kz2bT55csNcjpFzJsHHDwo1oJM0Q3ZPAR9nPtguNdw\n3lFkkZwMtGoFXLum/lm8Rbl/nzXKTkrSbo9ELU2jpwJWRhO2TkDtyrXxcfsv0LAha3nj4WGw0xlc\nejrQqBHrVC9SWxyR5RXkQafTwcxEg7crr/D++2xGnxrbr5XGmDFs7z+tdqqnAqYChv5LiL8fj+Fb\nhuMdnEB4uA5RUQY7lWI++YR1Fpg37/WvJUROjx8Djo7A2bNA/fq805RPXBwQGMjuKLU4FEoFTAWU\n+EvILyhAyxam+PZbwMfHoKdSxPXrbI+jGzeAypV5pyHGZO5cto5STVsPlUfnzuxZnhYWYv+dlgoY\nTeIoh2NHTZGVxVpHicDBgTVPXbOGdxJiTAoKgHnLUjBk/A3eUWTz7rvAjz/yTiE+KmDl8PPPbOqs\nFroFlNSkScCiRbSwmShnxw5A13wlwh59yTuKbPr1Y7tSnD3LO4nYBProVdb9+2xX41GjeCeRV8+e\n7DnYoUO8k5BXiUmOwaaLYvX++uUX4IPuo7EpfhOeZD/hHUcW5ubA+PF0F2ZoVMDKaNkydpVlU7Id\nVjTDxITdVS5a9PrXEuXN+nMWsvKyeMeQzfXr7GJp3NA68HH0wepzq3lHks24cazP6KNHvJOIiwpY\nGRQUsKvGiRPZ13uu7sGKuBV8Q8nozTdZR4HUVN5JyPOupl3F6bunMchD5fuLlMKSJcCwYWzS0Dst\n38EvJ37RzASC16ldGwgIAH7/nXcScVEBK4MdO9gixVat2NdVK1TFl/u/hF7S8w0mE2trNnvqt994\nJyHPW3Z6GYY3HY6KZhV5R5FFXh7bS6uwf2i3Rt2QnZ+NI7eO8A0mo7Fj2f+jIDVZdaiAlUHh5I1C\nbezaoJJ5JcRei+WWSW7jx7M3nl6Mmqx5+fp8LI9bjjEtxvCOIpvISLbgt7ABgInOBD/3+Rm2VWz5\nBpNRly5Abi7r8UjkRwWslFJS2Jj94MH/+55Op8O4luPw68lf+QWTWYsWQLVqQGws7yQEYJM37KvZ\nw7O2J+8osvnlF3ah9Lwejj3gaO3IJ5AB6HSsM8fSpbyTiIkWMpfSrFlshf2vf6tVaVlpaDS/ES5P\nuVzsVulaMn8+cPy4OItLtUySJDzKeoQalWrwjiKLq1eBtm2BmzcBCwveaQzrzh2gSRP2/1qlCu80\nr0cLmQUlSaxh7+jRL/+ataU1+rr1xZb4LcoHM5Bhw9hSgSdizGzWNJ1OJ0zxAoAVK4ChQ8UvXgBQ\nty4bStywgXcS8dAdWCkcPMiGA+LjX73ZXnpuOiqbV9bc3kzFGTiQrQ3T2kadRL30etb3MDSUDVUb\ng4gIttmlFtZX0h2YoArvvoqqT1UqVBGqeAHAW2+xNW+EyGX/fvZ81du7+Nc9zHyoTCAF+PuzbWLi\n43knEQsVsBLKyAA2bwZGjOCdRFm+vmziyvnzvJMQUfz+O1trWNy13s0nN9HkpybIK8hTKpZBmZmx\nrj1LlvBOIhYqYCW0eTPQoQNQrx7vJMoyNWVvPC1v1qllEYkRuJ9xn3cM2aSnA2Fh7Plqceyt7OFs\n44ztl7crE0wBo0cDq1cD+fm8k4iDClgJFTV5wxi8+SabiZgnxsWwZmTnZ+PNsDeRU5DDO4psNm9m\nW43YlmCp16hmo7DijDgdblxc2I4P0dG8k4iDClgJJCcD586xTepKIi0rDWvPrTVsKAU5OwONGwO7\ndvFOYly2Jm2Fd11v1K+m8R0en7NiRckbYA/yGIToq9FCPQsbPpyWpciJClgJrFkDDBoEVCxhBx8T\nnQnGR40X6o03bBgb/iDK+ePsHxjhJc5D12vX2PYiJb0QtLKwQm/n3lh3fp1Bcylp8GDWgSQ9nXcS\nMVABew1JYh/crxuzf56VhRX8nf2x4YI4Cz8GDQK2baM3nlIeZD5A7LVYvOH+Bu8osvnjD/YBXtIL\nQQCY2GoiLMzEWSxWuzbQsSN7DkjKjwrYa5w5w/bHat++dL9vpNdIrDy70jChOKhZk+3WTG88ZWy4\nsAH+zv6oVrEa7yiykCQ2kjF8eOl+X2eHzkL1fwTYTGYaRpSH6grYjh074ObmBhcXF8yZM+elX9+3\nbx+qV6+OFi1aoEWLFvjqq68MmmfNGtYxoLS7Lvs4+eDa42tIephkmGAc0DCicnwcfTC9y3TeMWRz\n5gyQnQ20a8c7CX9BQay57927vJNon6o6cej1eri4uCA6Ohr16tVD69atsW7dOri5uT17zb59+/Dd\nd98hIiKi2GPJsZpcr2ezhrZvBzzL0EP1/R3vw8rCCp93/bxcOdQiIwOoXx9ITGRDIYSU1LRpbEnG\n11/zTqIOb74JNG8OvPce7yQvo04cZXTs2DE4OzvDwcEB5ubmCAkJQXh4+EuvU+oP98ABtuNyWYoX\nAExtNxUhniHyhuKocmW2Qd/69byTEC3R64G1a4EhQ3gnUQ8aRpSHqgpYSkoK7O3tn31dv359pKSk\nvPS6w4cPo3nz5ujTpw8uXrxosDyFw4dl1bB6Q7jVdHv9CzVk6FAaRiSlc+gQax3VtCnvJOrRtSvr\nUp+QwDuJtqmqgJVEy5YtcePGDcTFxWHy5MkIDg42yHlyc9miyxBxbqBk4ePD1sVdvsw7CdGKtWvL\ndyEIsLWVPn/4CLPruakpa5RNoxnlY8Y7wPPs7Oxw48aNZ1/funULdnZ2L7ymynMb6vTu3RsTJ07E\no0ePYGNj89LxPv/882c/79q1K7p27VriLDt2sD18HBxKnt8YmJmxKfVr1wKffso7jXgeZD5ADcsa\nwjSFzssDNm4Ejhwp33GsLa1xN/0uDt44iM4OneUJx9ngwcDYscBnn/HNERsbi1it7lwrqUh+fr7k\n5OQkXbt2TcrJyZGaNWsmXbx48YXX3L1799nPjx49Kjk4OLzyWOX9XwsJkaSffirXIYR14IAkNW3K\nO4V49Hq95DjfUTp79yzvKLLZvl2S2raV51gz98+UxkeOl+dgKqDXS1KDBpJ07hzvJC9SWVkolqqG\nEE1NTbFw4UL4+vrCw8MDISEhcHd3x+LFi/Hrf7dA3rRpEzw9PeHt7Y333nsP6w1wD56VxWYe9u8v\nz/EkScK9jHvyHEwFOnQAHj6krSHkdvLOSZjoTOBZu4yzhlRIjuHDQiGeIdgUv0mYDvU6HQ0jlpeq\nptHLqTxTQUNDgZ9+AvbskSfLlUdX0Hl5Z9x8/yZMTUzlOShn773HZmhOF2epEncf7voQFmYW+Kq7\nYdc2KiU7m+1GfPEi+68c2i9tj+ldpqO3c295DsjZ8eNsfWViYvHbyyiJptFr3IYN7MpILk42TrCt\nYosDNw7Id1DOBg2iLdLlpJf02HBhAwZ7DOYdRTa7dgHNmslXvABgsMdgod5HrVoBBQVAXBzvJNpE\nBexvMjPZBI43ZG5BF+IRIlSH+nbtgCdPgAsXeCcRw5FbR1ClQhWhhg83bpT3QhAA3m3zLr7uIc5q\naJ2OXQzSMGLZUAH7m+3b2VVRrVryHneQxyBsSdiCfL0Yu9mZmLAPp40beScRQ3puOt5v974wsw9z\ncoCtW+W/EBRlCP55gwezAqaRUTtVoQL2Nxs3sisiuTWybgR7K3scuC7O8EfhMCK98crP18kXb7d8\nm3cM2ezezRYuyzl8KKpmzYAKFdjzMFI6VMCek5nJ7sD69TPM8ae0mYLs/GzDHJyDtm1Zf0QaRiR/\nt3EjMGAA7xTaoNOxuzB6plx6NAvxOZs2AYsXs6tHUjIffghUqgTMmME7CVGLnBx253XuHPC3PgSk\nCGfOsAvnK1f4z0akWYgaZYiHzqKjYUTyd9HRrIuNIYvXnb/uIDzh5UbfWuXlxZ4r02zE0qEC9l+F\nsw8NNXwoqtat2TAiLWomhZQYPszKz8LbkW8LMylKp2MTXjZv5p1EW6iA/deuXYaZfSi6wjdeaCjv\nJNo0/8h87Ly8k3cM2eTmAhERhi9gjtaOsLeyx/7r+w17IgX1708FrLSogP1XaKj8U36NBRWwspEk\nCQuPL0SNSjV4R5HN3r2Aiwvb+NTQBjYZiI0XxFnH0bo1kJ7OOpeQkqECBnbVuHUrYKCdWV6y+8pu\nfH/4e2VOpoBOnYCUFLbNCim5c/fOIa8gDy3rtuQdRTahofL1EH2d/u79EZYYJswWKyYmNIxYWlTA\nAMTGAq6uys2Yql25Nn489qNmZvq8jqkp0Lcv3YWV1uaLm/GG+xvCLF4uKADCw5V7juxcwxk1K9XE\nkVvl3KtFRWgYsXSogEH54UMvWy+Y6kxx+u5p5U5qYDSMWHqb4zdjQBNxFksdPgzUqQM4OSl3zp/8\nf0LD6g2VO6GBdezIdmq+coV3Em0w+gKm9FUjwNZZ9HPrh7CEMOVOamDdu7Ox+zt3eCfRhuS0ZKRl\np6Fd/Xa8o8gmNFT5WbydHTqjXtV6yp7UgExN2aMMuhgsGaMvYEeOsJmHjRsre95gt2BsSdii7EkN\nqEIFoE8fIEycmmxQjawb4cLECzDRifEWlCRgyxZahiIHGkYsOTHePeXAa/Zhu/rtcD/jPq4/vq78\nyQ2EHkCXTnWL6rwjyObMGbakwsuLdxLt69YNSEoCbt/mnUT9jLqASRK/AmZqYor4SfFwqO6g/MkN\nxM+PNSR9+JB3EqK0wveRIPNRuDI3B/z92Xo6UjyjLmBxcWzMuWlTPue3trTmc2IDqVwZ6NEDiIri\nnYQojffwoSRJyC3I5RdAZsHBNBxfEkZdwArfdHTVKJ++femNZ2wuXwbu3wfat+eXYdqeaVh4bCG/\nADLz8wMOHWKbxpKiGXUBCw9XbvGysQgIYM1cs7J4J1Gnv3L+wonbJ3jHkNWWLex9ZMLx06Rrw64I\njRdn6l7VqkCXLmx7J1I0oy1gycnA3btAO3FmMatCjRqAtzewZw/vJOoUmRSJGfvE2numsIDx1KNR\nD1y4fwGp6al8g8ioXz8azXgdoy1g4eHsbsFUBTuUn7h9An/l/MU7hmyCg9mfL3lZWEIYgt3Eue1P\nTWXr/7p145ujollF+Dn5ITIpkm8QGQUGAjt3sv3VyKsZdQHjfdVYaHrMdERdEmfmQ9++bAZVQQHv\nJOqSnZ+NXVd2IdAlkHcU2URGsuc1FSvyTgIEuQYhPFGcK6fatQFPTyAmhncS9TLKAvbwIXDqFNCz\nJ+8kTLBbsFBvvEaN2I68hw/zTqIue5P3wsvWC7Uqi7NnT3g4u2BRA39nf2TmZQrTYxSg2YivY5QF\nLCqKtT6ytOSdhAlwCcCOyzuEmgbcty8NI/6daMOHGRnAvn1szZIaVLeojuiR0cI0Rwb+9z7Si9Fw\nX3ZGWcDUdNUIAPWq1oNLDRehNucrvHIU6GK43NrYtUF/d4X2GlHArl1AmzZAdXEaiqhO48ZAzZrA\n0aO8k6iT0RWwrCw2Qy4ggHeSFwW5BCEiUZyl997e7OFzfDzvJOoxtsVYoTqvqO1CUFSFz5TJy4yu\ngEVHA82bs6saNRnkMQjedbx5x5CNTkeLmkWWn8+G4oOCeCcRX1AQFbCiGF0BU+tVo3MNZ4z2Hs07\nhqzoylFchw6xDWAdxLmhVK1WrYBHj1jHE/Iioypgej2b9qvGAiaiLl2AxES2YJyIRa0XggCQmZeJ\nL/d9KcxsRBMTtiYsUpwlbrIxqgJ2/DjrFKHkjrHGrEIFtkZo61beSYicJEndBczSzBK/nfoN8Q/E\neQBLw4ivZlQFLCKCxuyVFhREV47DQ4fjXOo53jFkEx/PJuh4q/SRrU6nY4uaE8RZx9GjB1u7+ugR\n7yTqQgWMGFTv3qyTQGYm7yR8PMp6hIjECDjZiHPbHxnJ3kdqXm4V5BokVFspS0vWrmvbNt5J1MVo\nClhyMnDvHlu3oman75zGW+Fv8Y4hG2troGVLNvvTGG2/tB3dGnVDJfNKvKPIJiKCPZNRs384/AMX\n71/EvYx7vKPIhoYRX2Y0BSwyEujTRx3Ne4vT2KYxNl7cKFRzX2N+40UkRSDIRZzb/vv3gfPn+Tfv\nfZ2KZhXh4+SDqCRxeoz26cMWj1Nz3/8xmgKmleHDqhWrooN9B+y6sot3FNkUPgcztnY4Ofk52Hl5\nJwJcVLZqvhyiolgPUTU0732dL7t9Cb/GfrxjyMbWFmjShLXvIoxRFLAnT4BjxwAfH95JSibQJVCo\n8XsnJzb78/hx3kmUdfruaXjU9oBtFVveUWRT+PxLC9xquqFe1Xq8Y8gqKIh6jD7PKArYjh1sTVLl\nyryTlEygSyC2XdqGAr04+5EY4zBiu/rtEDNKnL0wsrNZGza1NO81RoXrwQRZ4lZuRlHAtPDQ+XkO\n1R1Qr2o9nL93nncU2RhjAQOACqYVeEeQTWws0LQpUEuc3WA0p0kTwMwMOHuWdxJ1EL6A5eUB27er\nr3nv6xwdexTN6jTjHUM2bdqwWaDXrvFOQspKaxeCItLpaG3l84QvYAcPAo6OrG+bllQ008BT8lIw\nNWVDT/TG0yZJ0tbzr+cV6AuQmSfOQkRqK/U/whewyEi6alQLeuNpV1wcm3no5sY7SelNj5mOuQfn\n8o4hm86dgaQk6jEKUAEjCvL1BY4cAZ4+5Z3EsB5lPcKfN/7kHUNWhe8jNXffKIqvky8iksR5AFuh\nAnsvRYmzxK3MhC5giYmshZFae7YZmypVgA4d2GJMkYUnhGP+0fm8Y8hKyxeCHRt0xLXH15DyNIV3\nFNnQaAYjdAGLjGSTN7R41Vho//X9eJojzi2LMbzxIpMiEeii0U/7V7h9m+1F1bkz7yRlY2Zihl6N\ne2FrkjjbIhT2GM3O5p2EL+ELmFavGgt9c/AbbLskTgfPgADWkLRAnCVuL8jOz0Z0cjT8ncVZLBUV\nxbbFMTfnnaTsRGsOUKMG0KwZsHcv7yR8qa6A7dixA25ubnBxccGcOXNe+ZopU6bA2dkZzZs3R1xc\nXJHHOn0a6N7dUEmVEegSKNSVo4MDUK8eexYmopjkGDSt3RQ1K9XkHUU2IlwI+jmxllKibHIJ0HR6\nQGUFTK/XY/Lkydi5cycuXLiAtWvXIiEh4YXXbN++HVeuXMGlS5ewePFijB8/vsjjde3KtiHQsj4u\nfbD98nYdNYVpAAAgAElEQVTk6/N5R5GNyMOIog0fZmWxBcy9e/NOUj7WltbYOnQrdFp+nvA31JVD\nZQXs2LFjcHZ2hoODA8zNzRESEoLwvzX+Cg8Px8iRIwEAbdu2xZMnT5CamvrK42n9qhEA6lerDwcr\nBxy6eYh3FNmIXMC6OHTBQI+BvGPIZu9eNgnKxoZ3EvJ3rq5ApUpsiYOxUlUBS0lJgb29/bOv69ev\nj5SUlGJfY2dn99JrCmmt+0ZRAl0CEZkozid+69bAw4fA1au8k8gvxDMEjtaOvGPIpnAiFFEnkS8G\nS0JVBUxudevyTiCPIU2HoLVda94xZGNiwvY2MuY3nhZIErB1qxgjGaIKCDDu95EZ7wDPs7Ozw40b\nN559fevWLdj9rQeUnZ0dbt68WexrCn3++efPft61a1d07dpV1rxKcavpBreaGmyBUIzAQGDhQmDq\nVN5JSFHi4tgzZFdX3klIUTp1Aq5cYUsd6pVx55jY2FjExsbKmkspOklF03IKCgrg6uqK6Oho1K1b\nF23atMHatWvh7u7+7DXbtm3DokWLEBUVhSNHjuC9997DkVdMadPpdELNOBJNejq7Q751C7Cy4p2G\nvMqMGcDjx8D33/NOIp/H2Y/x49Ef8ek/PuUdRTZDhrDZ1m+/Lc/xtPTZqaohRFNTUyxcuBC+vr7w\n8PBASEgI3N3dsXjxYvz6668AAH9/fzRq1AiNGzfGO++8g59++olzalIWVaqwq0fRu3JomQjT5/+u\nSoUqmHd0Hm49vcU7imyM+TmYqu7A5KSlqwhj9dNPbD3YypW8k5Tf2IixGN18NDo26Mg7iixu3wY8\nPYHUVG0vYH6VYaHD0LlBZ4xvVfQSHC1JS2PrK1NT5Vk2pKXPTlXdgRHjEhDA9mrTeleO7PxsbLy4\nUajnlCJ03yiKaF05rK2BFi2A6GjeSZRHBUxD9ibvxZTtU3jHkE2DBmyftsOHeScpn5jkGHjZeqFG\npRq8o8hGxOHDQr0a98KB6weQkZvBO4psAgPZjFFjQwVMQ1xquGD1udXUlUNlqPuGtlS3qI5W9Voh\nOlmcW5bCAqaRkT/ZUAHTkPrV6qNh9YY4eOMg7yiy0XoBkyQJW5O2ClXAoqPZkJS1Ne8khrPQfyE6\n2ovxvBIAXFxYV47Tp3knURYVMI0JdAlERKI4m/O1agU8esTWsmjRlbQrqFyhslDPv0QePizUpFYT\noYZ8AfZ3FiHOR0OJUAHTGNEeQBd25dDq+H1jm8Y4O/6sME1i9XrqvqFVxtidngqYxrSo2wJ5+jzh\n1rFo+crR3FScqXqnTrE1ei4uvJOQ0urYEbh2DSiiNayQqIBpjE6nQ9LkJNSvVp93FNn4+ADHjwNP\nnvBOQoxh+FBUZmZAr17aHc0oCypgGiTSFT8AVK7MtqvfsYN3EmJsBSy3IBdZeVm8Y8gmKEjboxml\nRQWMqIKxvfHU6NYt4Pp1NhRlLCZGTcTyuOW8Y8imVy/gwAEgQ5wlbsWiAkZUobArR14e7yQlk5mX\niW2XtvGOIautW9kHoJmq9qgwLD8nP6EmRVlZsf329uzhnUQZVMCIKtjZAY6OwEGNLHHbc3UPvj30\nLe8YsoqIAPr25Z1CWX6N/XDwxkGk56bzjiIbYxrNoAKmYVFJUcgtyOUdQzZaeuNFJorVfSM9nQ09\n+fnxTqKsahWrob19e+y8vJN3FNkEBrJelno97ySGRwVMw2bsn4H91/fzjiGbwgKm9nY4ekmPrZe2\nItBVnAK2axfQvr1x7s0W5BKEiCSNXDmVgKMjUKMGm9krOipgGtbXta9QXTmaNQNyc4GEBN5Jinfi\n9glYW1ijsU1j3lFkExHBLiCMkUgXIoW0NJpRHlTANCzINQjhieGa2bvndXQ6bSxqjkiMEGr4sKCA\nDTkZ0/T55zWwaoAVwSt4x5CVFt5HcqACpmEetTxgZmKGs6lneUeRjRbeeO3rt8eo5qN4x5DN4cNs\nEo2DA+8kRC5t2wL37gHJybyTGBYVMA3T6XQIcmF3YaLo1g24cIG9+dSqj0sfNKnVhHcM2Rjz8KGo\nTE3Z0pRwcT4aXokKmMa95f0WWtdrzTuGbCpWBHr2ZENaRBlUwMTUt6/4BUwnifIA5W90Op0wz4aM\nzapVwMaN4r/51CAxEejeHbh5k+0MQMSRmQnUqcMa/NrYlPz3aemzk/7JEtXx9wdiYtgbkBhWYe9D\nKl5AanoqZuybwTuGbCpVYhcn28RqGPMC+mdLVMfGhm10uXs37yTiCwuj4cNCVhZW+O7wd7ifcZ93\nFNkEBYk9kkEFjKiSGsfv3wp/C3uT9/KOIZt794Dz54EePXgnUQcLMwv4Ovlia5I4+5EEBLALwZwc\n3kkMgwoYUaW+fVlz2YIC3kmYnPwchMaHwrO2J+8osomMBHx92cQZwgS7BiMsMYx3DNnUrg14egJ7\nxbnuegEVMEHsvLwTE7ZO4B1DNg0bAnXrsjVKahBzLQaetT1Ru3Jt3lFkExYGBAfzTqEu/s7+iEmO\nQUauOPuRqHE0Qy5UwAThWdsT6y+sR16BRvYjKQE1vfHCE8LR11WcVu3p6cC+fWzCDPkfa0trtLFr\ng11XdvGOIpugIHa3LWJzXypggrCrZgfnGs7Yd30f7yiyKSxgvGf06iU9whPD0ddNnAK2axfQrh1Q\nvTrvJOqzOGAxejr25B1DNq6uQNWqwIkTvJPIjwqYQIJdg7ElfgvvGLJp0QLIyuLf3Pfyo8uwq2YH\nlxoufIPIKCzM+Pb+KiknGydUrViVdwxZ9esHbBHno+EZWsgskIQHCei5siduvH8DJjoxrk0mT2Z9\n+j7+mG8OvaQX5s80L48tcI2LA+zteachSjh2DBg5smQXg1r67BTjHUkAAG413VC7cm1cTbvKO4ps\n1HLlKErxAoA//2R7RlHxMh6tWrHnnvHxvJPIS5x3JQEAnBh3Qqh9qrp0Aa5cYa2OiDxo9qHxMTFh\nf+dquBiUExUwwYh0pwAA5uas1VGYOEtzuJIkKmAllZGbgbSsNN4xZKOW0Qw5ifVpR4T0xhtAaCjv\nFGI4dQqoUAFoIs5uMAbzeeznmHdkHu8YsunSBbh6VazRDCpgRPV8fNgH74MHyp739l+3EZGo8t01\nSyk0FOjfn+1+TYrXz70fNsdv5h1DNubmrLWUSKMZVMCI6llaspZHSu/UvPHCRmxJEGfMRZKAzZtZ\nASOv165+O6RlpyHxQSLvKLIRbRiRCpigIhIjcOevO7xjyKZfP+WHEbckbEE/t37KntSA4uPZFjWt\nWvFOog0mOhP0cxPrLszXFzh5Enj4kHcSeVABE9SWhC3YeHEj7xiy6dMH2L8f+OsvZc73IPMBTt89\nDR9HH2VOqIDNm9nzRBo+LLk33N9AaLw4D2ArVWK7D0RG8k4iDypggurv3h+bLm7iHUM2VlZAp07K\nbc4XlhAGPyc/WJpbKnNCBYSGsgJGSq6LQxd42XohtyCXdxTZiDQpigqYoHwcfXDu3jncTb/LO4ps\nlBxG3HRxEwY0GaDMyRRw9Spw+zbQsSPvJNpiZmKGZX2XoYJpBd5RZBMYCMTGAk+f8k5SflTABFXR\nrCL8nf0RliDOlKO+fYGdO1l/REOb2Hoi/J3FadUeGsrWfpma8k5CeLOyAv7xDzGGEamACUy0YcTa\ntVmD3x07DH+uINcgVKlQxfAnUgjNPiTPGzAA2CTARwM18xVYZl4mdl/ZLdQ2ID//DBw4AKxZwzuJ\ndqSkAF5ewJ07bBEzIWlpbNPYW7fYVivP09JnJ92BCaySeSWhihfAHkBv26bMMKIoQkPZAlYqXqSQ\ntTV7HhoVxTtJ+VABI5pia8uGEXfu5J1EOzZsAAYN4p1C+0aFjcK9jHu8Y8hGhGFEKmBEcwYOZB/K\nhpCTn2OYA3Ny6xZw8SJrx0XKJ68gT6g1YcHBwO7dQEYG7yRlRwWMaI6hhhGf5jyF/Q/2yM7PlvfA\nHG3axGZv0vBh+Q32GIz1F9bzjiEbGxugXTtg+3beScqOCpiRyMoT56GRrS3g7S3/MGJUUhRa27WG\nhZmFvAfmaP16Gj6Ui19jP8TdjROqRduAAcBGDTfsUU0BS0tLg6+vL1xdXeHn54cnT5688nUNGzZE\ns2bN4O3tjTZt2iicUpvyCvLQcH5DPMhUuJ27AQ0cKP8bb92FdRjURJxP++vXgUuXWOsgUn4WZhYI\ndAkUqjdiv37sQlCrw4iqKWCzZ89Gz549kZiYiO7du2PWrFmvfJ2JiQliY2Nx+vRpHDt2TOGU2mRu\nao5uDbsJNX5fOIyYLdNoX1pWGmKvxSLYTZydHjdtYh9Q5ua8k4hjkMcgRCYJsAL4v2rWZMOIW7fy\nTlI2qilg4eHhGDVqFABg1KhRCCti0xpJkqDX65WMJoTBHoOx7vw63jFkU6cOG0aUa/x+S8IW9GjU\nA1YWVvIcUAXWrwcGD+adQiy9GvdCeEg47xiyGjIEWLuWd4qyUU0Bu3fvHmxtbQEAderUwb17r56u\nqtPp4OPjg9atW+O3335TMqKm9XbujdN3Tws1fi/nGy8tKw1vNn9TnoOpQHIycO0a0LUr7yRiMTMx\nE+oZKcBmI8bEAI8f805SemZKnszHxwepqanPvpYkCTqdDl999dVLr9UVsefDwYMHUbduXdy/fx8+\nPj5wd3dHp06dDJZZFIXj95subsK7bd/lHUcW/fsDH37ImpJWq1a+Y33Q4QN5QqnEhg3sz8dM0Xc4\n0SIrK/acNDQUeOst3mlKR9F/3rt37y7y12xtbZGamgpbW1vcvXsXtWvXfuXr6tatCwCoVasW+vXr\nh2PHjhVZwD7//PNnP+/atSu6Gvnl6MhmI3EsRZznhjY2rClpeDgwYgTvNOqybh3w/fe8UxAtiI2N\nhalpLL76Crhxg3ea0lFNL8Rp06bBxsYG06ZNw5w5c5CWlobZs2e/8JrMzEzo9XpUqVIFGRkZ8PX1\nxWeffQZfX9+Xjqelfl6k7NatA1as0PZaFrlduAD4+bEPIxPVPCQgapaVBdSrByQkAHXqaOezUzX/\nvKdNm4bdu3fD1dUV0dHR+OijjwAAd+7cQUBAAAAgNTUVnTp1gre3N9q1a4fAwMBXFi9iPAIDgcOH\ngSIemRql1auBoUOpeBlSvj4fmy5u0swH/etYWrJ+mVpbE6aaOzC50R2Y8Rg+HGjfHpg0iXcS/vR6\nwNERiIhgHeiJYeglPZwWOGHL4C1oXqc57ziyiIoCvv4aOHRIO5+ddI1GNG/IkLJvr/LutneFatB6\n8CDbHoOKl2GZ6EwwrOkwrDq7incU2fj4AImJvFOUDhUwonm+vkBSEps6Xhrn751HWGIYaljWMEww\nDlatYnekxPCGNR2GNefWoEBfwDuKLCpUAP7zH94pSocKmBHKysvC0M1DhXnjmZuznm6lXRO28sxK\nDG86HKYmpoYJprCcHLbz8pAhvJMYB/da7qhXtR5irsXwjiKb997jnaB0qIAZIUtzSyQ9TMLe5L28\no8hm+HDgjz+Akg7d5+vzsersKoxsNtKwwRS0fTvg6Qk0aMA7ifEY7jUcq8+t5h3DaFEBM1IjvEbg\nj7N/8I4hmw4dgPx8oKTtMaOvRqN+tfpwr+Vu2GAKWrUKGDaMdwrjMrTpUAxrSn/ovNAsRCN1L+Me\nXH50wa1/3kKVClV4x5HFzJlsA8eff379a8dGjEXzOs0xuc1kwwdTwOPHgIMDax9lbc07DdEyLX12\nUgEzYgFrAjDYYzBGNBOjjcXNm0Dz5kBKCmDxmnZ1uQW5KNAXwNLcUplwBvbzz6yfnaF2qibGQ0uf\nnTSEaMRGeI1AWOKru/5rkb090LIlay31OhVMKwhTvABg6VJgzBjeKQhRFt2BGbG8gjxIkFDBVJz9\n5tesAVauBHbs4J1EOWfOsI4kycmAqRgTKglHWvrspDswI2Zuai5U8QLY1hDHjrFhRGOxbBnw5ptU\nvHi7n3Efeon2KlQSFTAilEqV2JqwP8SZYFmsnBx21/nmm7yTEP81/oi9Fss7hlGhAkaEM3o0sHz5\ny2vC8grysOTUEs0Mj5REeDhrG+XoyDsJGeE1AktPL+Udw6hQASPCadeODaft3//i9yOTIrHizIoi\nN0vVoqVLtbcJoaiGNR2GqKQopGWl8Y5iNKiAEQDAirgVuJt+l3cMWeh0wPjxwC+/vPj9X0/+inda\nvsMnlAHcuAGcOAG88QbvJAQAalSqgV6Ne2HNuTJ2lialRgWMAAD2X9+PFXEreMeQzciRbCZiair7\nOjktGSdun0B/9/58g8lo+XJg8GC2lxNRhzHeY7D09FKhhqnVjAoYAQC83fJtLDktzvOh6tWB/v3Z\nDD0AWHJqCUZ4jRBm7VdeHvDrr8CECbyTkOf1cOwBH0cf5BTk8I5iFKiAEQBAW7u2sDCzEKqz9vjx\nwOLFQHZuHpbFLcO4luN4R5LNli2AszPQtCnvJOR5JjoTzPGZAwuz17SCIbKgAkYAsMWLk1pPwo/H\nfuQdRTatWgG1agF7dpkhIiRCqMa9CxfSDtSEUCcO8kxGbgYc5jng5LiTcKjuwDuOLJYtA0JDga1b\neSeRz5kzgL8/a9xrbs47DRGNlj47qYCRF1x+dBlO1k7CTDXPzGQ9Ek+dYt3aRTBuHPt/+vRT3kmI\niLT02UkFjAjv/fcBMzNg7lzeScovLQ1o1AhISADq1OGdhrxOdn625p6Haemzk56BEeFNncqGEp8+\n5Z2k/JYvB/r0oeKlBbHXYuG3yo93DKFRASPCikmOwYPMB2jYEPD1BZYs4Z2ofAoKgEWLaPKGVnS0\n74grj67gzN0zvKMIiwoYEVJ2fjZCNofgQeYDAMAHHwDz5rH1U1q1aRO782rfnncSUhLmpuaY3GYy\n5h4SYOxapaiAkVfKyM3A73G/845RZqvPrkbLui3hVtMNAJtS7+QEbNzIOVgZSRIwezbw0UesVRbR\nhgmtJmDH5R1ITkvmHUVIVMDIK5mZmGF6zHQcTznOO0qpSZKEeUfn4f1277/w/Q8/BL799uUu9Vqw\naxeQn8+efxHtsLKwwriW4+guzECogJFXqmhWEf/q+C/MPDCTd5RSi0iMgJmJGXo69nzh+717s/2z\nYjTYbGTWLGDaNMCE3rGa816791Cvaj3eMYRE0+hJkbLysuC4wBE7h++El60X7zglIkkSWv3WCp92\n+RTBbsEv/fqyZcD69cDOnRzCldHhw8DQocClS2w5ACGGpKXPTipgpFjfHvoWx28fx/oB63lHKbGL\n9y/Cvab7Kxdj5+YCrq7AqlVAx44cwpVB375sFiXNPiRK0NJnJxUwUqz03HQ4LXDCibdPwN7Knncc\nWSxbxgrY3r28k7ze+fNAz55AcjJtm0KUoaXPTipg5LUeZD5AzUo1eceQTX4+4O7OOtV37847TfH6\n9gW6dGHLAAhRgpY+O+mRMHktkYoXwJ4jffEF8J//qHtG4p9/AnFxNHQoEkmSkPQwiXcMYVABI0Zp\n8GDWWmrHDt5JXk2S2KzDL78ELLTVSo8U40HmA7Rf2h43n9zkHUUIVMCI5uUW5OKDnR8gJ7/ku+Ca\nmgIzZqj3LiwiAvjrL2DYMN5JiJxqVa6F8S3HY3rsdN5RhEAFjGjegqMLkPAwARXNKpbq9/Xrx9ZV\nrV5toGBllJ8PfPwx67xhaso7DZHbvzr+C9subcO51HO8o2geFTBSKvOPzMfKMyt5x3gmNT0Vs/+c\nje99vy/179Xp2M7G//oX8OSJAcKV0YoVQO3abOE1EY+VhRU+7vQxPo7+mHcUzaMCRkqlbf22+CT6\nE2TkZvCOAgD4995/483mb8K1pmuZfn/btkBAADBdJSM6Dx4A//4327uMeh6Ka0KrCUh4kIA9V/fw\njgIASHqYhMy8TN4xSo2m0ZNSG7J5CBysHDC752yuOU7ePok+a/ogcXIirCysynycBw8ADw/WnaN5\ncxkDlsGoUYC1NeucT8SW9DAJDlYOpR76lltuQS6a/dIMc33mIsAlQFOfnXQHRkrtB78fsDxuOY6l\nHOOa4/jt4/i6x9flKl4AULMm8NVXbLq6Xi9TuDLYvRvYt49lIeJzqeHCvXgB7LFAo+qN0MdZe52i\n6Q6MlMm68+swY98MnHrnlOa2TH8VvZ7ts/X228DYscqfPzMTaNqUPZOjZ19EKclpyWj9W2scGXsE\njW0aA9DWZye1BiVlMthjMO5n3EduQa4QBczEBPjtN6BHD9b5wsVF2fN//jl7HkfFiyglryAPQzYP\nwb87//tZ8dIaugMj5Dk//wz8+ivrAK/UAuKYGNZt/swZNvuQGKesvCxYmivX8HLDhQ1YcWYFtg7Z\n+kLjay19dlIBI+Q5kgQMHAjUqwcsWGD48928CbRpw5oL9+hh+PMR9eq2ohsmtJqAQR6DFDtndn72\nSyMoWvrspEkcRDPWn1+PQzcPGfQcOh2wZAkQGQmEhRn0VMjOBt54A/jnP6l4EeB73+8xadsknE09\nq9g5tT78TwWMyCY7P9tgV257ru7BlB1TYFWxfDMOS6J6dWDtWmDcONZM1xAkic16bNQI+PBDw5yD\naIt3XW/M7zUf/db3w6OsR7zjaAIVMCKbtyPfxg9HfpD9uHF34zB081BsHLgRHrU9ZD/+q7Rrx56H\n9e4NXLwo//HnzgWOHmV7k9GCZVJoaNOhCHYNxqCNg5CVl8U7jupRASOymdl9Jr47/B1+O/mbbMe8\n9vgaAtYEYJH/InRx6CLbcUuif39WaHx9gcuX5TmmJAGffQYsX8464VepIs9xiTjm+MyBbRVbbEnY\nItsx8wry8E7kO8J1wVdNAdu0aRM8PT1hamqKU6dOFfm6HTt2wM3NDS4uLpgzZ46CCcnrNLBqgNhR\nsfjm0Df4aM9H0EvlWxWclZeFbiu64ZPOn2Cgx0CZUpbO8OGszVSPHkBSObdxkiT2vCsigi1Yrl9f\nnoxELGYmZljVbxWGNh0qy/EycjMwZPMQ3Em/gzpV6shyTNWQVCIhIUFKSkqSunXrJp08efKVryko\nKJCcnJyka9euSbm5uVKzZs2k+Pj4V75WRf9r3MXExCh6vvsZ96UOSztIgzYOknLyc8p1rFtPbsmU\niinrn8WSJZJUs6YkLVsmSXp96X9/WpokDR8uSe3bs5+rgdL/LtRM1D+L03dOS64/ukqjtoySsvKy\nSvR7tPTZqZo7MFdXVzg7Oxc7CeDYsWNwdnaGg4MDzM3NERISgvDwcAVTalNsbKyi56tZqSaiR0bj\nHw7/gLmJebmOZVfNTqZUTFn/LMaMYeu1vv8eCAkBHj8u2e+TJDYhpEkToFIlYNcuNklEDZT+d6Fm\nWvmzKM2oxs/Hf4bPHz74tMun+D34d83POHwV1RSwkkhJSYG9vf2zr+vXr4+UlBSOiUhRLMwsMLH1\nxBcWSBbn8qPLql974ukJHDvGFhs7ObFZhEWNdj99CmzZAvj5sX29Nm8GFi+mZ16k7B5kPoDbQjf8\ncuIXXH98/bWvr1axGg69dQjDvMTdFVXRVlI+Pj5ITU199rUkSdDpdJg5cyYCAwOVjEI4+mDnB8jM\ny0SBVICraVdxJe0KMnIzcHTsUTSybsQ7XrEsLYEff2RT33//na3jqloVaNiQ/bdqVSAxETh5EujQ\ngU0EGTMGMKOmbaScalaqiSVBS/DziZ/xacynsLG0QecGndGibgtMbD3xpdeLXLie4TyE+ZKuXbsW\n+Qzs8OHDkp+f37OvZ82aJc2ePfuVrwVAP+gH/aAf9KMMP7RCldeFUhFDSa1bt8bly5dx/fp11K1b\nF+vWrcPatWtLdQxCCCFiUM0zsLCwMNjb2+PIkSMICAhA7/+25b5z5w4CAgIAAKampli4cCF8fX3h\n4eGBkJAQuLu784xNCCGEE2Gb+RJCCBGbau7A5EILnf/n1q1b6N69Ozw8PNC0aVMsUKK9uorp9Xq0\naNECQUFBvKNw9eTJEwwcOBDu7u7w8PDA0aNHeUfi5ocffoCnpye8vLwwbNgw5Obm8o6kqDFjxsDW\n1hZeXl7PvpeWlgZfX1+4urrCz88PT5484ZiweEIVML1ej8mTJ2Pnzp24cOEC1q5di4SEBN6xuDEz\nM8P333+PCxcu4PDhw1i0aJFR/3nMnz8fTZo04R2Du6lTp8Lf3x/x8fE4c+aM0Q7D3759Gz/++CNO\nnTqFs2fPIj8/H+vWreMdS1GjR4/Gzp07X/je7Nmz0bNnTyQmJqJ79+6YNWsWp3SvJ1QBo4XOL6pT\npw6aN28OAKhSpQrc3d2Ndt3crVu3sG3bNowdO5Z3FK6ePn2KAwcOYPTo0QDYRU61atU4p+KnoKAA\nGRkZyM/PR2ZmJurVq8c7kqI6deoEa2vrF74XHh6OUaNGAQBGjRqFMEPvK1QOQhUwWuhctGvXriEu\nLg5t27blHYWL999/H3Pnzi3xwmpRJScno2bNmhg9ejRatGiBcePGISvLOLue16tXDx988AEaNGgA\nOzs7VK9eHT179uQdi7t79+7B1tYWALsIvnfvHudERROqgJFXS09Px4ABAzB//nxUMcJWEFFRUbC1\ntUXz5s0hSZJRL7HIz8/HqVOnMGnSJJw6dQqVKlXC7Nmzecfi4vHjxwgPD8f169dx+/ZtpKenY82a\nNbxjqY6aL/qEKmB2dna4cePGs69v3boFOzt5e+lpTX5+PgYMGIARI0agb9++vONwcfDgQURERMDR\n0RFDhgxBTEwMRo4cyTsWF/Xr14e9vT1atWoFABgwYECxuz+IbM+ePXB0dISNjQ1MTU3xxhtv4NAh\nw+74rQW2trbPOibdvXsXtWvX5pyoaEIVsOcXOufm5mLdunVGP+PsrbfeQpMmTTB16lTeUbj5+uuv\ncePGDVy9ehXr1q1D9+7dsXLlSt6xuLC1tYW9vT2S/rs3THR0tNFObGnQoAGOHDmC7Gy2k3h0dLRR\nTmj5+6hEUFAQfv/9dwDAihUrVH3hq8pOHGX1/EJnvV6PMWPGGOU/yEIHDx7E6tWr0bRpU3h7e0On\n06+VjKsAAAEMSURBVOHrr79Gr169eEcjHC1YsADDhg1DXl4eHB0dsXz5ct6RuGjTpg0GDBgAb29v\nmJubw9vbG+PGjeMdS1FDhw5FbGwsHj58iAYNGuCLL77ARx99hIEDB2LZsmVwcHDAhg0beMcsEi1k\nJoQQoklCDSESQggxHlTACCGEaBIVMEIIIZpEBYwQQogmUQEjhBCiSVTACCGEaBIVMEIIIZpEBYwQ\nQogmUQEjhBCiSVTACCGEaBIVMEIIIZpEBYwQQogmUQEjhBCiSVTACCGEaBIVMEIIIZpEBYwQQogm\nUQEjhBCiSVTACCGEaBIVMEIIIZpEBYwQQogmUQEjhBCiSVTACCGEaBIVMEIIIZr0/4v4eqNqlA+E\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image('my_figure.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In ``savefig()``, the file format is inferred from the extension of the given filename.\n", "Depending on what backends you have installed, many different file formats are available.\n", "The list of supported file types can be found for your system by using the following method of the figure canvas object:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'eps': 'Encapsulated Postscript',\n", " 'jpeg': 'Joint Photographic Experts Group',\n", " 'jpg': 'Joint Photographic Experts Group',\n", " 'pdf': 'Portable Document Format',\n", " 'pgf': 'PGF code for LaTeX',\n", " 'png': 'Portable Network Graphics',\n", " 'ps': 'Postscript',\n", " 'raw': 'Raw RGBA bitmap',\n", " 'rgba': 'Raw RGBA bitmap',\n", " 'svg': 'Scalable Vector Graphics',\n", " 'svgz': 'Scalable Vector Graphics',\n", " 'tif': 'Tagged Image File Format',\n", " 'tiff': 'Tagged Image File Format'}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig.canvas.get_supported_filetypes()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that when saving your figure, it's not necessary to use ``plt.show()`` or related commands discussed earlier." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Two Interfaces for the Price of One\n", "\n", "A potentially confusing feature of Matplotlib is its dual interfaces: a convenient MATLAB-style state-based interface, and a more powerful object-oriented interface. We'll quickly highlight the differences between the two here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### MATLAB-style Interface\n", "\n", "Matplotlib was originally written as a Python alternative for MATLAB users, and much of its syntax reflects that fact.\n", "The MATLAB-style tools are contained in the pyplot (``plt``) interface.\n", "For example, the following code will probably look quite familiar to MATLAB users:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nUTSOiswAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure() # create a plot figure\n", "\n", "# create the first of two panels and set current axis\n", "plt.subplot(2, 1, 1) # (rows, columns, panel number)\n", "plt.plot(x, np.sin(x))\n", "\n", "# create the second panel and set current axis\n", "plt.subplot(2, 1, 2)\n", "plt.plot(x, np.cos(x));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is important to note that this interface is *stateful*: it keeps track of the \"current\" figure and axes, which are where all ``plt`` commands are applied.\n", "You can get a reference to these using the ``plt.gcf()`` (get current figure) and ``plt.gca()`` (get current axes) routines.\n", "\n", "While this stateful interface is fast and convenient for simple plots, it is easy to run into problems.\n", "For example, once the second panel is created, how can we go back and add something to the first?\n", "This is possible within the MATLAB-style interface, but a bit clunky.\n", "Fortunately, there is a better way." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Object-oriented interface\n", "\n", "The object-oriented interface is available for these more complicated situations, and for when you want more control over your figure.\n", "Rather than depending on some notion of an \"active\" figure or axes, in the object-oriented interface the plotting functions are *methods* of explicit ``Figure`` and ``Axes`` objects.\n", "To re-create the previous plot using this style of plotting, you might do the following:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nUTSOiswAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# First create a grid of plots\n", "# ax will be an array of two Axes objects\n", "fig, ax = plt.subplots(2)\n", "\n", "# Call plot() method on the appropriate object\n", "ax[0].plot(x, np.sin(x))\n", "ax[1].plot(x, np.cos(x));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more simple plots, the choice of which style to use is largely a matter of preference, but the object-oriented approach can become a necessity as plots become more complicated.\n", "Throughout this chapter, we will switch between the MATLAB-style and object-oriented interfaces, depending on what is most convenient.\n", "In most cases, the difference is as small as switching ``plt.plot()`` to ``ax.plot()``, but there are a few gotchas that we will highlight as they come up in the following sections." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Further Resources](03.13-Further-Resources.ipynb) | [Contents](Index.ipynb) | [Simple Line Plots](04.01-Simple-Line-Plots.ipynb) >" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }