{ "cells": [ { "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 multiplatform 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 desire.\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/), 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": { "tags": [] }, "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 you shall see throughout this part of the book." ] }, { "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": { "tags": [] }, "outputs": [], "source": [ "plt.style.use('classic')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Throughout this chapter, we will adjust this style as needed.\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 a Jupyter 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", "Matplotlib also works seamlessly 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 IPython's Matplotlib mode is not required." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting from a Jupyter Notebook\n", "\n", "The Jupyter 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 a Jupyter notebook can be done with the `%matplotlib` command, and works in a similar way to the IPython shell.\n", "You also have the option of embedding graphics directly in the notebook, with two possible options:\n", "\n", "- `%matplotlib inline` will lead to *static* images of your plot embedded in the notebook.\n", "- `%matplotlib notebook` will lead to *interactive* plots embedded within the notebook.\n", "\n", "For this book, we will generally stick with the default, with figures rendered as static images (see the following figure for the result of this basic plotting example):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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, we can run this:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": 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, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-r--r-- 1 jakevdp staff 26K Feb 1 06:15 my_figure.png\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 (see the following figure):" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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", "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, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "text/plain": [ "{'eps': 'Encapsulated Postscript',\n", " 'jpg': 'Joint Photographic Experts Group',\n", " 'jpeg': '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 is 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. I'll quickly highlight the differences between the two here." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### MATLAB-style Interface\n", "\n", "Matplotlib was originally conceived 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 (the following figure shows the result):" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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 recognize 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, as shown in the following figure, you might do the following:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "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 simpler 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 the following chapters, 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 I will highlight as they come up in the following chapters." ] } ], "metadata": { "anaconda-cloud": {}, "jupytext": { "formats": "ipynb,md" }, "kernelspec": { "display_name": "Python 3.9.6 64-bit ('3.9.6')", "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.9.6" }, "vscode": { "interpreter": { "hash": "513788764cd0ec0f97313d5418a13e1ea666d16d72f976a8acadce25a5af2ffc" } } }, "nbformat": 4, "nbformat_minor": 4 }