data-science-ipython-notebooks/matplotlib/04.00-Introduction-To-Matpl...

530 lines
98 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!--BOOK_INFORMATION-->\n",
"<img align=\"left\" style=\"padding-right:10px;\" src=\"figures/PDSH-cover-small.png\">\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": [
"<!--NAVIGATION-->\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 wouldnt 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 Matplotlibs development and greatly expanded its capabilities.\n",
"\n",
"One of Matplotlibs 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 Matplotlibs 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": [
"<matplotlib.figure.Figure at 0x10c21e668>"
]
},
"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": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"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": [
"<matplotlib.figure.Figure at 0x10d658438>"
]
},
"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": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEACAYAAABbMHZzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xmc1WP7wPHP1SbLT9YSkTySpccSUraGLFkeEZItLY/K\nU0SJrIVHilAJSURKpZBEi5aJaKOiUirRxhPZkmiZuX5/XDMamWmamXPO/T3nXO/Xa17NOX3n+73m\ndLrP/b3u+75uUVWcc86ll1KhA3DOOZd43vg751wa8sbfOefSkDf+zjmXhrzxd865NOSNv3POpaGY\nNP4i8oKIrBWRz3ZwTB8RWSoi80Tk+Fhc1znnXPHEquc/EDi/oL8UkQuAf6hqdaA10C9G13XOOVcM\nMWn8VXUa8NMODmkIDMo5diZQQUQqxeLazjnnii5ROf+DgFV5Hq/Jec4551wAPuDrnHNpqEyCrrMG\nODjP4yo5z/2NiHixIeecKyJVlaIcH8uev+R85Wc00BRAROoAP6vq2oJOpKqR/dqyRRk6VKlVS6lR\nQ+nSRZk7V8nOLtp5vvlGeeEF5fzzlUqVlAceUL777q/HdOnSJfjvG4Uvfx1S87X47DOlcWOlQgXl\nuuuUt99WNm0q2mvxxx/K5MlKq1bKXnspV12lvP9++N8t0V/FEaupnq8CHwFHiMhKEWkuIq1FpFVO\nY/4u8JWILAOeA/4Ti+smkiq88goccQQ88wx07Qqff25/Hn88SJE+c6FyZWjRAsaNg8mTYfVqO3en\nTrB+fTx+A+ei4dNP4bLL4Lzz4OST7b3/yitw8cVQrlzRzrXLLnDWWfDcc/D113DaadC8OVxwASxc\nGJfwU0asZvtco6oHquouqnqIqg5U1edUtX+eY9qp6uGqepyqzonFdRNl/nw480zo3dvepO+/D//6\nF5SK0X3T0UdD//72YbJuHRx1lF2nmB/ozkXShg3QsaM1+hkZsHw53H477LFHbM5foQLcfLP9P2rQ\nwD4UWreG77+PzflTjQ/47sDmzXDHHVC/Plx7LcycaT2LeKlcGQYOhNdfhz59YNSoDFaujN/1kkVG\nRkboECIjWV+Ld9+FmjWtIV6wANq3h113Ldk5C3otypWz83/xhV3juOPgnXdKdq1UJMXNF8WLiGgU\nYvryS2jSBA48EAYMgP33T+z1s7OhZ094/HFLM11+eWKv71wsbN5sqczRo+3u9txzEx/D1Klwww2W\nCurZE3bfPfExxJuIoAEHfFPG8OFQpw5cfz2MGpX4hh8spXTHHfD22/ZnmzawaVPi43CuuFautHTp\n11/DnDlhGn6AevVsnOG33+Ckk2Dp0jBxRI03/nlkZ8Pdd9vXuHFwyy1FH8iNtdq1Ye5cGws45xz7\n07momzzZ3ruNGlkHau+9w8ZToQIMGgS33gqnn27xpTtv/HNs2mR5/cxMmDEDTjwxdETb7LknvPYa\nnHGG3ZF88UXoiJwr2NChljIdOtTuWkN3oPJq3RqGDYNrroFnnw0dTViJWuQVaT/+CJdeCpUqwaRJ\nJR+IiodSpaBbN/jHP+xWeuRI+zBwLkoef9xmxU2ebAO8UXTWWfDhhza1dM0aeOihaH1AJUraD/h+\n/73N5jn3XHjssdhN34yn996znsvw4XD22aGjcc6mJXfqZOnSsWPh4IML/5nQvv9+27TTJ55I7g8A\nH/Atou++s8azYUObBZAMDT/YB9XIkXZrPWFC6GhculOFDh1s/csHHyRHww82kWPKFEvztmoFWVmh\nI0qsJGnuYm/tWrv9a9QIHnww+T7169WDN9+E667zOcwunNwe/wcfWEck9MBuUe21l91Jf/kltGxp\nkz7SRVqmfX74wfLmjRtDly5xvVTczZgBl1xiKaCzzgodjUsnqtC5szWeEyfCPvuEjqj4Nm60FFCt\nWjZmkWydweKkfdKu8f/tN5syecYZ8OijcbtMQk2ZAlddZfnWWrVCR+PSRbduNnNmyhTYd9/Q0ZTc\nzz9bB+qSS+CBB0JHUzSe8y/Eli1w5ZVQowb06BE6mtjJLWx18cWwZEnoaFw6eOkleP5563CkQsMP\nlgIaP94+0J54InQ08Zc2Uz2zsy2nV6qUvWmT7bauMJddZlNWzz/fprEdeGDoiFyqGjfO0j2Zman3\nPqtY0dJYp51mA9dXXhk6ovhJm8a/a1dYtsxyk2XLho4mPlq2hG+/tdlLU6fCbruFjsilmo8/3lb2\n5MgjQ0cTH4ccYmVVzj3XPgDq1AkdUXykRc5/6FAr2TBzpn2ypzJVaNrUViwPG5Y801dd9H3zjZVs\neOopu9NMdWPG2BTQjz6CQw8NHc2O+YBvPmbOtNr7EyfCscfG7LSR9scftnCtfn2bxupcSf3+u00v\nvvRS60iliz59bDzto4+sPlBUeeO/nVWr7JatXz/7AEgn330Hp5wCDz9sq4GdK67cu8ktW+wuOtXG\ny3ZEFdq2tbbkrbeieycdbLaPiDQQkcUiskRE7szn7+uJyM8iMifn695YXHdH/vjDbk3bt0+/hh8s\nvfXWW/b7f/pp6GhcMuvZ03bHevHF9Gr4wX7fXr3gp5/gv/8NHU1slbjnLyKlgCVAfeAbYDbQRFUX\n5zmmHtBRVS/ZifPFpOffqpX9g732Wvq9YfMaOhTuuw9mz06+1ZcuvIkTrdc/c2bylG2Ih2+/tf2G\nn3sOLroodDR/F6rnXxtYqqorVHULMAxomF98MbjWThk40Jabp2NPZXtXX21v1qZN02vpuiu5NWts\nZs+QIend8INtsfraa7Y5fKpsBhOLxv8gYFWex6tzntteXRGZJyLviMjRMbhuvubOtRrib7wB//d/\n8bpKcunZ0+6CHn44dCQuWWzZYuVPbr7Zy4bkOvVUW/l7+eU2AJ7sEjXP/xPgEFXdKCIXAKOAIwo6\nuGvXrn9+n5GRsdObVv/8M1xxBfTtC0cdVaJ4U0rZsjBihG1hd+qpNgvIuR3p3NnShJ07h44kWtq0\nseql7dvbnsShZGZmkpmZWaJzxCLnXwfoqqoNch53BlRVCyygICJfASeq6o/5/F2xcv6qVt+mYkVr\n/N3fTZpk6Z85c2zjGufy8+abVqL5k0+Su1hbvKxfbzv9PfigpVWjIFTOfzZwuIhUFZFyQBNg9HaB\nVcrzfW3sQ+dvDX9J9O9vdW169ozlWVNL/fqWs/T8vyvIypXWux02zBv+guRuq3rLLcldS6vEjb+q\nZgHtgAnAQmCYqi4SkdYi0irnsCtEZIGIzAV6AVeV9Lp5zZ8P995rZY3Ll4/lmVNP165Wvvaxx0JH\n4qJm61bbx7pDB1sj4gp2wgnW82/c2KaVJ6OkX+T12282BevOO+GGG+IYWApZtcry/6NGQd26oaNx\nUdG1qxUFHD8+uouZokTVCr8dfDA8+WTYWNJyhW+bNrBhA7zyik/rLIpRo6BjR5g3z2dFOSsE2KSJ\njQdVrhw6muTx449w3HEwYIBV1A0l7Rr/t9+2vNunn1oezhXNjTfarf7AgaEjcSH9/LM1YM8+Cxde\nGDqa5DN5sq2HmDfP9gUOIa0a/7Vr4fjjbeDljDMSEFgK2rDBdv7q1s2myLr0dO21tpHJ00+HjiR5\n3XknLF5sd9QhMhBps5OXqtWub9HCG/6S2GMPGDzYCletXh06GhfCsGE2pdMnAJTMQw/Z/6GQc/+L\nKil7/v36WY7to4+gXLkEBZbC/vtf25VpwgQf6Esnq1fbnd+779oEAFcyixZZZ3TGDDj88MReOy3S\nPkuX2gyVadNSdyehRNu61d60114L7dqFjsYlQnY2nHceZGTYNGkXG7162Wr699+H0qUTd92Ub/yz\nsuDMM20l7y23JDiwFLd0qZV++PBDOKLAwhsuVTz1FLz6qhVALJM2m7nGX3a2LaZs0MDGARIl5Rv/\nRx+1zaMnTvT0RDz07WtjANOmeYOQyvyDPr5WrLA02sSJNosqEVK68Z8/H84+2+rSR30/zWSVmwo4\n++z02qovnWRlWYqvSRO/e46nl1+Gxx+3De8TMS6Zso3/5s22HWPbtjbLx8XPqlVWtCqd9jxOJ48+\nCmPHWpE/v3uOH1Vo2NB6/g89FP/rpWzj37Wr9fjHjPFVvIkwcKDlhGfOtHLQLjUsXGgDvH73nBjf\nfmtrkd55J/6zqVJynv+8efDMMzZ/1hv+xGjWzJb4P/JI6EhcrGzdarWvunXzhj9RKle2mj/NmsGm\nTaGj+btI9/w3b7aibR06eNG2RFuzxioXTphgvReX3Lp1s7Uc48d7JyqRVKFRI9tcqlu3+F0n5dI+\nXbrY6sO33/Y3bAgvv2w9l1mzfDFdMluwwLZi/OQTOOSQ0NGkn7VrLfc/ejTUrh2fa6RU2mfOHCs0\n5emecJo2tXK18eyxuPjautXSDt26ecMfSqVKtvirefNopX8i2fPftEk56SQrOezpnrBy0z/vvZe4\nOcsudjzdEw2qtvH7UUfBww/H/vzBev4i0kBEFovIEhHJd12biPQRkaUiMk9EdphFzu2lNG0ai+hc\nSRx0kE0PbN4ctmwJHY0rioUL4Ykn4PnnveEPTcQmrgwYYOm3KIjFBu6lgCVAfeAbbE/fJqq6OM8x\nFwDtVPUiETkF6K2qdQo4n+6/vzJ3rjU8LjxVuOgiWxXqdWCSw9at9u/VsiW0bh06GpdryBDo3t0+\nAGI5jhaq518bWKqqK1R1CzAMaLjdMQ2BQQCqOhOokHdT9+117+4Nf5SIwHPPQe/eNnjoou+JJ2yH\ntlatCj/WJc4118Bhh1kl3dBi0fgfBKzK83h1znM7OmZNPsf8qXnzGETlYurgg23ef7Nm1qt00bV4\nsaXqBgzwdE/UiFhJ+n79bA1TSJEs3/XAA13//D4jI4OMjIxgsbhtWra0ndN69oTOnUNH4/KTlWWb\nHHXtCtWqhY7G5adyZds8p3lzm0ZdnFX0mZmZZGZmliiOWOT86wBdVbVBzuPOgKpqjzzH9AOmqOrw\nnMeLgXqqujaf8xVpA3eXWLkVC99/32YuuGh58knbSnDKFK/dE2W542h168J995X8fEEWeYlIaeAL\nbMD3W2AWcLWqLspzzIVA25wB3zpArx0N+HrjH23PPmsLwD78MLEbVrgdy93oKMROUq7oVq+2adST\nJ8M//1mycwUZ8FXVLKAdMAFYCAxT1UUi0lpEWuUc8y7wlYgsA54D/lPS67pwWreGXXe1XqaLhuxs\nS8vde683/MmiShUbR2vePMw4WiQXeUUtJvd3y5fbUvUPP4QaNUJH4556CoYPh6lT/W4smajarl8Z\nGXDXXcU/T8rV9nHR9tRTMGxY4vcrdX/15Zdwyinw0Ue+M1cyWrnS9tDIzIRjjineOVKqto+LvrZt\nbbvH3r1DR5K+srPh3/+22Vfe8CenQw6xqgaJnkbtPX9XIrm9Tk//hNG377aN2P3uK3mp2haq9esX\nbxq1p31cEJ7+CcPTPakldxp1cdI/nvZxQbRtawtVevUKHUn6yM62WSL33OMNf6qoWtUqfiYq/eM9\nfxcTy5dbL9QXfyVG794wYoTP7kk1qnDBBXD66UUrouhpHxdUv37w4ouWhigTycIhqWHJEqvYOX06\nVK8eOhoXa6tXQ61aRdtC1dM+LqjWrWGvvaBHj8KPdcWzdavtc9G1qzf8qapKFaufdcMNto95vHjP\n38XUqlU2Z9k3fo+Pbt2sbs/48V67J5WpwqWXQs2aO7fzl6d9XCQMGmQ9l9mzYZddQkeTOubOhfPP\nt41ADj44dDQu3v73P+tAvfmm1WzaEU/7uEi4/nr4xz9iU63QmU2bLN3z+OPe8KeLAw6wIorXXw8b\nNsT+/N7zd3Hx/fe24furr1rdElcynTrZvP7XX/cNWtJNixY2gaJ//4KP8bSPi5SxY6FNG/j0UxsI\ndsUzaZIN/s2bB/vtFzoal2jr11tHqndvuOSS/I/xxt9FTtu28MsvMHhw6EiS0w8/WN73xRfh3HND\nR+NC+eADaNzYOgCV8tn93Bt/FzkbN9qc5S5d4OqrQ0eTXFThyiut8NcTT4SOxoV2zz0wZw68887f\nZ3p54+8iKXeWyowZcNhhoaNJHi++aCUzZs2C8uVDR+NC27IFzjzTOgQdOvz17xLe+IvI3sBwoCrw\nNdBYVX/J57ivgV+AbGCLqtbewTm98U9BvXtvqz5ZrlzoaKJv8WI44wyb01+zZuhoXFR89ZVtojR+\nvN1R5wox1bMzMFFVawCTgYL2oskGMlT1hB01/C513XILVKxYtHol6er33y2/262bN/zur6pVgz59\noEmTkk//LGnPfzFQT1XXisgBQKaqHpnPcV8BJ6nqDztxTu/5p6h162zD6gEDLA3k8temjQ2Sv/qq\nT+t0+WvRwkp9vPyyvUdC9PwrqupaAFX9H1CxgOMUeE9EZovIjSW8pktS++0Hr7xiJWvXrAkdTTQN\nH25TO597zht+V7CnnrLB3xdeKP45Cq29KCLvAXknFwnWmOd3A19Ql/00Vf1WRPbHPgQWqeq0Ikfr\nkl5GhqWArrzSNq3w/P82S5fCzTfDuHGw556ho3FRtvvuMHKkjQuddFLxzlHStM8iLJefm/aZoqo7\nrOYuIl2AX1U138lrIqJdunT583FGRgYZvkQ0pWRnQ8OGVgLCN4AxGzZY/Za2bS3t49yOZGZmkpmZ\nyYIFMHky/PTTAwmf7dMD+FFVe4jIncDeqtp5u2N2A0qp6gYR2R2YADygqhMKOKfn/NPATz9Zj6Vb\nN7jqqtDRhKVqayB2281u4z3d44qibVt45pnET/XcB3gNOBhYgU31/FlEKgPPq+rFIlINeBNLCZUB\nhqhq9x2c0xv/NDF3rm1aXZw9S1PJk0/aCuhp02DXXUNH45LNpk1Qvrwv8nJJ5pVXbGOSWbNg331D\nR5N4mZk2bW/mTNvD1bni8BW+Lindeac1/hMm2Ebw6WLZMturdfBgOOec0NG4ZOaNv0tKWVm2a1GV\nKla/PB389JMN8N56qw/wupLzxt8lrfXrbVPyNm2gXbvQ0cTXli3QoAEce6zl+50rqeI0/oXO83cu\nEfbcE95+29IglSvD5ZeHjig+VOE//7GZPT17ho7GpTNv/F1kVKsGY8ZY6Yf99oN69UJHFHv33Wcr\nMzMzoXTp0NG4dOZ7+LpIOeEEGDrUVgDPnx86mth68klblTluHPzf/4WOxqU7b/xd5NSvb5ULL7jA\nSh6kgpdfttXMEybA/vuHjsY5T/u4iGrSBH79Fc4+25avV68eOqLiGzECOne22vyHHBI6GueMN/4u\nsm7Mqf+azB8AgwdDp06W6jnyb8XOnQvHG38XaXk/ACZNgiOOCBtPUQwYYKuXJ02Co48OHY1zf+WN\nv4u8G2+EMmVs/9I337TFUVHXpw88/rilepLxjsWlPl/k5ZLG2LHQtCk8/7ytCI6irVttc+2JE+Gd\nd2z6qnPx5ou8XEq74ALLnV9yCaxYYZvCRKn88S+/WHlqVZg+HSpUCB2RcwXzqZ4uqZx4opU+fukl\nmxG0fn3oiMznn1t5isMPtx6/N/wu6rzxd0mnWjXrWe+zj30YzJ0bLhZVeOYZW418223Qt6+NTzgX\ndZ7zd0lt2DDb9/aWW+COO2CXXRJ37bVrbTD6m29gyBCoUSNx13Yur+Lk/L3n75Jakybw8cf2ddxx\nth4g3jZvtqJsxxxjXx995A2/Sz4lavxF5AoRWSAiWSJSawfHNRCRxSKyJGevX7cTMjMzQ4cQCYW9\nDlWrwltvQY8e0Lw5NGpkHwaxlp1tU02POcamcE6bBo88AuXKxf5aBfH3xDb+WpRMSXv+84HLgKkF\nHSAipYC+wPnAMcDVIuJrHXeCv7nNzr4ODRvawGu9enDZZbY/8MSJtllMSfzyC/TubQvMHn4YnnrK\nBnVDrNj198Q2/lqUTIkaf1X9QlWXAjvKNdUGlqrqClXdAgwDGpbkus4VZPfdoX17+PJLSwl16gQH\nHQQ33WQfBBs37tx5Vq+GF16Axo1tgHnGDNtvePZs24jFuWSXiHkJBwGr8jxejX0gOBc35cpBixb2\ntWwZvP463HsvfPaZfRj8859w6KE2QFyunK0XWL0ali+3r19/hXPPhQsvtNW6BxwQ+jdyLrYKne0j\nIu8BlfI+BShwj6q+nXPMFKCjqs7J5+cvB85X1VY5j68DaqvqLQVcz6f6OOdcEcV8ha+qnlv8cABY\nA+QtZFsl57mCrhehNZvOOZeaYjnVs6BGezZwuIhUFZFyQBNgdAyv65xzrohKOtXzUhFZBdQBxojI\n2JznK4vIGABVzQLaAROAhcAwVV1UsrCdc86VRORW+DrnnIu/yKzw9YVgRkSqiMhkEVkoIvNFJN+B\n8XQiIqVEZI6IpHW6UEQqiMgIEVmU8/44JXRMoYjIbTkLTD8TkSE5KeW0ICIviMhaEfksz3N7i8gE\nEflCRMaLSKGlBSPR+PtCsL/YCnRQ1WOAukDbNH4tcrUHPg8dRAT0Bt5V1aOA44C0TJ+KyIHAzUAt\nVT0Wm7jSJGxUCTUQayvz6gxMVNUawGTgrsJOEonGH18I9idV/Z+qzsv5fgP2H/ygsFGFIyJVgAuB\nAaFjCUlE9gTOUNWBAKq6VVUjUtA6iNLA7iJSBtgN+CZwPAmjqtOAn7Z7uiHwcs73LwOFbncUlcY/\nv4Vgadvg5RKRQ4HjgZlhIwnqSaATtrYknVUD1onIwJwUWH8R2TV0UCGo6jfA48BKbNr4z6o6MWxU\nwVVU1bVgHUigYmE/EJXG321HRPYARgLtc+4A0o6IXASszbkTEnZcRiTVlQFqAU+rai1gI3arn3ZE\nZC+sp1sVOBDYQ0SuCRtV5BTaWYpK41+khWCpLudWdiTwiqq+FTqegE4DLhGR5cBQ4CwRGRQ4plBW\nA6tUNbde6UjswyAdnQMsV9Ufc6aSvwGcGjim0NaKSCUAETkA+K6wH4hK4+8Lwf7qReBzVe0dOpCQ\nVPVuVT1EVQ/D3hOTVbVp6LhCyLmlXyUiR+Q8VZ/0HQRfCdQRkfIiIthrkW6D39vfCY8GmuV8fwNQ\naKcxEhvOqWqWiOQuBCsFvJCuC8FE5DTgWmC+iMzFbt/uVtVxYSNzEXALMEREygLLgeaB4wlCVWeJ\nyEhgLrAl58/+YaNKHBF5FcgA9hWRlUAXoDswQkRaACuAxoWexxd5Oedc+olK2sc551wCeePvnHNp\nKCaNf37LjfM5po+ILBWReSJyfCyu65xzrnhi1fPPb7nxn0TkAuAfqlodaA30i9F1nXPOFUNMGv8C\nlhvn1RAYlHPsTKBC7pxU55xziZeonP/25RvW4OUbnHMumEjM88/L9/B1zrmiK+oWuInq+a8BDs7z\neIflG7KylHXrlKlTlUceUf71L2XvvZXzz1eGDlV+/11RTf2vLl26BI8hCl/+Omz7ateuC7ffrlSs\nqFSvrrRpowwfrixerPz669+P37RJmTNHGTBAuekmpWpV5aijlAcfVJYtC//7+PsiNl/FEcue/44K\nb40G2gLDRaQOVoVvbUEnKlUK9t0XzjzTvgB+/x3efBNeeAHatoWbb4YOHWDPPWP4GzgXUZMmQY8e\n8OGH9v6fNg2qVy/858qVgxNOsK+WLUEVpk+HoUOhbl04+2y47z445pj4/w4uWmI11fNV4CPgCBFZ\nKSLNRaS1iLQCUNV3ga9EZBnwHPCfol5j113hmmvgvfdg1iz46it78/fsaR8MzqWiBQvgwguhdWu4\n/nq47TZ49NGda/jzIwKnngpPPQXLl0OtWvYBcOWVsGxZbGN3ERf6diWf2xfdWQsWqF52mWq1aqpT\npuz0jyWNKan4SxVDOr4O69ertmmjWrGiaq9eqps22fPxeC02bFB95BHVffdV7d5ddfPmmF8iLtLx\nfVGQnHazSG1t5Gr7iIgWNaYxY6BNG7j0UujeHfbYI07BOZcA06ZB06bWI+/ZE/baKzHX/eor+3+0\ndq2lV088MTHXdSUnImhEB3zj6uKLYf582LABjjsO5s4NHZFzRbd5M3TuDI0bQ69eMGBA4hp+gGrV\nYNw4uP12uOACePZZGyNwqSklev55vfaaDYj17m1jBM4lg3Xr4IorYPfd4aWXYP/9w8azdKnFc+yx\n0K+fxeWiK217/nk1bgyTJ8P999tsoK1bQ0fk3I4tWAC1a9vsm9Gjwzf8YAPK06fbzLs6dWDFitAR\nuVhLucYf4J//tBlBCxfCZZf5bCAXXe++C2edBQ8+CI88AqVLh45om912s7uQli3h9NMttepSR0o2\n/gD77GMDwRUqwPnnwy+/hI7Iub8aPhyaN7fe/nXXhY4mfyJw663w2GNQvz5MnRo6IhcrKdv4A5Qt\nC4MGwfHHQ0aGzWJwLgpeeMHSkhMnWron6po0sYVhV15pH1Yu+aV04w+Ws+zdGxo2hHr1/APAhden\nj6V5pkyxFGWyqF/f0lQ33mh31S65pdxsnx158EEYMQIyM618hHOJ9uyzlkKZMgWqVg0dTfHMmmXT\nq19+2aaEuvCKM9snrRp/VbjrLisRMWlSYudQOzd4sM3jf/99OOyw0NGUzPTpdjc9eDCcd17oaJw3\n/jtBFdq3h48/tg8Bn7/sEmH0aGjVyjodqVJEbdo0m033zjs2VdWF443/TsrOtulrP/xglUKjNL3O\npZ6pU22g9N134aSTQkcTW2PG2BjABx/A4YeHjiZ9+SKvnVSqFPTvb/P/27f3Jewufr74whYeDh2a\neg0/WO7/gQegQQP47rvQ0biiSMvGH2wa6MiRln994onQ0bhUtG4dXHSRLd6qXz90NPHTqpWVUrno\nIvjtt9DRuJ2VlmmfvFatsvrmTz5ptUyci4U//oBzzrHNiLp1Cx1N/KlCs2awcaPV15IiJSBcSXnO\nv5jmzrUZC5MmWSEr50pC1TZe2bwZhg2zNGM6+OMPW0x50UW2O5hLnGA5fxFpICKLRWSJiNyZz9/X\nE5GfRWROzte9sbhurJxwgi28ufRSGwR2riR69YLPP7d58OnS8AOUL28TKPr3h1GjQkfjClPinr+I\nlAKWAPWBb4DZQBNVXZznmHpAR1W9ZCfOl/Cef6477oBPPoHx46FMLHc3dmljyhS4+mqYOTN5F3GV\n1OzZtvVpYPgEAAAUM0lEQVTklClQs2boaNJDqJ5/bWCpqq5Q1S3AMKBhfvHF4Fpx9cgj1ujfcUfo\nSFwyWrnSBj4HD07fhh/g5JNtEkWjRl5QMcpi0fgfBKzK83h1znPbqysi80TkHRE5OgbXjbnSpW1K\n3qhRNhPIuZ31xx9w+eXQsaMN9Ka766+3GU4tW/pU6qhKVEbyE+AQVT0e6AtENiO4zz42W+Gmm2DZ\nstDRuGTRsaP19jt2DB1JdPTqZZvA9O4dOhKXn1hkttcAh+R5XCXnuT+p6oY8348VkWdEZB9V/TG/\nE3bt2vXP7zMyMsjIyIhBmDvvpJOga1dblTl9ug1kOVeQESNs79s5c3yKY1677GKvzSmnWPmHU08N\nHVHqyMzMJDMzs0TniMWAb2ngC2zA91tgFnC1qi7Kc0wlVV2b831t4DVVPbSA8wUb8M1LFa66yu4E\n+vULHY2LqmXLrFEbOxZOPDF0NNE0Zgz85z82pdqr6cZHkAFfVc0C2gETgIXAMFVdJCKtRaRVzmFX\niMgCEZkL9AKuKul1400EBgyw/YCHDw8djYuiTZusg3Dffd7w78jFF1uJC8//R4sv8irEJ59YzfJZ\ns+DQQ0NH46Lk1ltths/rr3u6pzCbN9sdUvPm0LZt6GhSj6/wjZOePW3xytSpPv/fmbFjoXVr+PRT\n2Hvv0NEkh6VL7QPAV9LHnlf1jJMOHazu/3//GzoSFwXffWcpjFde8Ya/KKpXh8cft/2AN24MHY3z\nnv9O+vZbqFXLpoGecUboaFwoqpbDPu649CjYFmuqcN11UKECPPNM6GhSh/f846hyZXj+eVu8sn59\n6GhcKM88Yz3/PLORXRGIwNNP2+5fY8eGjia9ec+/iFq3tsGrgQNDR+ISbfFiu+v76CNLYbjiy8yE\na6+1MZP99gsdTfLzAd8E2LABjj8eHnvM9i916WHLFhusbNkS2rQJHU1quP12WL7cZ0vFgqd9EmCP\nPWDQICv/8L//hY7GJUq3brZAqXXr0JGkjocftkVyL70UOpL05D3/Yrr7bpg/H0aP9l5Lqvv4Y9ug\nZM4cOCi/koWu2D77zArAffxxeldCLSnv+SdQ166werXn/lPd77/bIH/v3t7wx8Oxx9pU6pYtITs7\ndDTpxXv+JZDba/nkEzjkkMKPd8mnY0f7kPcSH/GzdSucdhrccIPVAHJF5wO+ATz8sK38HT/e0z+p\nZto0q+w6f77PSIm3xYvh9NNhxgw4/PDQ0SQfT/sEcOed8NNP8NxzoSNxsfTbb1aH5tlnveFPhCOP\nhHvusdc8Kyt0NOnBe/4x8PnncOaZVvztsMNCR+NioX17+PFHK+HgEiM7GzIybPvHW28NHU1y8bRP\nQI89Bu++a0WrSvn9VFKbOtUWIH32me3n4BJn2TKoU8c2UfKFdDvP0z4BdehgM0M8/ZPcfvsNWrSw\nDXy84U+8ww+3/RE8/RN/3vOPoUWLbPn/xx977f9k1b69jeEMGhQ6kvSVm/65/HL793CF87RPBPTo\nARMmwMSJPvsn2bz/Plx9tc3u8V5/WEuXQt26nv7ZWcHSPiLSQEQWi8gSEbmzgGP6iMhSEZknIsfH\n4rpR1LGj1f/p3z90JK4oNm60dM8zz3jDHwXVq8O99/rir3iKxQbupYAl2Abu3wCzgSaqujjPMRcA\n7VT1IhE5BeitqnUKOF9S9/zBZv/Uq+dL1pPJbbdZqeYhQ0JH4nJlZdksuiZN4OabQ0cTbaF6/rWB\npaq6QlW3AMOAhtsd0xAYBKCqM4EKIlIpBteOpKOPtsbkxht9w+pk8OGHMGwY9OkTOhKXV+nS8OKL\n8MADVv3TxVYsGv+DgFV5Hq/OeW5Hx6zJ55iU0qkT/PCDvXlddP3+u6V7+va1qp0uWmrUgM6d4d//\n9vRPrEVyO/KuebZJysjIICMjI1gsxVW2rBV9q18fzj8fqlQJHZHLz/3325aMl18eOhJXkNtug5Ej\nbRzN91IwmZmZZGZmlugcscj51wG6qmqDnMedAVXVHnmO6QdMUdXhOY8XA/VUdW0+50v6nH9eDzxg\nK3/HjPHZP1EzcyY0bGiLuSpWDB2N25FFiyz/7+No+QuV858NHC4iVUWkHNAEGL3dMaOBpjlB1gF+\nzq/hT0V33WVVIX3eeLRs2mTpnt69veFPBkcdZTPpfBwtdkrc+KtqFtAOmAAsBIap6iIRaS0irXKO\neRf4SkSWAc8BaVO4tVw526moUyf45pvQ0bhcDz5o+eTGjUNH4nbW7bfbArwXXggdSWrwRV4Jcv/9\nMG8evPWWp39Cy92Z69NP4YADQkfjimLBAjjrLN9DY3te2yfC7r0XvvoKXn01dCTpbdMmaNYMnnzS\nG/5kVLOmlXxo1crTPyXlPf8E8h5nePfea73HN9/0O7BktWULnHIKtG1rK4Cd1/ZJCvfcAwsXeuMT\nQu6H77x5ULly6GhcSeRuoTpnDhx8cOhowvO0TxK4/3748ksvI5BomzZZmeDHH/eGPxUce6xt+PLv\nf3v6p7i85x/AnDnQoIH1QA88MHQ06eGuu2yuuN9xpY6tW23jl9atbQpoOvO0TxLp2hVmz/bFX4kw\nY8a2xVyVUraiVHrKnf2T7ou/PO2TRO6+2+b9v/RS6EhS2++/2+yevn294U9FNWvaLnotWnjtn6Ly\nnn9AuYNW6d5riacOHexDdtiw0JG4eNm61XbQu+aa9C397GmfJNS9+7adv3zj99iaOnXbzlxesTO1\n5e78NW0aHHlk6GgSz9M+SahTJ9i82WrMuNj55Re44QZ4/nlv+NNB9epWsuOGG+xOwBXOe/4R8OWX\ntmhl6lQ45pjQ0aSGZs2gfHno1y90JC5RVK18+pln2mK+dOJpnyTWv781VDNmWDE4V3yvv24bgMyd\nC3vsEToal0irV8OJJ8I778BJJ4WOJnE87ZPEbrzR5vzn2cfGFcO339qy/1de8YY/HVWpAk89ZYO/\nv/0WOppo855/hHz3HRx/vBV/S8LNy4LLzoYLL4STT4aHHgodjQupWTO7g+7fP3QkieE9/yRXsaLt\n+du0Kfz4Y+hokk+vXjbQe//9oSNxofXpA5Mm2Ypulz/v+UfQbbfBqlUwYoSv/t1Zc+bYYN+sWVCt\nWuhoXBRMnw6XXmrvjYMOCh1NfCW85y8ie4vIBBH5QkTGi0iFAo77WkQ+FZG5IjKrJNdMB488YvOW\nfceinbNhg83n79PHG363Td260K4dXHcdZGWFjiZ6StTzF5EewA+q+qiI3Ansraqd8zluOXCiqv60\nE+dM+54/wOefQ716MGWKLWF3BWvZ0vL9AweGjsRFTVYWnHuuTf9M5ckUIXL+DYGXc75/Gbi0gOMk\nBtdKK0cfDT17wpVXWs/W5W/QIPjwQ5vh4dz2Spe28unPPQeTJ4eOJlpK2vP/UVX3KehxnueXAz8D\nWUB/VX1+B+f0nn8eLVrYzkWDBnn+f3u5FR397sgV5r33bAbQnDmpWeCvOD3/Mjtx0veAvC+XAArk\nt4auoFb7NFX9VkT2B94TkUWqOq2ga3bNc3+WkZFBRhrPe+zbF2rXtllAvmXdNr/+CldcYXdH3vC7\nwpx7rjX+114L48fbHUEyy8zMJDMzs0TnKGnPfxGQoaprReQAYIqqHlXIz3QBflXVJwr4e+/5b2fR\nIstZTpgAJ5wQOprwVG0Rz+67w4ABoaNxyWLrVpsRVru2TapIJSFy/qOBZjnf3wC8lU9Qu4nIHjnf\n7w6cBywo4XXTylFHwdNPQ6NGsG5d6GjC69vXPhA9z++KokwZK+396qtWAiTdlbTnvw/wGnAwsAJo\nrKo/i0hl4HlVvVhEqgFvYimhMsAQVe2+g3N6z78AnTvb7l/jx9sbOR1Nnmy9/unTfVqnK56PP4YL\nLoD337eOVSrwwm4pLivLyhfUrGkbkaebr76yuduvvgpnnx06GpfMXnwRHn0UZs6ECvmuTkouXt4h\nxZUuDUOHwqhRMHhw6GgSa8MG24f3nnu84Xcl16IFnHMONG6cvvX/veefhBYutCmOI0faQHCqy8qy\nmT17722rnn3Kq4uFrVvhX/+y9OHTTyf3+8p7/mnimGMs9XHllfDFF6GjiS9Vq3X088/w7LPJ/R/U\nRUuZMjB8OHzwgZUGSTfe+Cepc86x6WoXXQTffx86mvh54gkb5H3zTdhll9DRuFSz554wZgz06AFv\nvx06msTyxj+JtWgBV11lt66pWALitdesTPPYsbDXXqGjcamqalUbR2vZ0mYApQvP+Se57GzbBezr\nr23ruvLlQ0cUGxMmWDXG996D444LHY1LBxMn2jTiceOgVq3Q0RSNT/VMU1lZtmz9t9/gjTegbNnQ\nEZVMZqbNwnjjDTj99NDRuHTyxhu2DWhmJtSoETqanecDvmmqdGnbs1Yk+WuXf/ihDWQPH+4Nv0u8\nRo1sLO3cc21PjVTmjX+KKFvWcuQ//WQbm2zeHDqiops+HS67zNYwnHVW6GhcumrWzLYCPessm1ad\nqrzxTyHly8Po0VYCumFD2LgxdEQ7b9w4uOQSePllK77lXEj//rfNADrnHJg7N3Q08eGNf4opX972\n/q1Y0RrRX34JHVHhhgyBG26At96ymivORcG111oRwQYNbC1AqvHGPwWVKWNbGp5wguXNly8PHVH+\nVG0ef+fONpf/1FNDR+TcX11+uY2nXX653ZWmEm/8U1SpUtC7N7RpY8XQJk0KHdFfbdwITZvaf6hp\n02zVsnNRdN55MHUqPPSQdVSys0NH9FcjRhTv57zxT2EiNm1t+HC7hX3ySetth/bll9t6+dOn2yIb\n56LsqKNgxgx7v15ySTRW1W/aBDffbB9IxeGNfxrIyLA37pAhllNfsyZMHKpWk+jUU21AbdAg2G23\nMLE4V1T77WeLDmvWtIWHY8eGi2X5cjjjDFi9Gj75pHjn8MY/TRx6qPVa6ta1sYDBgxN7F7B6tfWY\nHnnEaqm0a+dF2lzyKVcOune3TkybNvY+Xr8+cdffssX2Iahd26Z0v/FG8UuflKjxF5ErRGSBiGSJ\nSIELokWkgYgsFpElInJnSa7piq9sWejSxaZVdu9uC1mK22vYWZs2WcXEE06Ak06y6518cnyv6Vy8\nZWTAvHk2dlWjBjz/fPwXV06fDieeaJMjZs60arcl6kCparG/gBpAdWAyUKuAY0oBy4CqQFlgHnDk\nDs6pzkyZMiVu5968WfXZZ1UrV1Zt0kR1yZLYnn/TJtV+/VQPPlj14otV588v/rni+TokG38ttonK\na/Hxx6pnnKF67LGqo0apbt0a2/N/8IFqgwaqVaqoDh2qmp3992Ny2s0itd8l6vmr6hequhTY0edP\nbWCpqq5Q1S3AMKBhSa6bLjIzM+N27rJl7bZ1yRKbaVO3rs1qGDGiZKuDlyyB++6D6tWtDPOIEVYq\nt2bN4p8znq9DsvHXYpuovBYnnmizgbp0sbTmP/5hqZl164p/zvXrbYyuXj1bA9OoESxbBk2axC5d\nmohtwA8CVuV5vBr7QHARsMcecO+90LGjNdbPPGMzhM45x3YJq1cPjjyy4DfcunUwa5bdho4bBytW\nWC5y1ChL9TiXDkSsgW7UCGbPtp3BqlWzgeHzzrMUa82a8H//l//Pb9xopSTmzbPqvFOm2P+/m26y\nXezKxKGlLvSUIvIeUCnvU4AC96hqmm1/kLp23dXK2V5zjW2UPmWK9Wa6d4dvv4VKleCAA2wrxV9/\ntZXDP/5ob9qTToJTToEHH4T69ePzRnUuWZx8Mrz0ku0898EHVp78ppvsrnjXXW1q81572XjYH39Y\nL3/1ahs7OO44+wB56aX472ERk5LOIjIF6Kiqc/L5uzpAV1VtkPO4M5af6lHAuSIwE90555KLFrGk\ncyz7aAVdeDZwuIhUBb4FmgBXF3SSov4Czjnniq6kUz0vFZFVQB1gjIiMzXm+soiMAVDVLKAdMAFY\nCAxT1UUlC9s551xJRG4nL+ecc/EXmRW+vhDMiEgVEZksIgtFZL6I3BI6ptBEpJSIzBGR0aFjCUlE\nKojICBFZlPP+OCV0TKGIyG05C0w/E5EhIlIudEyJIiIviMhaEfksz3N7i8gEEflCRMaLSIXCzhOJ\nxl9ESgF9gfOBY4CrReTIsFEFsxXooKrHAHWBtmn8WuRqD3weOogI6A28q6pHAccBaZk+FZEDgZux\nhaXHYmOXTcJGlVADsbYyr87ARFWtgS26vauwk0Si8ccXgv1JVf+nqvNyvt+A/Qc/KGxU4YhIFeBC\nYEDoWEISkT2BM1R1IICqblXVBFaViZzSwO4iUgbYDfgmcDwJo6rTgJ+2e7ohkLvjwMvApYWdJyqN\nf34LwdK2wcslIocCxwMzw0YS1JNAJ2xtSTqrBqwTkYE5KbD+IrJr6KBCUNVvgMeBlcAa4GdVnRg2\nquAqqupasA4kULGwH4hK4++2IyJ7ACOB9jl3AGlHRC4C1ubcCQk7LiOS6soAtYCnVbUWsBG71U87\nIrIX1tOtChwI7CEi14SNKnIK7SxFpfFfAxyS53GVnOfSUs6t7EjgFVV9K3Q8AZ0GXCIiy4GhwFki\nMihwTKGsBlap6sc5j0diHwbp6Bxguar+mDOV/A0g3TcBXSsilQBE5ADgu8J+ICqN/58LwXJG7ZsA\n6Tyz40Xgc1XtHTqQkFT1blU9RFUPw94Tk1W1aei4Qsi5pV8lIkfkPFWf9B0EXwnUEZHyIiLYa5Fu\ng9/b3wmPBprlfH8DUGinMRJVWFQ1S0RyF4KVAl5I14VgInIacC0wX0TmYrdvd6vquLCRuQi4BRgi\nImWB5UDzwPEEoaqzRGQkMBfYkvNn/7BRJY6IvApkAPuKyEqgC9AdGCEiLYAVQONCz+OLvJxzLv1E\nJe3jnHMugbzxd865NOSNv3POpSFv/J1zLg154++cc2nIG3/nnEtD3vg751wa8sbfOefS0P8D6yQh\nUTSOiswAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d64f240>"
]
},
"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": [
"<!--NAVIGATION-->\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
}