{ "metadata": { "name": "", "signature": "sha256:5b76069e0e751e9e0117b297530db92683d26f33bad3f8fc2b9ba3e41f085293" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Adding HTML elements to figures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook contains examples how to add HTML elements to figures and create interaction between Javascript and Python code.\n", "\n", "**Note**: this notebook makes 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": [ "%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": 2, "metadata": {}, "source": [ "Simple example: slider plugin" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We add a simple slider HTML element ```` to our figure. When slider position is changed, we call ``kernel.execute()`` and pass updated value to Python function ``runCalculation()``. In this simple example we just update the frequency $\\omega$ of $\\sin(\\omega x)$." ] }, { "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\", \"callback_func\"];\n", " SliderViewPlugin.prototype.defaultProps = {}\n", "\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", " var callback_func = this.props.callback_func;\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).attr(\"value\", 1)\n", " .on(\"change\", function() {\n", " var command = callback_func + \"(\" + this.value + \")\";\n", " console.log(\"running \"+command);\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", " alert(res);\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, callback_func):\n", " self.dict_ = {\"type\": \"sliderview\",\n", " \"idline\": mpld3.utils.get_id(line),\n", " \"callback_func\": callback_func}" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "\n", "def updateSlider(val1):\n", " t = np.linspace(0, 10, 500)\n", " y = np.sin(val1*t)\n", " return map(list, list(zip(list(t), list(y))))\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, '-k', lw=3, alpha=0.5)\n", "ax.set_ylim(-1.2, 1.2)\n", "ax.set_title(\"Slider demo\")\n", "\n", "mpld3.plugins.connect(fig, SliderView(line, callback_func=\"updateSlider\"))" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\ngAAbAAAAAElFTkSuQmCC\n", "text": [ "Force location
\n", " \n", " \n", "Boundary conditions
\n", " \n", "Young's modulus (GPa)
\n", " \n", "Other options
\n", "