{ "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", "< [Simple Scatter Plots](04.02-Simple-Scatter-Plots.ipynb) | [Contents](Index.ipynb) | [Density and Contour Plots](04.04-Density-and-Contour-Plots.ipynb) >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualizing Errors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For any scientific measurement, accurate accounting for errors is nearly as important, if not more important, than accurate reporting of the number itself.\n", "For example, imagine that I am using some astrophysical observations to estimate the Hubble Constant, the local measurement of the expansion rate of the Universe.\n", "I know that the current literature suggests a value of around 71 (km/s)/Mpc, and I measure a value of 74 (km/s)/Mpc with my method. Are the values consistent? The only correct answer, given this information, is this: there is no way to know.\n", "\n", "Suppose I augment this information with reported uncertainties: the current literature suggests a value of around 71 $\\pm$ 2.5 (km/s)/Mpc, and my method has measured a value of 74 $\\pm$ 5 (km/s)/Mpc. Now are the values consistent? That is a question that can be quantitatively answered.\n", "\n", "In visualization of data and results, showing these errors effectively can make a plot convey much more complete information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Errorbars\n", "\n", "A basic errorbar can be created with a single Matplotlib function call:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.style.use('seaborn-whitegrid')\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nw/0Pa4w4rypgtw8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 10, 50)\n", "dy = 0.8\n", "y = np.sin(x) + dy * np.random.randn(50)\n", "\n", "plt.errorbar(x, y, yerr=dy, fmt='.k');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the ``fmt`` is a format code controlling the appearance of lines and points, and has the same syntax as the shorthand used in ``plt.plot``, outlined in [Simple Line Plots](04.01-Simple-Line-Plots.ipynb) and [Simple Scatter Plots](04.02-Simple-Scatter-Plots.ipynb).\n", "\n", "In addition to these basic options, the ``errorbar`` function has many options to fine-tune the outputs.\n", "Using these additional options you can easily customize the aesthetics of your errorbar plot.\n", "I often find it helpful, especially in crowded plots, to make the errorbars lighter than the points themselves:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAjkAGO7/AZgUo2sIozQmAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.errorbar(x, y, yerr=dy, fmt='o', color='black',\n", " ecolor='lightgray', elinewidth=3, capsize=0);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to these options, you can also specify horizontal errorbars (``xerr``), one-sided errorbars, and many other variants.\n", "For more information on the options available, refer to the docstring of ``plt.errorbar``." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Continuous Errors\n", "\n", "In some situations it is desirable to show errorbars on continuous quantities.\n", "Though Matplotlib does not have a built-in convenience routine for this type of application, it's relatively easy to combine primitives like ``plt.plot`` and ``plt.fill_between`` for a useful result.\n", "\n", "Here we'll perform a simple *Gaussian process regression*, using the Scikit-Learn API (see [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) for details).\n", "This is a method of fitting a very flexible non-parametric function to data with a continuous measure of the uncertainty.\n", "We won't delve into the details of Gaussian process regression at this point, but will focus instead on how you might visualize such a continuous error measurement:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.gaussian_process import GaussianProcess\n", "\n", "# define the model and draw some data\n", "model = lambda x: x * np.sin(x)\n", "xdata = np.array([1, 3, 5, 6, 8])\n", "ydata = model(xdata)\n", "\n", "# Compute the Gaussian process fit\n", "gp = GaussianProcess(corr='cubic', theta0=1e-2, thetaL=1e-4, thetaU=1E-1,\n", " random_start=100)\n", "gp.fit(xdata[:, np.newaxis], ydata)\n", "\n", "xfit = np.linspace(0, 10, 1000)\n", "yfit, MSE = gp.predict(xfit[:, np.newaxis], eval_MSE=True)\n", "dyfit = 2 * np.sqrt(MSE) # 2*sigma ~ 95% confidence region" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now have ``xfit``, ``yfit``, and ``dyfit``, which sample the continuous fit to our data.\n", "We could pass these to the ``plt.errorbar`` function as above, but we don't really want to plot 1,000 points with 1,000 errorbars.\n", "Instead, we can use the ``plt.fill_between`` function with a light color to visualize this continuous error:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize the result\n", "plt.plot(xdata, ydata, 'or')\n", "plt.plot(xfit, yfit, '-', color='gray')\n", "\n", "plt.fill_between(xfit, yfit - dyfit, yfit + dyfit,\n", " color='gray', alpha=0.2)\n", "plt.xlim(0, 10);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note what we've done here with the ``fill_between`` function: we pass an x value, then the lower y-bound, then the upper y-bound, and the result is that the area between these regions is filled.\n", "\n", "The resulting figure gives a very intuitive view into what the Gaussian process regression algorithm is doing: in regions near a measured data point, the model is strongly constrained and this is reflected in the small model errors.\n", "In regions far from a measured data point, the model is not strongly constrained, and the model errors increase.\n", "\n", "For more information on the options available in ``plt.fill_between()`` (and the closely related ``plt.fill()`` function), see the function docstring or the Matplotlib documentation.\n", "\n", "Finally, if this seems a bit too low level for your taste, refer to [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb), where we discuss the Seaborn package, which has a more streamlined API for visualizing this type of continuous errorbar." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Simple Scatter Plots](04.02-Simple-Scatter-Plots.ipynb) | [Contents](Index.ipynb) | [Density and Contour Plots](04.04-Density-and-Contour-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 }