{ "metadata": { "name": "", "signature": "sha256:9c0177def85f24a70b579bb05088f8eccb50700b55f738e3c0227de6dfec149f" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Plugins in mpld3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of the most interesting features of mpld3 is the ability to add plugins to your plots. Plugins are objects which define new, interactive functionality for your visualizations. There are several built-in to the mpld3 package, and there is a well-defined API to create your own. We'll briefly walk through these below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll start with the standard set of imports for working with mpld3" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import mpld3\n", "mpld3.enable_notebook()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just to make sure it's working, let's create a simple plot:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.random.seed(0)\n", "plt.plot(np.random.rand(10));" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\nQdL2tkUL6ZpYXS1//9lnMkq/7TZt49Ozbt2YxI0kNFS+v/fvd+91TORkCMHBstnn2DFg8mSgqkrq\niX/5iyR4okBgMjXtoAn+CJBhXHSRtGrdt09qvx07SsMtokDSlDo5EzkZStu2wIoVgNkMzJsXmEe4\nUfPWlBE5JzuJiHTEZpNj+w4ckIEKJzuJiAzGbJYVWXa7669hIici0pGm7PBsNJHn5OQgKioKkZGR\nyMjIuOB13377LYKCgvDxxx+7/nQiImrA3QZaThO5w+HA1KlTkZOTg8LCQmRlZaGoqOi8182cOROj\nRo1iHZyIyEPutrR1mshzc3MRERGBsLAwBAcHIzU1FdnZ2Q2ue/XVVzF+/Hh0797d7YCJiKi+2hG5\nq+Nip4ncbrcjNDS07nOz2Qz7ORV4u92O7Oxs3P//W8+ZuB6MiMgjISGy0c3V07KCnH3RlaT8yCOP\nYO7cuXVLZJyVVtLPaumVlJSEpKQk16IkImomrFYrrFYrOnSQ055c4TSRh4SEwGaz1X1us9lgNpvr\nXfPdd98h9f93LDp8+DBWrVqF4OBgjBkzpsH9zk7kRETUUO0gVynA4QCA2Y2+xmkiT0xMRHFxMUpL\nS9G7d28sX74cWVlZ9a7Zu3dv3Z8nTZqEG2+88bxJnIiIXDd4sLRxdoXTRB4UFITMzEykpKTA4XBg\nypQpiI6OxqJFiwAAaWlpHgdLREQNubNyhVv0iYh06pJLgP/9j1v0iYgMa9Ik167jiJyISMfYNIuI\nqBlgIiciMjgmciIig2MiJyIyOCZyIiKDYyInIjI4JnIiIoNjIiciMjgmciIig2MiJyIyOCZyIiKD\nYyInIjI4JnIiIoNjIiciMjgmciIig2MiJyIyOCZyIiKDYyInIjI4JnIiIoNjIiciMrhGE3lOTg6i\noqIQGRmJjIyMBl/Pzs5GfHw8LBYLBg8ejDVr1vgkUCIiOj+nidzhcGDq1KnIyclBYWEhsrKyUFRU\nVO+a5ORkbN26FQUFBXjnnXdw3333+TRgb7JarVqH0IAeYwL0GRdjcg1jcp1e42qM00Sem5uLiIgI\nhIWFITg4GKmpqcjOzq53Tbt27er+fOLECXTr1s03kfqAHv/R9BgToM+4GJNrGJPr9BpXY5wmcrvd\njtDQ0LrPzWYz7HZ7g+s+/fRTREdH4/rrr8ff//5370dJREQX5DSRm0wml24yduxYFBUVYcWKFbjz\nzju9EhgREblIObFp0yaVkpJS9/mcOXPU3Llznb1E9e3bVx0+fLjB34eHhysA/OAHP/jBDzc+wsPD\nneZcpZQKghOJiYkoLi5GaWkpevfujeXLlyMrK6veNXv27EHfvn1hMpmQn58PAOjatWuDe+3evdvZ\no4iIqImcJvKgoCBkZmYiJSUFDocDU6ZMQXR0NBYtWgQASEtLw0cffYQlS5YgODgY7du3x7Jly/wS\nOBERCZNSSmkdBBERNZ3Pd3Y2tqFIC5MnT0bPnj0xYMAArUOpY7PZMGLECMTGxiIuLk4Xq39Onz6N\noUOHIiEhATExMXjyySe1DqmOw+GAxWLBjTfeqHUodcLCwjBw4EBYLBZcfvnlWocDACgvL8f48eMR\nHR2NmJgYbN68WdN4du3aBYvFUvfRsWNHXXyvv/jii4iNjcWAAQMwceJEnDlzRuuQsGDBAgwYMABx\ncXFYsGCB84sbraJ7oLq6WoWHh6uSkhJVWVmp4uPjVWFhoS8f6ZL169er/Px8FRcXp3UodQ4cOKAK\nCgqUUkr98ssvql+/frr4b3Xy5EmllFJVVVVq6NChasOGDRpHJF555RU1ceJEdeONN2odSp2wsDB1\n5MgRrcOo56677lKLFy9WSsm/YXl5ucYR/crhcKhevXqpffv2aRpHSUmJ6tOnjzp9+rRSSqnbbrtN\nvfPOO5rG9P3336u4uDh16tQpVV1drZKTk9Xu3bsveL1PR+SubCjSwrBhw9C5c2etw6inV69eSEhI\nAAC0b98e0dHR2L9/v8ZRAW3btgUAVFZWwuFwoEuXLhpHBJSVlWHlypX4wx/+AKWzyqCe4jl27Bg2\nbNiAyZMnA5A5r44dO2oc1a9Wr16N8PDwentVtHDxxRcjODgYFRUVqK6uRkVFBUJCQjSNaefOnRg6\ndChat26Nli1bYvjw4fj4448veL1PE7mrG4qovtLSUhQUFGDo0KFah4KamhokJCSgZ8+eGDFiBGJi\nYrQOCdOnT8e8efPQooW+er6ZTCYkJycjMTER//jHP7QOByUlJejevTsmTZqEQYMG4d5770VFRYXW\nYdVZtmwZJk6cqHUY6NKlCx599FFceuml6N27Nzp16oTk5GRNY4qLi8OGDRvw888/o6KiAp9//jnK\nysoueL1PfxJc3VBEvzpx4gTGjx+PBQsWoH379lqHgxYtWmDLli0oKyvD+vXrNd/C/H//93/o0aMH\nLBaLrka/APCf//wHBQUFWLVqFV577TVs2LBB03iqq6uRn5+PBx54APn5+WjXrh3mzp2raUy1Kisr\nsWLFCtx6661ah4I9e/Zg/vz5KC0txf79+3HixAl88MEHmsYUFRWFmTNn4rrrrsP1118Pi8XidODi\n00QeEhICm81W97nNZoPZbPblIw2tqqoK48aNwx133IGxY8dqHU49HTt2xA033IC8vDxN49i4cSM+\n++wz9OnTBxMmTMCaNWtw1113aRpTrUsuuQQA0L17d9x8883Izc3VNB6z2Qyz2YwhQ4YAAMaPH1+3\n10Nrq1atwuDBg9G9e3etQ0FeXh6uuuoqdO3aFUFBQbjllluwceNGrcPC5MmTkZeXh3Xr1qFTp07o\n37//Ba/1aSI/e0NRZWUlli9fjjFjxvjykYallMKUKVMQExODRx55ROtwAACHDx9GeXk5AODUqVP4\n6quvYLFYNI1pzpw5sNlsKCkpwbJly3DNNddgyZIlmsYEABUVFfjll18AACdPnsSXX36p+aqoXr16\nITQ0FD/88AMAqUnHxsZqGlOtrKwsTJgwQeswAMjod/PmzTh16hSUUli9erUuSog//fQTAGDfvn34\n5JNPnJehfD37unLlStWvXz8VHh6u5syZ4+vHuSQ1NVVdcsklqlWrVspsNqu33npL65DUhg0blMlk\nUvHx8SohIUElJCSoVatWaRrTtm3blMViUfHx8WrAgAHqpZde0jSec1mtVt2sWtm7d6+Kj49X8fHx\nKjY2Vjff61u2bFGJiYlq4MCB6uabb9bFqpUTJ06orl27quPHj2sdSp2MjAwVExOj4uLi1F133aUq\nKyu1DkkNGzZMxcTEqPj4eLVmzRqn13JDEBGRwelr2p+IiNzGRE5EZHBM5EREBsdETkRkcEzkREQG\nx0RORGRwTORERAbHRE5EZHD/D7JYZxnQr4VpAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The Purpose of Plugins" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plugins, in a word, are meant to add new browser-based behavior to a matplotlib plot. The mpld3 package enables several plugins by default, namely the ``Reset`` button, the ``Zoom`` button, and the ``BoxZoom`` button. Note that plugins may or may not be accompanied by buttons.\n", "\n", "To see a plot with no plugins attached, we can call the ``plugins.clear`` function and remove all plugins from the figure:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from mpld3 import plugins\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(np.random.random(10))\n", "plugins.clear(fig) # clear all plugins from the figure" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that now the figure, while still rendered in D3, does not have any interactive elements. To recover the default interactive elements, we can add them back explicitly. For example, let's say we prefer to switch the order of the ``Zoom`` and ``BoxZoom`` tools in our toolbar:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from mpld3 import plugins\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(np.random.random(10))\n", "plugins.clear(fig) # clear all plugins from the figure\n", "\n", "plugins.connect(fig, plugins.Reset(), plugins.BoxZoom(), plugins.Zoom())" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the three buttons are now in a different order than they are by default; we've customized our toolbar using the built-in plugin tools." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Beyond the Default Plugins" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are many other plugins you can use which are built-in to mpld3, and the list is growing. For example, here's a plugin that allows tooltips (i.e. information which appears when you hover your mouse over points):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = plt.subplots()\n", "points = ax.scatter(np.random.rand(40), np.random.rand(40),\n", " s=300, alpha=0.3)\n", "\n", "labels = [\"Point {0}\".format(i) for i in range(40)]\n", "tooltip = plugins.PointLabelTooltip(points, labels)\n", "\n", "plugins.connect(fig, tooltip)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other available plugins can be viewed in the [example gallery](http://mpld3.github.io/examples/index.html) and in other parts of the [mpld3 documentation](http://mpld3.github.io)." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Paving Your Own Way..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While the built-in plugins are useful, one of the nicest features of mpld3 is the ability to define your own custom behaviors. This requires a bit of familiarity with both Python and Javascript, as well as some level of knowledge of the javascript side of the mpld3 implementation. Here we'll walk through the process of creating a some plugins to do various simple tasks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's do a silly plugin which writes \"hello world\" on the figure:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class HelloWorld(plugins.PluginBase): # inherit from PluginBase\n", " \"\"\"Hello World plugin\"\"\"\n", " \n", " JAVASCRIPT = \"\"\"\n", " mpld3.register_plugin(\"helloworld\", HelloWorld);\n", " HelloWorld.prototype = Object.create(mpld3.Plugin.prototype);\n", " HelloWorld.prototype.constructor = HelloWorld;\n", " function HelloWorld(fig, props){\n", " mpld3.Plugin.call(this, fig, props);\n", " };\n", " \n", " HelloWorld.prototype.draw = function(){\n", " this.fig.canvas.append(\"text\")\n", " .text(\"hello world\")\n", " .style(\"font-size\", 72)\n", " .style(\"opacity\", 0.3)\n", " .style(\"text-anchor\", \"middle\")\n", " .attr(\"x\", this.fig.width / 2)\n", " .attr(\"y\", this.fig.height / 2)\n", " }\n", " \"\"\"\n", " def __init__(self):\n", " self.dict_ = {\"type\": \"helloworld\"}\n", " \n", "fig, ax = plt.subplots()\n", "plugins.connect(fig, HelloWorld())" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\nvHnz8LvSsrKyZmLUaZfKXixevFiDg4OSpMHBQS1atEhud9KXCd9ba9eu1YIFC976+GS6mda486Gn\nEansxb8dOXJEGzduzMRoGZfq70V7e/vwX19h8W2zqexDd3e3njx5ovXr16usrEwnTpzI9JgZkcpe\n1NXV6e7du8rJyVFJSYm+/vrrTI/5zphMN9P6v0E+9DRiIv9Nly5d0tGjR3XlypVpnGjmpLIXu3bt\n0oEDB+RyueQ4zpjfEQtS2YehoSHdvHlTFy9e1LNnz7R69WqtWrVKwWAwAxNmTip7sX//fpWWlioa\njaqnp0cbNmzQ7du3NXfu3AxM+O6ZaDfTGvd0fujpfZfKXkjSnTt3VFdXp0gkkvSPZe+zVPbixo0b\nqq6ulvTPC2nnzp2Tx+NRVVVVRmedTqnsg9/vV1ZWlmbPnq3Zs2dr3bp1un37trm4p7IXV69e1Z49\neyT980GeJUuW6MGDByorK8vorO+CSXUzba8IOI4zNDTkLF261Hn06JHz/PnzcV9QvXbtmtkXEVPZ\ni19//dXJy8tzrl27NkNTZkYqe/Fvn332mfPDDz9kcMLMSGUf7t+/73z00UfOy5cvnb///tspKipy\n7t69O0MTT59U9uLzzz93GhsbHcdxnN9//93xer3On3/+ORPjZsSjR49SekE11W6m9c6dDz2NSGUv\n9u3bp6dPnw4/z+zxeNTV1TWTY0+LVPbivyCVfSgoKFBlZaWKi4s1a9Ys1dXVqbCwcIYnT79U9mL3\n7t2qqalRSUmJXr16pYMHD2rhwoUzPPn02Lp1qy5fvqz+/n75/X41NTVpaGhI0uS7yYeYAMAg/pk9\nADCIuAOAQcQdAAwi7gBgEHEHAIOIOwAYRNwBwCDiDgAG/R9h/b4XlfACjQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It worked! Notice here that the \"hello world\" text *did not come from Python*, but from the javascript code defined in the plugin. The code in the ``JAVASCRIPT`` class variable is injected into the javascript which defines the figure, which we can see by calling ``fig_to_html` explicitly. If you were to copy this code into an html file and open it with your browser, it would show the above figure." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(mpld3.fig_to_html(fig, template_type=\"simple\"))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n", "\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There, right in the middle of our script, is our ``HelloWorld`` plugin definition!\n", "\n", "Note also that in the JSON definition at the bottom of the output, we see the following piece: ``\"plugins\": [..., {\"type\": \"helloworld\"}]``. This is what actually tells the ``draw_figure`` command that we want to connect the ``HelloWorld`` plugin to the figure." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "What's happening in ``HelloWorld``" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at the ``HelloWorld`` javascript code. First we have this piece:\n", "``` javascript \n", "mpld3.register_plugin(\"helloworld\", HelloWorld);\n", "```\n", "This is the first piece of code you should have for every plugin. The function ``register_plugin(key, object)`` associates a ``key`` with a given plugin object, so that this key can be referenced in the figure JSON, as we saw above with the ``\"helloworld\"`` key.\n", "\n", "``` javascript\n", "HelloWorld.prototype = Object.create(mpld3.Plugin.prototype);\n", "HelloWorld.prototype.constructor = HelloWorld;\n", "function HelloWorld(fig, props){\n", " mpld3.Plugin.call(this, fig, props);\n", "};\n", "```\n", "\n", "This piece might looks complicated, but to an experienced javascript programmer it's easily recognized as an object definition. Javascript is built on *prototypical inheritance*, which is a different approach than the class-based inheritance that you may be familiar with in Python. What these lines do is to create a ``HelloWorld`` type which inherits from ``mpld3.Plugin``, and is initialized by the specified function.\n", "\n", "``` javascript\n", "HelloWorld.prototype.draw = function(){\n", " this.fig.canvas.append(\"text\")\n", " .text(\"hello world\")\n", " .style(\"font-size\", 72)\n", " .style(\"opacity\", 0.3)\n", " .style(\"text-anchor\", \"middle\")\n", " .attr(\"x\", this.fig.width / 2)\n", " .attr(\"y\", this.fig.height / 2)\n", "}\n", "```\n", "\n", "This is the meat of the plugin: when the figure is drawn to the web page, the ``draw`` method of the plugin is called. Anyone familiar with ``d3`` should recognize exactly what's happening here. ``this.fig`` references the figure object associated with the plugin instance, and the figure object holds a ``d3`` selection named ``canvas``. The canvas is the root element within the SVG created by ``mpld3.draw_figure``.\n", "\n", "We use standard d3 syntax to add an SVG text element to the canvas, and then adjust the content, position, and style to be what we want." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we can take a look at the Python side of things, snipping out the javascript for the time being:\n", "``` python\n", "class HelloWorld(plugins.PluginBase):\n", " JAVASCRIPT = \"\"\" \"\"\"\n", " def __init__(self):\n", " self.dict_ = {\"type\": \"helloworld\"}\n", "```\n", "The ``__init__`` function simply defines a class member ``dict_``, which is a JSON serializable dictionary that is used to pass options from Python to javascript. When the plugin is connected to a figure, a JSON representation of ``dict_`` will be put in the ``\"plugins\"`` list, as we saw in the printout above. Every plugin should have a ``\"type\"`` element in the ``dict_``, which should match the key used in ``mpld3.register_plugin`` on the javascript side.\n", "\n", "That's all there is to it!" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "A More Interesting Example: Point Information" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above example may seem like an incredibly complicated way to add some text to the plot, and it is. The real power of plugins, though, comes from the ability to use d3 to poke around in the Document Object Model (DOM) and modify the elements based on user input.\n", "\n", "Here we'll do a more interesting plugin: we'll make it so that clicking on points brings up an alert box with information about the point." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from mpld3 import utils\n", "\n", "class ClickInfo(plugins.PluginBase):\n", " \"\"\"Plugin for getting info on click\"\"\"\n", " \n", " JAVASCRIPT = \"\"\"\n", " mpld3.register_plugin(\"clickinfo\", ClickInfo);\n", " ClickInfo.prototype = Object.create(mpld3.Plugin.prototype);\n", " ClickInfo.prototype.constructor = ClickInfo;\n", " ClickInfo.prototype.requiredProps = [\"id\"];\n", " function ClickInfo(fig, props){\n", " mpld3.Plugin.call(this, fig, props);\n", " };\n", " \n", " ClickInfo.prototype.draw = function(){\n", " var obj = mpld3.get_element(this.props.id);\n", " obj.elements().on(\"mousedown\",\n", " function(d, i){alert(\"clicked on points[\" + i + \"]\");});\n", " }\n", " \"\"\"\n", " def __init__(self, points):\n", " self.dict_ = {\"type\": \"clickinfo\",\n", " \"id\": utils.get_id(points)}\n", " \n", "fig, ax = plt.subplots()\n", "points = ax.scatter(np.random.rand(50), np.random.rand(50),\n", " s=500, alpha=0.3)\n", "\n", "plugins.connect(fig, ClickInfo(points))" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you click on any of the above points, you should see a browser alert box which tells you which point you clicked on!\n", "\n", "There are just a couple extra pieces here beyond what we saw in the previous example. On the javascript side, we have this addition to the class prototype definition:\n", "``` javascript\n", "ClickInfo.prototype.requiredProps = [\"id\"];\n", "```\n", "This tells us that the plugin expects to be passed a property named ``\"id\"``, which in this case points to the plot elements that are the subject of the interaction. This id is generated by the python script, and we can find it using the ``utils.get_id`` utility:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "utils.get_id(points)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "'el92644400590224'" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This output is passed to the ``dict_`` attribute in Python, which is in turn passed to the ``props`` attribute in Javascript. Because the same ``get_id`` utility is used to find the id when the points are first drawn, we can use this id to locate the correct plot elements. Finally, we do some typical ``d3`` gymnastics and write the following:\n", "``` javascript\n", "var obj = mpld3.get_element(this.props.id);\n", "obj.elements().on(\"mousedown\",\n", " function(d, i){alert(\"clicked on points[\" + i + \"]\");});\n", "```\n", "The ``mpld3.get_element`` function in javascript essentially does the opposite of the ``utils.get_id`` function in Python: it maps from the id to the Javascript object containing the points. Once the elements of this plot object are accessed, all it takes is a simple ``on(\"mousedown\", ...)`` command to add the desired behavior." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've just scraped the surface of what you can do with mpld3 plugins, but hopefully the above discussion is enough to get you started in defining your own interactive behaviors. With a familiarity with D3, the possibilities really are endless. For ideas, you can check out some of the plugins built-in to the mpld3 library (they're defined just like this, except much of the javascript is bundled with the main mpld3 source!). There are also some interesting examples in the [mpld3 gallery](http://mpld3.github.io/examples/index.html). If you come up with something you'd like to share, feel free to submit it as a pull request to the main mpld3 gallery: we'd love to see it!" ] } ], "metadata": {} } ] }