{ "metadata": { "name": "", "signature": "sha256:1f00723963fb3e8beae6d254e134ddef8d27a6d008f3622c9145b96a83de89e2" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import matplotlib.pylab as plt\n", "import mpld3\n", "mpld3.enable_notebook()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Plugin code" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class SliderView(mpld3.plugins.PluginBase):\n", " \"\"\" Add slider and JavaScript / Python interaction. \"\"\"\n", "\n", " JAVASCRIPT = \"\"\"\n", " mpld3.register_plugin(\"sliderview\", SliderViewPlugin);\n", " SliderViewPlugin.prototype = Object.create(mpld3.Plugin.prototype);\n", " SliderViewPlugin.prototype.constructor = SliderViewPlugin;\n", " SliderViewPlugin.prototype.requiredProps = [\"idline\"];\n", " SliderViewPlugin.prototype.defaultProps = {}\n", " function SliderViewPlugin(fig, props){\n", " mpld3.Plugin.call(this, fig, props);\n", " };\n", "\n", " SliderViewPlugin.prototype.draw = function(){\n", " var line = mpld3.get_element(this.props.idline);\n", "\n", " var div = d3.select(\"#\" + this.fig.figid);\n", "\n", " // Create slider\n", " div.append(\"input\").attr(\"type\", \"range\").attr(\"min\", 0).attr(\"max\", 10).attr(\"step\", 0.1)\n", " .on(\"change\", function() {\n", " var command = \"doCalculation(\"+this.value+\")\";\n", " var callbacks = { 'iopub' : {'output' : handle_output}};\n", " var kernel = IPython.notebook.kernel;\n", " kernel.execute(command, callbacks, {silent:false});\n", " });\n", "\n", " function handle_output(out){\n", " console.log(out);\n", " var res = null;\n", " // if output is a print statement\n", " if(out.msg_type == \"stream\"){\n", " res = out.content.data;\n", " }\n", " // if output is a python object\n", " else if(out.msg_type === \"pyout\"){\n", " res = out.content.data[\"text/plain\"];\n", " }\n", " // if output is a python error\n", " else if(out.msg_type == \"pyerr\"){\n", " res = out.content.ename + \": \" + out.content.evalue;\n", " }\n", " // if output is something we haven't thought of\n", " else{\n", " res = \"[out type not implemented]\"; \n", " }\n", "\n", " // Update line data\n", " line.data = JSON.parse(res);\n", " line.elements()\n", " .attr(\"d\", line.datafunc(line.data))\n", " .style(\"stroke\", \"black\");\n", "\n", " }\n", "\n", " };\n", " \"\"\"\n", "\n", " def __init__(self, line):\n", " self.dict_ = {\"type\": \"sliderview\",\n", " \"idline\": mpld3.utils.get_id(line)}\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: this notebooks make interactive calculation when slider position is changed, so you need to download this notebook to see any changes in plot." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def doCalculation(val1):\n", " t = np.linspace(0, 10, 500)\n", " y = np.sin(val1*t)\n", " return map(list, list(zip(list(t), list(y))))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "\n", "fig, ax = plt.subplots(figsize=(8, 4))\n", "\n", "t = np.linspace(0, 10, 500)\n", "y = np.sin(t)\n", "ax.set_xlabel('Time')\n", "ax.set_ylabel('Amplitude')\n", "\n", "# create the line object\n", "line, = ax.plot(t, y, '-w', lw=3, alpha=0.5)\n", "ax.set_ylim(-1, 1)\n", "ax.set_title(\"Slider demo\")\n", "\n", "mpld3.plugins.connect(fig, SliderView(line))" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 10 } ], "metadata": {} } ] }