{ "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": {}, "outputs": [ { "data": { "image/png": "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\n/vw+bsLWvrPZrO96FixYoAULFmjDhg011er1XKFQUC6X0+nTp623kkyO2XVBHLPJ+WzjvE2n07rz\nzjsrrpY3/prZs2dXVVtYx2G6by+1fM6ZTKbic4lcrS/qN0CiYryPslgsatWqVZG/g476q8dqeUGv\nRuiSWA/rQ21cmlAAJEFNLexPfvKT2r9/v61ajOVyOeVyOfX399MCtCjK6yADXuLauHC+he3aeGSv\nyS5RG1rnNaEgarUCSeB8YEf1sr3cJB/XvlwkdyYUoDy+WOPF+cB2aTxyVL9cgChgqYXpOT9KxKUf\n4qRP2H2MWAiG6YikpH0OzrewJXuX7UFfPrq0yAzcEYeWaVSvPqPWpeR8C7tebLWskvYrzwiW7bHy\nlUZcBR2gcbr6bG1tVT6f1/PPP29927FoYQNJZbNlGuZN8Xpdfbp+NUJgAw6zedM97G6JoEckuThK\nayoCG3CYzZapSyOuTIT9hWQDfdgxxEiGZLF1X8SlEVcm4tBPTmAnCAHuhjC/cON8UzwOX0ix7hJx\n/QYDALtcn7kb28COww0GICg0Zs4Wxd+LLSe2gV2vGwyc+JiOrckXtrZDY8ZdkQvsXC6nkydP1nwS\n1eOOd5xOfL54kiMOoyWSKlKBPR6AJ06cqDkA6zEQPy4nflS/eMKcFhy1Kck21Wv4nivdDC6J1CiR\ncgFYS9AGfcc77GFCtv4z2H7fEW02R0sQyPUVqcAOOwD9isMwIcm99x21i/PwvTiLVJfIeAB+4hOf\ncGY1O9eHCUmsIoho4/7K/0QqsKUPAvDjH/84oVFncfjiQfxE9f5KWIwCu1gsavv27Vq3bp06Ojp0\n7Ngx23UBQGxu7NtiFNgHDx7UyMiIHnvsMXV2duqOO+6wXVciRfHSr9Kd/kq1xnl0Beov7gtS+WUU\n2JlMRitXrpQkLV26VC+++KLVopJoYGDAmUs/k8tUgjwcUWwE+MH9lbMZjRIZGhpSc3PzxL8bGxs1\nOjqqmTPP3lw2m/W97Xw+r2Kx6Ou1+Xy+7P4qPe53O/XYx+HDh8+69Nu/f79aWlqq2ma1+7D1mv37\n91es1c/7NDw87Lk/k+OwpdK+3377bQ0ODuqRRx7R0qVLfW9rumP22rffxwcGBnT06FGVSiV98Ytf\n1P333z9Rs63zuRrVHLPXvpuamjR//ny1tLTUXJfNTPB6jd8Mq5ZRYDc3N+vMmTMT/y4Wix8Ka0lK\n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\nxP8BNvFVyM5/S5YAAAAASUVORK5CYII=\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": {}, "outputs": [ { "data": { "image/png": "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\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": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/tarrysingh/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:52: DeprecationWarning: Class GaussianProcess is deprecated; GaussianProcess was deprecated in version 0.18 and will be removed in 0.20. Use the GaussianProcessRegressor instead.\n", " warnings.warn(msg, category=DeprecationWarning)\n", "/Users/tarrysingh/anaconda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:70: DeprecationWarning: Function l1_cross_distances is deprecated; l1_cross_distances was deprecated in version 0.18 and will be removed in 0.20.\n", " warnings.warn(msg, category=DeprecationWarning)\n" ] } ], "source": [ "from sklearn.gaussian_process import GaussianProcessRegressor\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": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ng1GIE0JIBvv/Wtnar7bCr2IAAAAASUVORK5CYII=\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.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }