{ "metadata": { "name": "", "signature": "sha256:fe7554cf79d7b66c4bb1e5b2a7b41b9846a3672b603574ffd0e1b195ea088e19" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "IPython Notebooks With Interactive Matplotlib plots.\n", "===\n", "To get a virtualenv set up with the appropriate packages I needed to:\n", "```\n", "$ mkvirtualenv blogpost_ipython\n", "$ pip install -U distribute\n", "$ pip install matplotlib\n", "$ pip install ipython\n", "$ pip install pyzmq\n", "$ pip install jinja2\n", "```\n", "Now my pip freeze looks like this:\n", "```\n", "$ pip freeze\n", "Jinja2==2.7.3\n", "MarkupSafe==0.23\n", "argparse==1.2.1\n", "backports.ssl-match-hostname==3.4.0.2\n", "distribute==0.7.3\n", "ipython==2.1.0\n", "matplotlib==1.3.1\n", "nose==1.3.3\n", "numpy==1.8.1\n", "pyparsing==2.0.2\n", "python-dateutil==2.2\n", "pyzmq==14.3.1\n", "six==1.7.2\n", "tornado==3.2.2\n", "wsgiref==0.1.2\n", "``` \n", "\n", "Then make a directory for this work and start the notebook server:\n", "```\n", "$ mkdir blogpost_ipython\n", "$ cd blogpost_ipython\n", "\n", "$ ipython notebook\n", "``` \n", "and I get a message that says (among other things)\n", "\n", "> 2014-06-17 09:04:15.816 [NotebookApp] The IPython Notebook is running at: http://localhost:8888/\n", " \n", "and a tab in chrome opens. The page has a button 'New Notebook'. Clicking that gets you a notebook that you can add new cells to. When you add Python code to the cell and press the play button in the toolbar (or press Shift+Enter) the code is executed. When opening a notebook for the first time, don't forget to execute all the cells so that for example the imports are performed.\n", "\n", "Now we're up and running we can get to the good stuff. First some cells to do our imports:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.html.widgets import interact" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the magic. We want to pass as arguments to ```interact``` a function that draws a plot, and a description of the arguments that the plot drawing function takes. First define the plot drawing function (this is just straight ```matplotlib.pyplot```):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def plot_sine(n):\n", " x = np.arange(0, 20, 0.1);\n", " y = np.sin(x/n)\n", " plt.plot(x, y)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now call ```interact``` like so, and you should see a plot in the notebook that has a widget allowing you to vary the value of ```n```. Note however that the interactive part only works if you're running the notebook server, and you have executed the code cells. Otherwise you will just see a picture of the plot." ] }, { "cell_type": "code", "collapsed": false, "input": [ "interact(plot_sine, n=(1,10, 0.1))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n3xZSi4MezFsAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And I think that's amazingly cool!" ] } ], "metadata": {} } ] }