{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%load_ext load_style\n", "%load_style talk.css" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Interactive visualisations in the browser with Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the past few years, the python (scientific) ecosystem has seen intense development of solutions aimed at bringing interactive data visualisation in the browser, through a set of libraries which basically interface with powerful JavaScript visualisations libraries such as `D3.js`, `leaflet.js` etc. \n", "\n", "In this demo we will see: \n", "\n", "+ [MPLd3](http://mpld3.github.io/)\n", "+ [bokeh](http://bokeh.pydata.org/)\n", "+ [folium](https://github.com/wrobstory/folium)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import warnings" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "warnings.filterwarnings('ignore', category=DeprecationWarning)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import os, sys\n", "import pandas as pd\n", "import numpy as np\n", "from numpy import ma\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## MPLD3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[MPLd3](http://mpld3.github.io/) is developed by [Jake VanderPlas](http://www.astro.washington.edu/users/vanderplas/) \n", "\n", "MPLD3 provides a simple API for exporting [matplotlib](http://matplotlib.org) graphics to HTML code which can be used within the browser, within standard web pages, blogs, or tools such as the IPython notebook." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import mpld3\n", "from mpld3 import plugins\n", "mpld3.enable_notebook()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "xdf = pd.DataFrame(np.random.normal(size=(100)), columns=['A'])" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, ax= plt.subplots(figsize=(8,4)); \n", "ax.plot(xdf.index, xdf['A'], lw=2, color='b');\n", "ax.set_xlim(40,80)\n", "ax.grid(color='0.8')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### you can connect ```plugins``` to the figure" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "f, ax= plt.subplots(figsize=(8,4)); \n", "plt.plot(xdf.index, xdf['A'], lw=2, color='b');\n", "ax.set_xlim(40,80)\n", "ax.grid(color='0.8')\n", "plugins.connect(f, plugins.MousePosition(fontsize=16))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "mpld3.save_html(f, './mpld3_figure.html')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ [open in a new tab](./mpld3_figure.html)\n", "\n", "+ [some more examples](http://mpld3.github.io/examples/index.html) from the mpld3 gallery\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## BOKEH" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[bokeh](http://bokeh.pydata.org/) is a library developed by [continuum analytics](http://continuum.io) \n", "\n", "from their website:\n", "\n", "*Bokeh is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, but also deliver this capability with high-performance interactivity over very large or streaming datasets. Bokeh can help anyone who would like to quickly and easily create interactive plots, dashboards, and data applications.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To know more about bokeh: \n", " \n", "[http://bokeh.pydata.org/](http://bokeh.pydata.org/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "if you use the [anaconda python distribution](), all the bokeh examples are saved in \n", "\n", " ${anaconda}/Examples/bokeh " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "prepare the data: simple sine" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = np.linspace(0, 10, 1000)\n", "y = np.sin(x)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from bokeh.plotting import figure, output_file, output_notebook, show" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(global) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " if (typeof (window._bokeh_onload_callbacks) === \"undefined\") {\n", " window._bokeh_onload_callbacks = [];\n", " }\n", "\n", " function run_callbacks() {\n", " window._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n", " delete window._bokeh_onload_callbacks\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " window._bokeh_onload_callbacks.push(callback);\n", " if (window._bokeh_is_loading > 0) {\n", " console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " window._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " window._bokeh_is_loading--;\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };\n", "\n", " var js_urls = ['https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.js', 'https://cdn.pydata.org/bokeh/release/bokeh-compiler-0.11.1.min.js'];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " Bokeh.$(\"#63153236-ed3a-4a2e-930a-d1925c30f5d8\").text(\"BokehJS successfully loaded\");\n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.11.1.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.11.1.min.css\");\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i](window.Bokeh);\n", " }\n", " }\n", "\n", " if (window._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(this));" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "output_notebook()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

<Bokeh Notebook handle for In[20]>

" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create a new plot with a title and axis labels\n", "p = figure(title=\"simple line example\", x_axis_label='x', y_axis_label='y')\n", "\n", "# add a line renderer with legend and line thickness\n", "p.line(x, y, legend=\"sin(x)\", line_width=2)\n", "\n", "# show the results\n", "show(p)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "!open sin.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or you can output to an HTML file\n", "\n", "**specify mode = \"cdn\" so it loads the javascript from the bokeh Content Delivery Network instead of \n", "the local copy**" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

<Bokeh Notebook handle for In[22]>

" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output_file(\"sin.html\", title=\"sin(x)\", mode=\"cdn\")\n", "\n", "# create a new plot with a title and axis labels\n", "p = figure(title=\"simple line example\", x_axis_label='x', y_axis_label='y')\n", "\n", "# add a line renderer with legend and line thickness\n", "p.line(x, y, legend=\"sin(x)\", line_width=2)\n", "\n", "# show the results\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can control the toolbar: here I want pan, box_zoom, rest, but not save etc " ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "
\n", "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

<Bokeh Notebook handle for In[23]>

" ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0])\n", "y0 = x**2\n", "y1 = 10**x\n", "y2 = 10**(x**2)\n", "\n", "# output to static HTML file\n", "output_file(\"log_lines.html\")\n", "\n", "# create a new plot\n", "p = figure(\n", " tools=\"pan,box_zoom,reset\",\n", " y_axis_type=\"log\", y_range=[0.001, 10**11], title=\"log axis example\",\n", " x_axis_label='sections', y_axis_label='particles'\n", ")\n", "\n", "# add some renderers\n", "p.line(x, x, legend=\"y=x\")\n", "p.circle(x, x, legend=\"y=x\", fill_color=\"white\", size=8)\n", "p.line(x, y0, legend=\"y=x^2\", line_width=3)\n", "p.line(x, y1, legend=\"y=10^x\", line_color=\"red\")\n", "p.circle(x, y1, legend=\"y=10^x\", fill_color=\"red\", line_color=\"red\", size=6)\n", "p.line(x, y2, legend=\"y=10^x^2\", line_color=\"orange\", line_dash=\"4 4\")\n", "\n", "# show the results\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## FOLIUM" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[folium](https://github.com/wrobstory/folium) has been also been developed by [Rob Story](http://wrobstory.github.io/) to provide an interface to the [leaflet.js](http://leafletjs.com/) JavaScript mapping library" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "an example of what it can do is available at: \n", " \n", "[https://rawgit.com/nicolasfauchereau/PLUVAR/master/www/index.html](https://rawgit.com/nicolasfauchereau/PLUVAR/master/www/index.html)" ] }, { "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.5.1" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 } }, "nbformat": 4, "nbformat_minor": 0 }