{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Sebastian Raschka](http://www.sebastianraschka.com)\n", "\n", "[back](https://github.com/rasbt/matplotlib-gallery) to the `matplotlib-gallery` at [https://github.com/rasbt/matplotlib-gallery](https://github.com/rasbt/matplotlib-gallery)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%load_ext watermark" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Last updated: 07/30/2015 \n", "\n", "CPython 3.4.3\n", "IPython 3.2.0\n", "\n", "matplotlib 1.4.3\n", "numpy 1.9.2\n" ] } ], "source": [ "%watermark -u -v -d -p matplotlib,numpy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[More info](http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/ipython_magic/watermark.ipynb) about the `%watermark` extension" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Matplotlib Tips and Tricks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sections" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [When to use the figure object](#When-to-use-the-figure-object)\n", "- [Fitting the margins](#fitting-the-margins)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# When to use the figure object" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "[[back to top](#Sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Often, we see code that explicitely instantiates a new `figure` object:" ] }, { "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": [ "import matplotlib.pyplot as plt\n", "\n", "fig = plt.figure()\n", "\n", "plt.plot([0, 1], [0, 1])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we are not planning to manipulate the figure object or add subplots to the figure, this may be redundant. Why? \n", "As nicely explained on [SO](http://stackoverflow.com/questions/31729220/when-is-matplotlibs-pyplot-figure-redundant/31730499#31730499), the `plot` function retrieves the current figure automatically via `gcf` (\"get current figure\") nested inside a `gca` (\"get current axes\") call. Thus, it really doesn't matter if we create a figure prior to `plot` unless we are planning to modify it in some way." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.plot([0, 1], [0, 1])\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "# Fitting the margins" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "[[back to top](#Sections)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although a plot appears perfectly fine inline in a IPython notebook, sometimes we may notice that certain figure elements went missing if we save it to an image file via `savefig`. The `tight_layout()` function often helps to produce a \"tighter\" appearence of the plot, it is not sufficient if to fit our graph nicely into the figure boundaries if we plot outside it's margins. Consider the following example:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](../images/tricks/bbox.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Typically, this issue can be easily resolved by setting the `bbox_inches` attribute to `'tight'` inside `savefig`. You can find the complete code example for producing the plot below:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "%matplotlib inline\n", "\n", "def gini(p):\n", " return (p)*(1 - (p)) + (1-p)*(1 - (1-p))\n", "\n", "def entropy(p):\n", " return - p*np.log2(p) - (1 - p)*np.log2((1 - p))\n", "\n", "def error(p):\n", " return 1 - np.max([p, 1 - p])\n", "\n", "x = np.arange(0.0, 1.0, 0.01)\n", "\n", "ent = [entropy(p) if p != 0 else None for p in x]\n", "sc_ent = [e*0.5 if e else None for e in ent]\n", "err = [error(i) for i in x]\n", "\n", "\n", "fig = plt.figure()\n", "ax = plt.subplot(111)\n", "for i, lab, ls, c, in zip([ent, sc_ent, gini(x), err], \n", " ['Entropy', 'Entropy (scaled)', \n", " 'Gini Impurity', 'Misclassification Error'],\n", " ['-', '-', '--', '-.'],\n", " ['black', 'lightgray', 'red', 'green', 'cyan']):\n", " line = ax.plot(x, i, label=lab, linestyle=ls, lw=2, color=c)\n", "\n", "\n", "\n", "ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.15),\n", " ncol=3, fancybox=True, shadow=False)\n", "\n", "ax.axhline(y=0.5, linewidth=1, color='k', linestyle='--')\n", "ax.axhline(y=1.0, linewidth=1, color='k', linestyle='--')\n", "plt.ylim([0, 1.1])\n", "plt.xlabel('p(i=1)')\n", "plt.ylabel('Impurity Index')\n", "plt.tight_layout()\n", "\n", "# uncomment the following line to save the image to disk\n", "# plt.savefig('./impurity.png', dpi=300, bbox_inches='tight')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "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 }