{ "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": {}, "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": {}, "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": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-r--r-- 1 tarrysingh staff 26K Aug 29 11:25 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": {}, "outputs": [ { "data": { "image/png": "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\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": {}, "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": {}, "outputs": [ { "data": { "image/png": "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\ngg==\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": {}, "outputs": [ { "data": { "image/png": "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\ngg==\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.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }