From 42b7598aa54ebf56c62aab88003522994fd39bd6 Mon Sep 17 00:00:00 2001
From: Harry Rossides <rossides.ac@gmail.com>
Date: Mon, 5 Apr 2021 11:22:31 +0100
Subject: [PATCH] Updated manuscript stage

---
 ...fractive index calculator-checkpoint.ipynb | 4488 +++++++++++++++++
 Refractive index calculator.ipynb             |   14 +-
 2 files changed, 4495 insertions(+), 7 deletions(-)
 create mode 100644 .ipynb_checkpoints/Refractive index calculator-checkpoint.ipynb

diff --git a/.ipynb_checkpoints/Refractive index calculator-checkpoint.ipynb b/.ipynb_checkpoints/Refractive index calculator-checkpoint.ipynb
new file mode 100644
index 0000000..fbdcc98
--- /dev/null
+++ b/.ipynb_checkpoints/Refractive index calculator-checkpoint.ipynb	
@@ -0,0 +1,4488 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {
+    "toc": true
+   },
+   "source": [
+    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Introduction\" data-toc-modified-id=\"Introduction-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Introduction</a></span></li><li><span><a href=\"#A-word-of-theory\" data-toc-modified-id=\"A-word-of-theory-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>A word of theory</a></span></li><li><span><a href=\"#Function-definitions\" data-toc-modified-id=\"Function-definitions-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Function definitions</a></span></li><li><span><a href=\"#Examples\" data-toc-modified-id=\"Examples-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Examples</a></span></li><li><span><a href=\"#Your-own-code\" data-toc-modified-id=\"Your-own-code-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>Your own code</a></span></li></ul></div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Introduction\n",
+    "\n",
+    "This notebook visualises the complex refractive index of arbitrary materials for the energy range from 30eV to 30keV.\n",
+    "It retrieves the data from the Center for X-Ray Optics (CXRO) tabulated values database http://henke.lbl.gov/optical_constants/getdb2.html and plots it in one of the following forms:\n",
+    "\n",
+    "a. Single material:\n",
+    "- Typical delta and beta plot\n",
+    "- Delta/beta ratio plot\n",
+    "\n",
+    "b. Two materials:\n",
+    "- Typical delta and beta plot for the differences (delta1-delta2) and (beta1-beta2)\n",
+    "- Differential delta/beta ratio plot for (delta1-delta2)/(beta1-beta2)\n",
+    "\n",
+    "Each of the material is associated with a material density.\n",
+    "Functionality is also provided to interactively control the material density for each of the materials using a slider bar."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# A word of theory"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The complex refractive index is defined as:\n",
+    "\n",
+    "$n = 1-\\delta + i\\beta$\n",
+    "\n",
+    "Where $\\delta$ (delta) is called the real part decrement and it relates to X-ray phase shift when X-rays pass through a material of refractive index $n$.\n",
+    "\n",
+    "and\n",
+    "\n",
+    "$\\beta$ (beta) is the imaginary part, which relates to X-ray absorption.\n",
+    "\n",
+    "--\n",
+    "\n",
+    "Absorption edges, which are peaks of $\\beta$ at certain energies (or to be precise peaks of the linear attenuation coefficient $\\mu=\\frac{2\\pi}{\\lambda}\\int_{}^{}\\beta dz$), can be used to provide image contrast when a material of a certain refractive index $n$ is being imaged through X-rays. \n",
+    "\n",
+    "For low-absorbing materials, the the imaginary part $\\beta$ may be too small to provide enough image contrast, especially for higher energies, since it drops roughly with the fourth power of the X-ray photon energy [1]. In such cases, the real part decrement $\\delta$, which drops roughly with the square of the energy, can be used to provide phase-contrast.\n",
+    "\n",
+    "When phase-contrast imaging is employed, a 3D map of the linear attenuation coefficient $\\mu$, and thus the internal structure of the object being imaged can be retrieved via phase retrieval algorithms, where the ratio $\\frac{\\delta}{\\beta}$ at the used X-ray photon energy becomes relevant [2].\n",
+    "\n",
+    "\n",
+    "The typical delta & beta plots drawn in this notebook can thus be used to investigate the energy range where a material of a certain chemical composition and density has a high enough beta or even an absorption edge to be imaged via absorption-based X-ray imaging techniques.\n",
+    "\n",
+    "The differential delta/beta ratio plot for (delta1-delta2)/(beta1-beta2)  drawn in this notebook can be used to derrive the relevant value at the used X-ray energy to retrieve the phase drom datasets imaged via X-ray phase-contrast imaging. \n",
+    "\n",
+    "--\n",
+    "\n",
+    "When imaging a material of refractive index $n_1$ embedded within another material of refractive index $n_2$, the differences of the real part decrements and imaginary parts become relevant, especially for phase-contrast imaging [3].\n",
+    "\n",
+    "The typical delta & beta plots drawn in this notebook for the differences (delta1-delta2) and (beta1-beta2) can thus be used to determine the chemical composition of the supporting material (material with refractive index $n_2$) in which the material of interest ($n_1$) is embedded so that enough absorption contrast is achieved.\n",
+    "\n",
+    "The delat/beta ratio plots drawn in this notebook can be used to derrive the relevant value at the used X-ray energy to retrieve the phase drom datasets imaged via X-ray phase-contrast imaging. \n",
+    "\n",
+    "\n",
+    "For a comprehensive review and tutorial on inline/propagation based phase-contrast imaging in synchrotron and laboratory sources, please refer to [4].\n",
+    "\n",
+    "--\n",
+    "\n",
+    "[1]\tP. Willmott, An Introduction to Synchrotron Radiation: Techniques and Applications: John Wiley & Sons, Ltd, 2011.\n",
+    "\n",
+    "[2]\tD. Paganin, S. C. Mayo, T. E. Gureyev et al., “Simultaneous phase and amplitude extraction from a single defocused image of a homogeneous object”, Journal of Microscopy, vol. 206, pp. 33-40, 2002.\n",
+    "\n",
+    "[3]\tM. A. Beltran, D. M. Paganin, K. Uesugi et al., “2D and 3D X-ray phase retrieval of multi-material objects using a single defocus distance”, Optics Express, vol. 18, pp. 6423-6436, 2010.\n",
+    "\n",
+    "[4]  C. Rossides, S. Pender, and P. Schneider. “Phase-contrast imaging in practice: Protocol design flowchart for X-ray propagation-based phase-contrast imaging”. Submitted (2021)."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Function definitions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Author: Charalambos Rossides\n",
+    "# https://www.linkedin.com/in/charalambos-rossides-31b808124/ \n",
+    "# muVIS X-ray imaging centre\n",
+    "# University of Southampton, Southampton, UK\n",
+    "\n",
+    "# Make the plots interactive\n",
+    "%matplotlib notebook\n",
+    "# Import necessary libraries\n",
+    "import requests\n",
+    "import re\n",
+    "import pandas as pd\n",
+    "import seaborn as sns\n",
+    "import matplotlib.pyplot as plt\n",
+    "from io import StringIO\n",
+    "from matplotlib import ticker\n",
+    "from ipywidgets import interact"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def to_sub(s):\n",
+    "    '''\n",
+    "    Turns all numerals in a string s to subscript.\n",
+    "    '''\n",
+    "    subs = {u'0': u'\\u2080',\n",
+    "            u'1': u'\\u2081',\n",
+    "            u'2': u'\\u2082',\n",
+    "            u'3': u'\\u2083',\n",
+    "            u'4': u'\\u2084',\n",
+    "            u'5': u'\\u2085',\n",
+    "            u'6': u'\\u2086',\n",
+    "            u'7': u'\\u2087',\n",
+    "            u'8': u'\\u2088',\n",
+    "            u'9': u'\\u2089'}\n",
+    "    return ''.join(subs.get(char, char) if char in subs.keys() else char for char in s)\n",
+    "\n",
+    "def sweep_density(density=(0.01, 1), formula='C12H60O25N5', func=None):\n",
+    "    '''\n",
+    "    Creates a scroll-bar starting in the provided density range:\n",
+    "    Density = (minDensity, maxDensity, step) where step is optional.\n",
+    "    Runs the function func for the Density selected in the scroll bar and the provided formula.\n",
+    "    '''\n",
+    "    def view_image(Density):\n",
+    "        func(formula=formula, density=Density)\n",
+    "    interact(view_image, Density=density, continuous_update=False)\n",
+    "\n",
+    "def sweep_densities(density1=(0.01, 2), density2=(0.01, 2), formula1='C12H60O25N5', formula2='C21H27NO3', func=None):\n",
+    "    '''\n",
+    "    Creates two scroll-bars starting in the provided density range for density1 and density2:\n",
+    "    Density = (minDensity, maxDensity, step) where step is optional.\n",
+    "    Runs the function func for the Density1 and Density2 selected in the scroll bars and the provided formulas.\n",
+    "    '''\n",
+    "    def view_image(Density1, Density2):\n",
+    "        func(formula1, Density1, formula2, Density2)\n",
+    "    interact(view_image, Density1=density1, Density2=density2, continuous_update=False)\n",
+    "\n",
+    "def get_csv(formula='C12H60O25N5', density=-1):\n",
+    "    '''\n",
+    "    Calls https://henke.lbl.gov/optical_constants/getdb2.html and retrieves the refactive\n",
+    "    index in the energy range of 30eV to 30keV in a csv file.\n",
+    "    formula corresponds to the chemical composition and it is a case-sensitive string.\n",
+    "    'C12H60O25N5': Soft tissue\n",
+    "    'C21H27NO3': Paraffin wax    \n",
+    "    density is in grams per cubic centi-metre. The default value of -1 retrieves tabulated values. \n",
+    "    '''\n",
+    "\n",
+    "    root_url = 'https://henke.lbl.gov/'\n",
+    "    url = root_url + '/cgi-bin/getdb.pl'\n",
+    "    bounds = (30, 30000)\n",
+    "    Npts = 500\n",
+    "    Output = 'Text File'\n",
+    "    response = requests.post(url, data=dict(Formula=formula, Density=density, Min=bounds[0], Max=bounds[1], \n",
+    "                                            Output=Output, Npts=Npts))\n",
+    "    filename = re.findall(r'(/tmp/.*?.dat)', response.text)[0]\n",
+    "    csv = requests.get(root_url + filename).text\n",
+    "    return csv\n",
+    "\n",
+    "def get_pd(formula, density):\n",
+    "    '''\n",
+    "    Calls get_csv to retrieve the refractive index for the given formula, density.\n",
+    "    Tidies-up the data and returns it in a Pandas dataframe.\n",
+    "    '''\n",
+    "\n",
+    "    # Retrieve the data\n",
+    "    csv = get_csv(formula, density)\n",
+    "    output = StringIO()\n",
+    "    output.write(csv)\n",
+    "    output.seek(0)\n",
+    "\n",
+    "    # Read the retrieved formula and density\n",
+    "    header = output.readline()\n",
+    "    formula, density = re.findall(r\"(\\s*.*)\\s+Density=(.*)\\s*\", header)[0]\n",
+    "    output.seek(0)\n",
+    "\n",
+    "    # Put the result in a Pandas dataframe\n",
+    "    df = pd.read_csv(output, skiprows=[0], header=[0], sep=' ', skipinitialspace=True)\n",
+    "    df['Density [g/cm3]'] = float(density)\n",
+    "    df['Formula'] = formula\n",
+    "    df.rename(columns={'Energy(eV),':'Energy(eV)', 'Delta,':'Delta', 'Beta':'Beta'}, inplace=True)\n",
+    "    # Transform from eV to keV\n",
+    "    df['Energy(eV)'] = df['Energy(eV)']/1000.0\n",
+    "    df.rename(columns={'Energy(eV)':'Energy [keV]'}, inplace=True)\n",
+    "    # Compute delta/beta ratio\n",
+    "    df['DeltaBetaRatio'] = df['Delta']/df['Beta']\n",
+    "    return df\n",
+    "\n",
+    "def plot_delta_beta(formula='C12H60O25N5', density=-1, dpi=100):\n",
+    "    '''\n",
+    "    Retrieves the refractive index for formula, density and plots delta and beta\n",
+    "    separately in a plot with logarithmic y axis.\n",
+    "    dpi controls the size of the plot.\n",
+    "    '''\n",
+    "\n",
+    "    # Retrieve the data\n",
+    "    df = get_pd(formula, density)\n",
+    "    formula = to_sub(df['Formula'].iloc[0]) # Format the output for plotting\n",
+    "    density = df['Density [g/cm3]'].iloc[0] # Read the returned density\n",
+    "\n",
+    "    # Create the plot\n",
+    "    fig, ax = plt.subplots(dpi=dpi)\n",
+    "    ax.set(yscale=\"log\")\n",
+    "    sns.lineplot(x='Energy [keV]', y=\"Delta\", data=df, ax=ax)\n",
+    "    sns.lineplot(x='Energy [keV]', y=\"Beta\", data=df, ax=ax)\n",
+    "    ax.legend(['$\\delta$','$\\\\beta$'], fontsize='x-large',\\\n",
+    "              loc=\"upper right\", bbox_to_anchor=(1.015, 1.025), framealpha=0)\n",
+    "    plt.ylabel('')\n",
+    "    plt.title(u'Composition: {0:s} | Density: {1:.3f} {2:s}'\\\n",
+    "              .format(formula, density, r'${g}\\slash{{cm}^3}$'), fontsize='x-large')\n",
+    "    ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))\n",
+    "    plt.show()\n",
+    "    \n",
+    "def plot_ratio(formula='C12H60O25N5', density=-1, dpi=100):\n",
+    "    '''\n",
+    "    Retrieves the refractive index for formula, density and plots delta/beta ratio.\n",
+    "    dpi controls the size of the plot.\n",
+    "    '''\n",
+    "    \n",
+    "    # Retrieve the data\n",
+    "    df = get_pd(formula, density)\n",
+    "    fromula = to_sub(df['Formula'].iloc[0]) # Format the output for plotting\n",
+    "    density = df['Density [g/cm3]'].iloc[0] # Read the returned density\n",
+    "\n",
+    "    # Create the plot\n",
+    "    fig, ax = plt.subplots(dpi=dpi)\n",
+    "    sns.lineplot(x='Energy [keV]', y=\"DeltaBetaRatio\", data=df, ax=ax)\n",
+    "    ax.legend([r'$\\frac{\\delta}{\\beta}$'], fontsize='x-large')\n",
+    "    plt.ylabel('')\n",
+    "    plt.title(u'Composition: {0:s} | Density: {1:.3f} {2:s}'\\\n",
+    "              .format(fromula, density, r'${g}\\slash{{cm}^3}$'),\\\n",
+    "              fontsize='x-large')\n",
+    "    ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))\n",
+    "    plt.show()\n",
+    "    \n",
+    "def plot_differential_ratio(formula1, density1, formula2, density2, dpi=100):\n",
+    "    '''\n",
+    "    Retrieves the refractive index for formula1, density1 and formula2, density2.\n",
+    "    Computes and plots the differential ratio (delta1-delta2)/(beta1-beta2).\n",
+    "    dpi controls the size of the plot.\n",
+    "    '''\n",
+    "\n",
+    "    # Retrieve the refractive index data for the two materials in pandas dataframes\n",
+    "    df1 = get_pd(formula1, density1)\n",
+    "    df2 = get_pd(formula2, density2)\n",
+    "    fromula1 = to_sub(df1['Formula'].iloc[0])\n",
+    "    density1 = df1['Density [g/cm3]'].iloc[0]\n",
+    "    fromula2 = to_sub(df2['Formula'].iloc[0])\n",
+    "    density2 = df2['Density [g/cm3]'].iloc[0]\n",
+    "    \n",
+    "    # Compute the differential ratio and create a new pandas data frame\n",
+    "    DeltaBetaRatio = (df1['Delta']-df2['Delta'])/(df1['Beta']-df2['Beta'])\n",
+    "    df = pd.DataFrame(data={'Energy [keV]':df1['Energy [keV]'], 'DeltaBetaRatio':DeltaBetaRatio})\n",
+    "    \n",
+    "    # Create the plot\n",
+    "    fig, ax = plt.subplots(dpi=dpi)\n",
+    "    sns.lineplot(x='Energy [keV]', y=\"DeltaBetaRatio\", data=df, ax=ax)\n",
+    "    ax.legend([r'$\\frac{\\delta_{1}-\\delta_{2}}{\\beta_{1}-\\beta_{2}}$'], fontsize='xx-large')\n",
+    "    plt.ylabel('')\n",
+    "    plt.title(u'Composition 1: {0:s} | Density 1: {1:.3f} {2:s}\\nComposition 2: {3:s} | Density 2: {4:.3f} {5:s}'\\\n",
+    "              .format(fromula1, density1, r'${g}\\slash{{cm}^3}$',\\\n",
+    "                      fromula2, density2, r'${g}\\slash{{cm}^3}$'),\\\n",
+    "                      fontdict={'fontsize':'x-large', 'horizontalalignment':'left'}, loc='left')\n",
+    "    ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))\n",
+    "    plt.show()\n",
+    "\n",
+    "def plot_differential_delta_beta(formula1, density1, formula2, density2, dpi=100):\n",
+    "    '''\n",
+    "    Retrieves the refractive index for formula1, density1 and formula2, density2.\n",
+    "    Computes and plots (delta1-delta2) and (beta1-beta2) in a plot with log y axis.\n",
+    "    dpi controls the size of the plot.\n",
+    "    '''\n",
+    "\n",
+    "    # Retrieve the refractive index data for the two materials in pandas dataframes\n",
+    "    df1 = get_pd(formula1, density1)\n",
+    "    df2 = get_pd(formula2, density2)\n",
+    "    fromula1 = to_sub(df1['Formula'].iloc[0])\n",
+    "    density1 = df1['Density [g/cm3]'].iloc[0]\n",
+    "    fromula2 = to_sub(df2['Formula'].iloc[0])\n",
+    "    density2 = df2['Density [g/cm3]'].iloc[0]\n",
+    "    \n",
+    "    # Compute the differences and create a new pandas data frame\n",
+    "    df = pd.DataFrame(data={'Energy [keV]':df1['Energy [keV]'],\\\n",
+    "                            'DeltaDif':df1['Delta']-df2['Delta'],\\\n",
+    "                            'BetaDif':df1['Beta']-df2['Beta']})\n",
+    "    \n",
+    "    # Create the plot\n",
+    "    fig, ax = plt.subplots(dpi=dpi)\n",
+    "    ax.set(yscale=\"log\")\n",
+    "    sns.lineplot(x='Energy [keV]', y=\"DeltaDif\", data=df, ax=ax)\n",
+    "    sns.lineplot(x='Energy [keV]', y=\"BetaDif\", data=df, ax=ax)\n",
+    "    ax.legend([r'$\\delta_{1}-\\delta_{2}$', r'$\\beta_{1}-\\beta_{2}$'],\\\n",
+    "              fontsize='x-large', loc=\"upper right\", bbox_to_anchor=(1.015, 1.025), framealpha=0)\n",
+    "    plt.ylabel('')\n",
+    "    plt.title(u'Composition 1: {0:s} | Density 1: {1:.3f} {2:s}\\nComposition 2: {3:s} | Density 2: {4:.13} {5:s}'\\\n",
+    "          .format(formula1, density1, r'${g}\\slash{{cm}^3}$',\\\n",
+    "                  formula2, density2, r'${g}\\slash{{cm}^3}$'),\\\n",
+    "                  fontdict={'fontsize':'x-large', 'horizontalalignment':'left'}, loc='left')\n",
+    "    ax.xaxis.set_minor_locator(ticker.MultipleLocator(1))\n",
+    "    plt.show()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Examples"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Simply calling a plotting function will use the predefined values. The used values will appear as a plot title.\n",
+    "Plots are interactive: They can be panned and zoomed using the buttons on the bottom-left corner. Also hovering the mouse on the cuve will display the (x, y) location of the cursor on the bottom-right corner."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support.' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        this.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option)\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "\n",
+       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+       "    // Updates the figure title.\n",
+       "    fig.header.textContent = msg['label'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
+       "    var cursor = msg['cursor'];\n",
+       "    switch(cursor)\n",
+       "    {\n",
+       "    case 0:\n",
+       "        cursor = 'pointer';\n",
+       "        break;\n",
+       "    case 1:\n",
+       "        cursor = 'default';\n",
+       "        break;\n",
+       "    case 2:\n",
+       "        cursor = 'crosshair';\n",
+       "        break;\n",
+       "    case 3:\n",
+       "        cursor = 'move';\n",
+       "        break;\n",
+       "    }\n",
+       "    fig.rubberband_canvas.style.cursor = cursor;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+       "    fig.message.textContent = msg['message'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+       "    // Request the server to send over a new figure.\n",
+       "    fig.send_draw_message();\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+       "    fig.image_mode = msg['mode'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Called whenever the canvas gets updated.\n",
+       "    this.send_message(\"ack\", {});\n",
+       "}\n",
+       "\n",
+       "// A function to construct a web socket function for onmessage handling.\n",
+       "// Called in the figure constructor.\n",
+       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
+       "    return function socket_on_message(evt) {\n",
+       "        if (evt.data instanceof Blob) {\n",
+       "            /* FIXME: We get \"Resource interpreted as Image but\n",
+       "             * transferred with MIME type text/plain:\" errors on\n",
+       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
+       "             * to be part of the websocket stream */\n",
+       "            evt.data.type = \"image/png\";\n",
+       "\n",
+       "            /* Free the memory for the previous frames */\n",
+       "            if (fig.imageObj.src) {\n",
+       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
+       "                    fig.imageObj.src);\n",
+       "            }\n",
+       "\n",
+       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+       "                evt.data);\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
+       "            fig.imageObj.src = evt.data;\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        var msg = JSON.parse(evt.data);\n",
+       "        var msg_type = msg['type'];\n",
+       "\n",
+       "        // Call the  \"handle_{type}\" callback, which takes\n",
+       "        // the figure and JSON message as its only arguments.\n",
+       "        try {\n",
+       "            var callback = fig[\"handle_\" + msg_type];\n",
+       "        } catch (e) {\n",
+       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        if (callback) {\n",
+       "            try {\n",
+       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+       "                callback(fig, msg);\n",
+       "            } catch (e) {\n",
+       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
+       "            }\n",
+       "        }\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
+       "mpl.findpos = function(e) {\n",
+       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
+       "    var targ;\n",
+       "    if (!e)\n",
+       "        e = window.event;\n",
+       "    if (e.target)\n",
+       "        targ = e.target;\n",
+       "    else if (e.srcElement)\n",
+       "        targ = e.srcElement;\n",
+       "    if (targ.nodeType == 3) // defeat Safari bug\n",
+       "        targ = targ.parentNode;\n",
+       "\n",
+       "    // jQuery normalizes the pageX and pageY\n",
+       "    // pageX,Y are the mouse positions relative to the document\n",
+       "    // offset() returns the position of the element relative to the document\n",
+       "    var x = e.pageX - $(targ).offset().left;\n",
+       "    var y = e.pageY - $(targ).offset().top;\n",
+       "\n",
+       "    return {\"x\": x, \"y\": y};\n",
+       "};\n",
+       "\n",
+       "/*\n",
+       " * return a copy of an object with only non-object keys\n",
+       " * we need this to avoid circular references\n",
+       " * http://stackoverflow.com/a/24161582/3208463\n",
+       " */\n",
+       "function simpleKeys (original) {\n",
+       "  return Object.keys(original).reduce(function (obj, key) {\n",
+       "    if (typeof original[key] !== 'object')\n",
+       "        obj[key] = original[key]\n",
+       "    return obj;\n",
+       "  }, {});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
+       "    var canvas_pos = mpl.findpos(event)\n",
+       "\n",
+       "    if (name === 'button_press')\n",
+       "    {\n",
+       "        this.canvas.focus();\n",
+       "        this.canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    var x = canvas_pos.x * mpl.ratio;\n",
+       "    var y = canvas_pos.y * mpl.ratio;\n",
+       "\n",
+       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
+       "                             step: event.step,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "\n",
+       "    /* This prevents the web browser from automatically changing to\n",
+       "     * the text insertion cursor when the button is pressed.  We want\n",
+       "     * to control all of the cursor setting manually through the\n",
+       "     * 'cursor' event from matplotlib */\n",
+       "    event.preventDefault();\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    // Handle any extra behaviour associated with a key event\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.key_event = function(event, name) {\n",
+       "\n",
+       "    // Prevent repeat events\n",
+       "    if (name == 'key_press')\n",
+       "    {\n",
+       "        if (event.which === this._key)\n",
+       "            return;\n",
+       "        else\n",
+       "            this._key = event.which;\n",
+       "    }\n",
+       "    if (name == 'key_release')\n",
+       "        this._key = null;\n",
+       "\n",
+       "    var value = '';\n",
+       "    if (event.ctrlKey && event.which != 17)\n",
+       "        value += \"ctrl+\";\n",
+       "    if (event.altKey && event.which != 18)\n",
+       "        value += \"alt+\";\n",
+       "    if (event.shiftKey && event.which != 16)\n",
+       "        value += \"shift+\";\n",
+       "\n",
+       "    value += 'k';\n",
+       "    value += event.which.toString();\n",
+       "\n",
+       "    this._key_event_extra(event, name);\n",
+       "\n",
+       "    this.send_message(name, {key: value,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
+       "    if (name == 'download') {\n",
+       "        this.handle_save(this, null);\n",
+       "    } else {\n",
+       "        this.send_message(\"toolbar_button\", {name: name});\n",
+       "    }\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+       "    this.message.textContent = tooltip;\n",
+       "};\n",
+       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
+       "\n",
+       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+       "\n",
+       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
+       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
+       "    // object with the appropriate methods. Currently this is a non binary\n",
+       "    // socket, so there is still some room for performance tuning.\n",
+       "    var ws = {};\n",
+       "\n",
+       "    ws.close = function() {\n",
+       "        comm.close()\n",
+       "    };\n",
+       "    ws.send = function(m) {\n",
+       "        //console.log('sending', m);\n",
+       "        comm.send(m);\n",
+       "    };\n",
+       "    // Register the callback with on_msg.\n",
+       "    comm.on_msg(function(msg) {\n",
+       "        //console.log('receiving', msg['content']['data'], msg);\n",
+       "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
+       "        ws.onmessage(msg['content']['data'])\n",
+       "    });\n",
+       "    return ws;\n",
+       "}\n",
+       "\n",
+       "mpl.mpl_figure_comm = function(comm, msg) {\n",
+       "    // This is the function which gets called when the mpl process\n",
+       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+       "\n",
+       "    var id = msg.content.data.id;\n",
+       "    // Get hold of the div created by the display call when the Comm\n",
+       "    // socket was opened in Python.\n",
+       "    var element = $(\"#\" + id);\n",
+       "    var ws_proxy = comm_websocket_adapter(comm)\n",
+       "\n",
+       "    function ondownload(figure, format) {\n",
+       "        window.open(figure.imageObj.src);\n",
+       "    }\n",
+       "\n",
+       "    var fig = new mpl.figure(id, ws_proxy,\n",
+       "                           ondownload,\n",
+       "                           element.get(0));\n",
+       "\n",
+       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+       "    // web socket which is closed, not our websocket->open comm proxy.\n",
+       "    ws_proxy.onopen();\n",
+       "\n",
+       "    fig.parent_element = element.get(0);\n",
+       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+       "    if (!fig.cell_info) {\n",
+       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
+       "        return;\n",
+       "    }\n",
+       "\n",
+       "    var output_index = fig.cell_info[2]\n",
+       "    var cell = fig.cell_info[0];\n",
+       "\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+       "    var width = fig.canvas.width/mpl.ratio\n",
+       "    fig.root.unbind('remove')\n",
+       "\n",
+       "    // Update the output cell to use the data from the current canvas.\n",
+       "    fig.push_to_output();\n",
+       "    var dataURL = fig.canvas.toDataURL();\n",
+       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+       "    // the notebook keyboard shortcuts fail.\n",
+       "    IPython.keyboard_manager.enable()\n",
+       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
+       "    fig.close_ws(fig, msg);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+       "    fig.send_message('closing', msg);\n",
+       "    // fig.ws.close()\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+       "    // Turn the data on the canvas into data in the output cell.\n",
+       "    var width = this.canvas.width/mpl.ratio\n",
+       "    var dataURL = this.canvas.toDataURL();\n",
+       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Tell IPython that the notebook contents must change.\n",
+       "    IPython.notebook.set_dirty(true);\n",
+       "    this.send_message(\"ack\", {});\n",
+       "    var fig = this;\n",
+       "    // Wait a second, then push the new image to the DOM so\n",
+       "    // that it is saved nicely (might be nice to debounce this).\n",
+       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items){\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) { continue; };\n",
+       "\n",
+       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    // Add the status bar.\n",
+       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "\n",
+       "    // Add the close button to the window.\n",
+       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
+       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
+       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
+       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
+       "    buttongrp.append(button);\n",
+       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
+       "    titlebar.prepend(buttongrp);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(el){\n",
+       "    var fig = this\n",
+       "    el.on(\"remove\", function(){\n",
+       "\tfig.close_ws(fig, {});\n",
+       "    });\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
+       "    // this is important to make the div 'focusable\n",
+       "    el.attr('tabindex', 0)\n",
+       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
+       "    // off when our div gets focus\n",
+       "\n",
+       "    // location in version 3\n",
+       "    if (IPython.notebook.keyboard_manager) {\n",
+       "        IPython.notebook.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "    else {\n",
+       "        // location in version 2\n",
+       "        IPython.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    var manager = IPython.notebook.keyboard_manager;\n",
+       "    if (!manager)\n",
+       "        manager = IPython.keyboard_manager;\n",
+       "\n",
+       "    // Check for shift+enter\n",
+       "    if (event.shiftKey && event.which == 13) {\n",
+       "        this.canvas_div.blur();\n",
+       "        // select the cell after this one\n",
+       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+       "        IPython.notebook.select(index + 1);\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    fig.ondownload(fig, null);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.find_output_cell = function(html_output) {\n",
+       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+       "    // IPython event is triggered only after the cells have been serialised, which for\n",
+       "    // our purposes (turning an active figure into a static one), is too late.\n",
+       "    var cells = IPython.notebook.get_cells();\n",
+       "    var ncells = cells.length;\n",
+       "    for (var i=0; i<ncells; i++) {\n",
+       "        var cell = cells[i];\n",
+       "        if (cell.cell_type === 'code'){\n",
+       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
+       "                var data = cell.output_area.outputs[j];\n",
+       "                if (data.data) {\n",
+       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
+       "                    data = data.data;\n",
+       "                }\n",
+       "                if (data['text/html'] == html_output) {\n",
+       "                    return [cell, data, j];\n",
+       "                }\n",
+       "            }\n",
+       "        }\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "// Register the function which deals with the matplotlib target/channel.\n",
+       "// The kernel may be null if the page has been refreshed.\n",
+       "if (IPython.notebook.kernel != null) {\n",
+       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+       "}\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Javascript object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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\" width=\"639.999990463257\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support.' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        this.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option)\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "\n",
+       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+       "    // Updates the figure title.\n",
+       "    fig.header.textContent = msg['label'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
+       "    var cursor = msg['cursor'];\n",
+       "    switch(cursor)\n",
+       "    {\n",
+       "    case 0:\n",
+       "        cursor = 'pointer';\n",
+       "        break;\n",
+       "    case 1:\n",
+       "        cursor = 'default';\n",
+       "        break;\n",
+       "    case 2:\n",
+       "        cursor = 'crosshair';\n",
+       "        break;\n",
+       "    case 3:\n",
+       "        cursor = 'move';\n",
+       "        break;\n",
+       "    }\n",
+       "    fig.rubberband_canvas.style.cursor = cursor;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+       "    fig.message.textContent = msg['message'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+       "    // Request the server to send over a new figure.\n",
+       "    fig.send_draw_message();\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+       "    fig.image_mode = msg['mode'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Called whenever the canvas gets updated.\n",
+       "    this.send_message(\"ack\", {});\n",
+       "}\n",
+       "\n",
+       "// A function to construct a web socket function for onmessage handling.\n",
+       "// Called in the figure constructor.\n",
+       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
+       "    return function socket_on_message(evt) {\n",
+       "        if (evt.data instanceof Blob) {\n",
+       "            /* FIXME: We get \"Resource interpreted as Image but\n",
+       "             * transferred with MIME type text/plain:\" errors on\n",
+       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
+       "             * to be part of the websocket stream */\n",
+       "            evt.data.type = \"image/png\";\n",
+       "\n",
+       "            /* Free the memory for the previous frames */\n",
+       "            if (fig.imageObj.src) {\n",
+       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
+       "                    fig.imageObj.src);\n",
+       "            }\n",
+       "\n",
+       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+       "                evt.data);\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
+       "            fig.imageObj.src = evt.data;\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        var msg = JSON.parse(evt.data);\n",
+       "        var msg_type = msg['type'];\n",
+       "\n",
+       "        // Call the  \"handle_{type}\" callback, which takes\n",
+       "        // the figure and JSON message as its only arguments.\n",
+       "        try {\n",
+       "            var callback = fig[\"handle_\" + msg_type];\n",
+       "        } catch (e) {\n",
+       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        if (callback) {\n",
+       "            try {\n",
+       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+       "                callback(fig, msg);\n",
+       "            } catch (e) {\n",
+       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
+       "            }\n",
+       "        }\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
+       "mpl.findpos = function(e) {\n",
+       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
+       "    var targ;\n",
+       "    if (!e)\n",
+       "        e = window.event;\n",
+       "    if (e.target)\n",
+       "        targ = e.target;\n",
+       "    else if (e.srcElement)\n",
+       "        targ = e.srcElement;\n",
+       "    if (targ.nodeType == 3) // defeat Safari bug\n",
+       "        targ = targ.parentNode;\n",
+       "\n",
+       "    // jQuery normalizes the pageX and pageY\n",
+       "    // pageX,Y are the mouse positions relative to the document\n",
+       "    // offset() returns the position of the element relative to the document\n",
+       "    var x = e.pageX - $(targ).offset().left;\n",
+       "    var y = e.pageY - $(targ).offset().top;\n",
+       "\n",
+       "    return {\"x\": x, \"y\": y};\n",
+       "};\n",
+       "\n",
+       "/*\n",
+       " * return a copy of an object with only non-object keys\n",
+       " * we need this to avoid circular references\n",
+       " * http://stackoverflow.com/a/24161582/3208463\n",
+       " */\n",
+       "function simpleKeys (original) {\n",
+       "  return Object.keys(original).reduce(function (obj, key) {\n",
+       "    if (typeof original[key] !== 'object')\n",
+       "        obj[key] = original[key]\n",
+       "    return obj;\n",
+       "  }, {});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
+       "    var canvas_pos = mpl.findpos(event)\n",
+       "\n",
+       "    if (name === 'button_press')\n",
+       "    {\n",
+       "        this.canvas.focus();\n",
+       "        this.canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    var x = canvas_pos.x * mpl.ratio;\n",
+       "    var y = canvas_pos.y * mpl.ratio;\n",
+       "\n",
+       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
+       "                             step: event.step,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "\n",
+       "    /* This prevents the web browser from automatically changing to\n",
+       "     * the text insertion cursor when the button is pressed.  We want\n",
+       "     * to control all of the cursor setting manually through the\n",
+       "     * 'cursor' event from matplotlib */\n",
+       "    event.preventDefault();\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    // Handle any extra behaviour associated with a key event\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.key_event = function(event, name) {\n",
+       "\n",
+       "    // Prevent repeat events\n",
+       "    if (name == 'key_press')\n",
+       "    {\n",
+       "        if (event.which === this._key)\n",
+       "            return;\n",
+       "        else\n",
+       "            this._key = event.which;\n",
+       "    }\n",
+       "    if (name == 'key_release')\n",
+       "        this._key = null;\n",
+       "\n",
+       "    var value = '';\n",
+       "    if (event.ctrlKey && event.which != 17)\n",
+       "        value += \"ctrl+\";\n",
+       "    if (event.altKey && event.which != 18)\n",
+       "        value += \"alt+\";\n",
+       "    if (event.shiftKey && event.which != 16)\n",
+       "        value += \"shift+\";\n",
+       "\n",
+       "    value += 'k';\n",
+       "    value += event.which.toString();\n",
+       "\n",
+       "    this._key_event_extra(event, name);\n",
+       "\n",
+       "    this.send_message(name, {key: value,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
+       "    if (name == 'download') {\n",
+       "        this.handle_save(this, null);\n",
+       "    } else {\n",
+       "        this.send_message(\"toolbar_button\", {name: name});\n",
+       "    }\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+       "    this.message.textContent = tooltip;\n",
+       "};\n",
+       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
+       "\n",
+       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+       "\n",
+       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
+       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
+       "    // object with the appropriate methods. Currently this is a non binary\n",
+       "    // socket, so there is still some room for performance tuning.\n",
+       "    var ws = {};\n",
+       "\n",
+       "    ws.close = function() {\n",
+       "        comm.close()\n",
+       "    };\n",
+       "    ws.send = function(m) {\n",
+       "        //console.log('sending', m);\n",
+       "        comm.send(m);\n",
+       "    };\n",
+       "    // Register the callback with on_msg.\n",
+       "    comm.on_msg(function(msg) {\n",
+       "        //console.log('receiving', msg['content']['data'], msg);\n",
+       "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
+       "        ws.onmessage(msg['content']['data'])\n",
+       "    });\n",
+       "    return ws;\n",
+       "}\n",
+       "\n",
+       "mpl.mpl_figure_comm = function(comm, msg) {\n",
+       "    // This is the function which gets called when the mpl process\n",
+       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+       "\n",
+       "    var id = msg.content.data.id;\n",
+       "    // Get hold of the div created by the display call when the Comm\n",
+       "    // socket was opened in Python.\n",
+       "    var element = $(\"#\" + id);\n",
+       "    var ws_proxy = comm_websocket_adapter(comm)\n",
+       "\n",
+       "    function ondownload(figure, format) {\n",
+       "        window.open(figure.imageObj.src);\n",
+       "    }\n",
+       "\n",
+       "    var fig = new mpl.figure(id, ws_proxy,\n",
+       "                           ondownload,\n",
+       "                           element.get(0));\n",
+       "\n",
+       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+       "    // web socket which is closed, not our websocket->open comm proxy.\n",
+       "    ws_proxy.onopen();\n",
+       "\n",
+       "    fig.parent_element = element.get(0);\n",
+       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+       "    if (!fig.cell_info) {\n",
+       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
+       "        return;\n",
+       "    }\n",
+       "\n",
+       "    var output_index = fig.cell_info[2]\n",
+       "    var cell = fig.cell_info[0];\n",
+       "\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+       "    var width = fig.canvas.width/mpl.ratio\n",
+       "    fig.root.unbind('remove')\n",
+       "\n",
+       "    // Update the output cell to use the data from the current canvas.\n",
+       "    fig.push_to_output();\n",
+       "    var dataURL = fig.canvas.toDataURL();\n",
+       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+       "    // the notebook keyboard shortcuts fail.\n",
+       "    IPython.keyboard_manager.enable()\n",
+       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
+       "    fig.close_ws(fig, msg);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+       "    fig.send_message('closing', msg);\n",
+       "    // fig.ws.close()\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+       "    // Turn the data on the canvas into data in the output cell.\n",
+       "    var width = this.canvas.width/mpl.ratio\n",
+       "    var dataURL = this.canvas.toDataURL();\n",
+       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Tell IPython that the notebook contents must change.\n",
+       "    IPython.notebook.set_dirty(true);\n",
+       "    this.send_message(\"ack\", {});\n",
+       "    var fig = this;\n",
+       "    // Wait a second, then push the new image to the DOM so\n",
+       "    // that it is saved nicely (might be nice to debounce this).\n",
+       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items){\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) { continue; };\n",
+       "\n",
+       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    // Add the status bar.\n",
+       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "\n",
+       "    // Add the close button to the window.\n",
+       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
+       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
+       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
+       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
+       "    buttongrp.append(button);\n",
+       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
+       "    titlebar.prepend(buttongrp);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(el){\n",
+       "    var fig = this\n",
+       "    el.on(\"remove\", function(){\n",
+       "\tfig.close_ws(fig, {});\n",
+       "    });\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
+       "    // this is important to make the div 'focusable\n",
+       "    el.attr('tabindex', 0)\n",
+       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
+       "    // off when our div gets focus\n",
+       "\n",
+       "    // location in version 3\n",
+       "    if (IPython.notebook.keyboard_manager) {\n",
+       "        IPython.notebook.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "    else {\n",
+       "        // location in version 2\n",
+       "        IPython.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    var manager = IPython.notebook.keyboard_manager;\n",
+       "    if (!manager)\n",
+       "        manager = IPython.keyboard_manager;\n",
+       "\n",
+       "    // Check for shift+enter\n",
+       "    if (event.shiftKey && event.which == 13) {\n",
+       "        this.canvas_div.blur();\n",
+       "        // select the cell after this one\n",
+       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+       "        IPython.notebook.select(index + 1);\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    fig.ondownload(fig, null);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.find_output_cell = function(html_output) {\n",
+       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+       "    // IPython event is triggered only after the cells have been serialised, which for\n",
+       "    // our purposes (turning an active figure into a static one), is too late.\n",
+       "    var cells = IPython.notebook.get_cells();\n",
+       "    var ncells = cells.length;\n",
+       "    for (var i=0; i<ncells; i++) {\n",
+       "        var cell = cells[i];\n",
+       "        if (cell.cell_type === 'code'){\n",
+       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
+       "                var data = cell.output_area.outputs[j];\n",
+       "                if (data.data) {\n",
+       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
+       "                    data = data.data;\n",
+       "                }\n",
+       "                if (data['text/html'] == html_output) {\n",
+       "                    return [cell, data, j];\n",
+       "                }\n",
+       "            }\n",
+       "        }\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "// Register the function which deals with the matplotlib target/channel.\n",
+       "// The kernel may be null if the page has been refreshed.\n",
+       "if (IPython.notebook.kernel != null) {\n",
+       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+       "}\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Javascript object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAGACAYAAADbINq/AAAgAElEQVR4Xu2dB5gV1fnGf/TOwtKliiCIXZRERY29KxYsUWPXv9GY2GJJscXYjUaNGjX2Gks0YhcbxoooiAUVEUHq0nv9P++9c+Gybrl3d3Z3Zu57nuc+u3v3zDnf+X1nZt75Tpl6OJmACZiACZiACRQcgXoF12I32ARMwARMwARMAAsAdwITMAETMAETKEACFgAF6HQ32QRMwARMwAQsANwHTMAETMAETKAACVgAFKDT3WQTMAETMAETsABwHzABEzABEzCBAiRgAVCATneTTcAETMAETMACwH3ABEzABEzABAqQgAVAATrdTTYBEzABEzABCwD3ARMwARMwARMoQAIWAAXodDfZBEzABEzABCwA3AdMwARMwARMoAAJWAAUoNPdZBMwARMwAROwAHAfMAETMAETMIECJGABUIBOd5NNwARMwARMwALAfcAETMAETMAECpCABUABOt1NNgETMAETMAELAPcBEzABEzABEyhAAhYABeh0N9kETMAETMAELADcB0zABEzABEygAAlYABSg091kEzABEzABE7AAcB8wARMwARMwgQIkYAFQgE53k03ABEzABEzAAsB9wARMwARMwATWEngM2AhYCSwHLgReSyIgC4AketVtMgETMAETqCqBNsCc4OAtg5t/e2BVVQuM6nEWAGV7ZlvgLGAwIMfPBz4GHgw+UoZJTJcAFwPZ/WII0Bu4oVSDy8obRSY15cvjgHuAvsA3pRreMHhyuBQQp+qmPYL+OAhoAUwEngauAmZXs/BMO+YC65cqL6x2rAaOB+6twNaMHZksi4AZwCjgEeCJCFyAS/f58s6NarqkzMMPBY4EtgY6Bn3gKeCvwfWpojrzObY78Ddg9+A68Crwu6C+7DpyzRcGi6bA/cCVQX8Io8xcy/gFIM4WALkSi3k+dXbd7IYD9wHfA20BXYR1EdNJ+EzM21ie+d0Afd7LyqCL9m7B99nHlZU3alhq0pe1JQAuAq4A/hNcBGcBA4Hzgwv/zsAP1QCffeO9Grggq6y6EABDgUlAE6AHsC+g714H9gcWV6Ot1T20dJ8v79yobj1lHa9zUsJP1x7x0ZOpBMmXwHaViKNcj20OfAosBf4ISLj9BdD3mwELA8NyzRcWB/ldAjDzMBZWuRWVIxF0IFAESECp/yUuOQKwrkt3BN4AbgHOLMPbGwRPYKMT1xPKb1BtXuTCxFrTvqwNAaCbu8YebwoiANl89LQ+MrhgK19VU6YdLwcRL/XxqUFhdSEAyoqoHAL8G7gV+E1VG1oDx9XmudEhiIhkN+NXwUPKrsEDS3lNzPXY3wYPP/2yolrqZ18Dv8+KAuaaLyzkdwFdgb3DKjCPcvYCLge2B5blcVwssloArOum5wGFWaX0l+TgQXUOhcy3CDqHVKKezL4Kjs2EDDWhRBdxDSmUBMcofHwM8Iegvg+Bk4Bvs+rNHC/1/XfgZ4BCtXcG6j97TKoyW1TshoCe8tSZWwPTgfeDqMaKoMzsIQBd4I4txUERkV5l5FW2XGzItEm23AjsFDC5O3jaCGucLV9f5uDudbLUhgB4Adimgv6oi7L8+fPAj/m2Qfkz7ZBgehH4V9ZNNioCQHZqyEM3gGJAwwOZtHlwgd4BUKhYQ3WKYrxd6hzMpb/lc35UdG7oiVGCRdcFPVFnJz1gKLqhoanqJl1XPgckBB7Is7CyjpXYFENdH7LTm8EfOleVcs1XnkmNgwiDri0azngHODVoiybcZQ831gd+DK43t2cVqKjQGUEkRHm+CPIMC/KIu4aPVLaGcyVk9LeuuTODa81hgGx5KOjziniUlTTEd3gguPPEHO3sFgBr/dMgCKkq1PrLHNymm506m4YKbgZaApcFISOd+JOzbpKfBTdtddJfAxo71HiWxpeuARoFAkGhXN3kMylzsxwfXJglEvYEzgayx5dzsUVljgsmt+imoZNAqnof4IRAwJQe49TToISHbkIHBEYpPKgTqXTeXG3IHDc2GEPXiaoQnyIuskPCSEki47tS7czBLaks+foy13Kz82VunP1LibZM/RKQ1ZkDoJvvvCDkq2GnspLqVp/SMIH6U1VStpA5ORjv1Y1QQi9KAkC2/TMQjG8FDd0quNGrP0pMShj8X3COKCyuCEmu/S3f86Oic0PcxE/hep3vmaQna4XsM/MhqtPHVabaeltwfn6Up/PLOlaRH9msm3F2+kcwDKNIglKu+coySfcciTlFrTS0JcGma5CuibpJ63uJpEySH0cAmnOga6rSdcFN/Y5AtOrGrWFKDXVovohu6gsCO1W+Hi40jCtWEgT6XeJa/UjXNUWVVL/a3gzoHFx7VJeEmh4mNA+quvNt8nRRzWe3AFjLuFPQYTSxSiq0sqQTTuNDUtJ6elZSB9ZNVoJAN+nMxUdKV5NYlNT5NLkpM+lKF3kl3QAVJdBFQRcPpczxskd2ZZIiAEcEJ4Vmq+Zii8bPVK/GtZ4tp3FlTewrL8xZOm8uNmS3Kftmr+/HAFOCuRb6u2dwY5Wo0ieflK8vFbmRaJNPxD+TNgZ0kVFUInMB0cVQqfSktbLsyxYA4q9xxfWCG6tuWJmn2j8HS450w1K/0STTXNqgpzWNievCpvB4ebbKtgnBBVTLmpT0BKX+kC0ANL9AYlOTnuSfsgRAeeVU5J98JgGWNQSgsiV8FaFQv9cyLSU9iYqnogCZ8KzEnwS3onC6qGf6aWX9rSrnR0VDAKpXT56yLzN2ridb3fz1nfxWnT4u8S7hIwGtCXv5pPKOFUPZmD0PROVqHoC+U39QyjVfWTadEvRV3VizRYt+l6DTeabzMJP0sCJRoMiskvyvm7z6r+YFlJVUjs6lx4Mn90weRWUUnck+Vv1FYl3noES0Ikx6sGsVXNfluz9VMsSSD/tI5bUAWOuOXC64mdyaia2VAZqBq8ky2UnqVZ1HE7UyFx+FuXSxzSSFtHTyaoJTJmmS4UuAQplSvEqZ4/W0oQtzJmnMT7NzlVfl5GKLfK1Qlp7gdSOSnRrby05VFQC58shuk3hrCCKTdFJrYpOeaqub8vGl6tLFpV1wI80WALop6GYs5a+nAvlAokCRicyN86BgUla2zbqo6GkkWwDooqL+oieQTFLUSPNJFMIXC4Ui9WSi1SaqT4KoIkGaLQAyIqIsW1WfbtyaQa7IT3YqPZShi52GgdRODUdJMGS3o7xyKvJZGAJAESaxUShWF3Y9qWX6fWmBqP59VHAxz/TpyvpbVc6PigSAbvIS8qcBGsOWr/QEK99qDL06Sf1G56/qUN/VpMBcU0XH6sZ+fRkPQHpS19BmtgDIJV9ZNukapGFH+Sc7PRpcMyUAs5MiJhrekA1KEnb6ZCKSZdVxYsBc15LMcKzy6Ule4keCMZPEQ/1IUQ9FmAoqWQCsdXcm5JrLEIDmCChcrzEoPXmV7sgK4ysakLn4KMSfiRIory6iuskfnXWghgP0JCo1r5u7UuZ4ddLMU4S+3yR4YpYa1g0lF1t0nMJYKlMhN93wdCO7NrjxZdeX3S9yiQDkyiO7jtJMVI8YZN+Aq3oy5uPLTB2qWzaUV7/Cn7qgDwj8l88cAF2oNVT0SuA7+eucIOqgJyI9kSjtF9zgNE5ZnSGA0raqbPlas8g1XvpkEDLX96Xbob4moaO+qIt0aQFQXjkV+SoMAZAZAtBcBY3v60Je2Y1PQkzCSIIml/6W7/lR2SRAPaGqP0l4yaeKAkpYady+qklCQjcyRaw0Jq/IWa6psmOnBatNKhsCyDVfabvEV6JS/erhUv/MXMd0TcukzJDJpkFUJ3N8ZXMeNIlbw4qKsGQnCWqJCc2dySTNd9C1uDrzaHLlH7l8FgDrukQnVmbSlZ6Uy0uZJ16pUj0xZScpc11EddKHJQByiQBUZku2jfK7VLAEjNSyBIGerqobAcjFhvKYhCkA1NZcfZnhUpEA0E1TwlBPcHqiU8pHAOji8m6WuNPyREU7FNJWvZkLrsKiulnpaVdJ/1c/Km9SalmTAMuyVWVlZoIrOqWhBz2V6qmrrHYodK0nPD1dat5JdgSgvHIquriFIQDEX8MAEq4a69c5qOEzCfDM8FppGxRWrkp/y/X8qEwA7BIMU8iHGt7TUJIETFWTRIw46MafGfPOtaxcjpVI1fi5JiuXvqaJSWYSYK75StumciXeSq9akE8lrhXJ0ZyoTFL/1rmh659S5ni1vaKd+SQmFFFTdC6TMhE1zadRv88kXQM1HKfzoi6XmObqx1DzWQCsi7OypWN6qldHUdhWF0b9LkWf2RhIilNhdc0B0BNeWAKgsjkAudhSVsfRSgCNt+lEUySgLAGgcWWNm+kkzU6l8+ZqQ1UuyFXp9Pn4UuVXJAA0EVJPXIrOZIRhPgKgTzAmqTkjSprQpJu7hIAucOKrpKcWhbgzkaHMUI9C2pobkJ3UF3WD03h35sKs/5dla2l+sl1DVJr8VFY7NEtdoVpN1NRNt7zJjNnlVOSj6gqAg4Px3tLLISW2dQ3TGHF5q0eq098qOz/KOzeyWehpX8N/6o9lPfnm2rcl7HTjUuhbQ4f5bE2b67Hqj5pgp0mgmSFHRTB0TdMcAIlCpVzzlW5b5oleEyM1byWTdAPWsEjpG7tu5BouyPT9TARAedXPy0pqq65pEhJavpdJWkGih4LSwwKaIKiIraKqBZcsAH7q8szmMTrBpPAVNtXEFF2MtUxPKwQ0WzQz613rpzUxTE/9ulAqr56uM0tXygo/5jsEoJNRHTWzCiAjLlSfUi62aCmhLqCaQKWLu8KjuoDr5qMn1OwZ09n9QiebTlCdtLrhaMKMwo7lrQKoiIdszfWCXJ0JUhmv5upL5S9PAGgMXnMtxFhjhZmUjwDQRUk3AoX6xU5hTq1t18Q0/a2ok24SmgMgYZC9pEsRJj0Z6aldT7oa49ckJ12QNSwku9VHlcqzVePlukFKvMgWhV+1tEsX4fLakQm5q9yMAKionIounvkIgMxGQHoS1UZAGhbRdxoW0wTW7OW54qCZ3Iqu6PxQiFfzNvS9+rcY5drfqnJ+lHduZLPITO7V3AtFcrIji/n0cflKM/cVZXuuFGwNhWSGQyQGde1S38pERnI9VlEVTSrUk3BmIyDdRPWgIz6aWa+Ua77SfUJ9Tw9P8pEeOhRRk+CVwNPkOz1kZGbaa96U/KkoSmYZoq5L8rdu1rquqizN7VAEU1w0ATsjMtRvMksCZYdWyuhBSiI8WyxqlYBEtIYVCi5ZAJTtci09Kb0VsG5+OqF08cx0oNLr3vVEoo5deh+A6s4B0BiYogq6UWf2AdAJUNE+AKVt0Qmlp3yFmTMhZd18NDFNkw+zb87Z/UInu8LFaqv2yM5nH4DSNuQjAKq7RCrj2Vx8qfbroiJGap9mQkvUZSZmyveZORi6iOiGk48AkC164taTfOZGrBusbtx6mtNNXnNENKFT/S57voiOFXt9r5C8dmHTcQoFa9ayZu4rVWSrQqiaOKfQuZ7u/xdEqBS5Kq8dmoMg0aJJWRkBUFE5YQmATDm60SuMqwu0zjmNp5e1TlurcHQu6Eahi7uElI7RmnE98eUqAKpyfpR3bmSz6BI8DOjJ+rxSkPLp43poKD2mnSkuO0KTmUuUvfVyrseqPImu7K2AJSYkpFVGdso1X+l+oSdwRU4yE1J1TdVDk8biNSyWSRqa1AoA3eCzt16Xn3SzV2RK/9N8BAkECR7NV8msEtC8GwmITNIKAPkie3hD12WJGk1w1ENOwSULgGi7vLyLV7SttnUmsC6BXCIASWUmoacbnsLqpd8ZkdQ259OuzFCWRHBmia2O11JlRQNKb0SWT9nOWwkBC4BodxELgGj7x9blRqAQBYBWiyhiopu/loQqzF3oSdFHjcWLh4ZCNFSj8X1tZqUIVnbkS99rJYqiYk41RMACoIbAhlSsBUBIIF1MnRIoRAGg4S8NP2m4RfOGNCeo0JPmUWl4TcJI4XctCdTwjoYmK1p1Vejcaqz9FgA1htYFm4AJBAQKUQDY+SYQeQIWAJF3kQ00ARMwARMwgfAJWACEz9QlmoAJmIAJmEDkCVgARN5FNtAETMAETMAEwidgARA+U5doAiZgAiZgApEnUMgCQLuLDW3YsOHQTp20n4STCZiACZiACVRMYPLkyXprojbUin0qZAGQcl7Xrl1XT5pU2UvFYu9nN8AETMAETCAEAvXq1dMWxtpNNfbJAsACIPad2A0wARMwgdoiYAFQW6RroR5HAGoBsqswARMwgYQQsABIhiNTcwCKi4uHlpSUJKNFboUJmIAJmECNErAAqFG8tVu4IwC1y9u1mYAJmECcCVgAxNl7pWy3AEiQM90UEzABE6hhAhYANQy4Nou3AKhN2q7LBEzABOJNwAIg3v5bx3oLgAQ5000xARMwgUoIPPfcc1x//fWMGTOG+fPn07FjRw477LDUd7kkC4BcKEU/jycBRt9HttAETMAEQiPw7rvvsv3223PmmWey33770bRpU6ZMmcKECRM477zzcqrHAiAnTPHI5AhAPPxkK03ABEygugQuu+wyLr74Yt555x222267KhVnAVAlbNE8yAIgmn6xVSZgAiYQNoHx48czePDg1FN/r1692HfffTnjjDPo379/zlVZAOSMKvoZQxEA370NK5dCn92i32BbaAImYAIFSGDVqlWcddZZqXC/IgFffPEFV155Jd9++y2vvPIK2267bU5ULABywhSPTKEIgDt2gsWz4Xej49FoW2kCJmACeRI46b4P+b5kUZ5HhZu9Z7vm3HXsNlUq9KKLLuLpp59m1KhRqbF/penTp9OtWzcOPfRQHn744ZzKtQDICVM8MoUhABb94xc0XDiNxud9EY9G20oTMAETyJNAnAXAjz/+mAr533LLLZxyyinrtLxfv3707NmTl19+OSciFgA5YYpHpjAEwNi/bEunlVNof/GEeDTaVpqACZhAARH417/+xYknnpgK9/fu3XtNy1evXk1xcXEqAnDnnXfmRMQCICdM8cgUigC4YjDrLf+etpf8EI9G20oTMAETKCACmvmvcf+FCxfSvHnzNS0fMWIEO+ywA8OGDWOfffbJiYgFQE6Y4pEpDAHw2ZW/oMeScbS+9Md4NNpWmoAJmEABEbjuuutS6/xHjhzJVlttlWr5ihUrUjf/OXPmMHr0aBo1apQT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\" width=\"639.999990463257\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plot_ratio()\n",
+    "plot_delta_beta()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To choose a different material provide its chemical composition as a string input for the argument formula.\n",
+    "The density when equals to -1 retrieves a pre-defined tabulated value for known materials. To define the density provide its value in g/cm3 for the argument density."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support.' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        this.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option)\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "\n",
+       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+       "    // Updates the figure title.\n",
+       "    fig.header.textContent = msg['label'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
+       "    var cursor = msg['cursor'];\n",
+       "    switch(cursor)\n",
+       "    {\n",
+       "    case 0:\n",
+       "        cursor = 'pointer';\n",
+       "        break;\n",
+       "    case 1:\n",
+       "        cursor = 'default';\n",
+       "        break;\n",
+       "    case 2:\n",
+       "        cursor = 'crosshair';\n",
+       "        break;\n",
+       "    case 3:\n",
+       "        cursor = 'move';\n",
+       "        break;\n",
+       "    }\n",
+       "    fig.rubberband_canvas.style.cursor = cursor;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+       "    fig.message.textContent = msg['message'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+       "    // Request the server to send over a new figure.\n",
+       "    fig.send_draw_message();\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+       "    fig.image_mode = msg['mode'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Called whenever the canvas gets updated.\n",
+       "    this.send_message(\"ack\", {});\n",
+       "}\n",
+       "\n",
+       "// A function to construct a web socket function for onmessage handling.\n",
+       "// Called in the figure constructor.\n",
+       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
+       "    return function socket_on_message(evt) {\n",
+       "        if (evt.data instanceof Blob) {\n",
+       "            /* FIXME: We get \"Resource interpreted as Image but\n",
+       "             * transferred with MIME type text/plain:\" errors on\n",
+       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
+       "             * to be part of the websocket stream */\n",
+       "            evt.data.type = \"image/png\";\n",
+       "\n",
+       "            /* Free the memory for the previous frames */\n",
+       "            if (fig.imageObj.src) {\n",
+       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
+       "                    fig.imageObj.src);\n",
+       "            }\n",
+       "\n",
+       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+       "                evt.data);\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
+       "            fig.imageObj.src = evt.data;\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        var msg = JSON.parse(evt.data);\n",
+       "        var msg_type = msg['type'];\n",
+       "\n",
+       "        // Call the  \"handle_{type}\" callback, which takes\n",
+       "        // the figure and JSON message as its only arguments.\n",
+       "        try {\n",
+       "            var callback = fig[\"handle_\" + msg_type];\n",
+       "        } catch (e) {\n",
+       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        if (callback) {\n",
+       "            try {\n",
+       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+       "                callback(fig, msg);\n",
+       "            } catch (e) {\n",
+       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
+       "            }\n",
+       "        }\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
+       "mpl.findpos = function(e) {\n",
+       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
+       "    var targ;\n",
+       "    if (!e)\n",
+       "        e = window.event;\n",
+       "    if (e.target)\n",
+       "        targ = e.target;\n",
+       "    else if (e.srcElement)\n",
+       "        targ = e.srcElement;\n",
+       "    if (targ.nodeType == 3) // defeat Safari bug\n",
+       "        targ = targ.parentNode;\n",
+       "\n",
+       "    // jQuery normalizes the pageX and pageY\n",
+       "    // pageX,Y are the mouse positions relative to the document\n",
+       "    // offset() returns the position of the element relative to the document\n",
+       "    var x = e.pageX - $(targ).offset().left;\n",
+       "    var y = e.pageY - $(targ).offset().top;\n",
+       "\n",
+       "    return {\"x\": x, \"y\": y};\n",
+       "};\n",
+       "\n",
+       "/*\n",
+       " * return a copy of an object with only non-object keys\n",
+       " * we need this to avoid circular references\n",
+       " * http://stackoverflow.com/a/24161582/3208463\n",
+       " */\n",
+       "function simpleKeys (original) {\n",
+       "  return Object.keys(original).reduce(function (obj, key) {\n",
+       "    if (typeof original[key] !== 'object')\n",
+       "        obj[key] = original[key]\n",
+       "    return obj;\n",
+       "  }, {});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
+       "    var canvas_pos = mpl.findpos(event)\n",
+       "\n",
+       "    if (name === 'button_press')\n",
+       "    {\n",
+       "        this.canvas.focus();\n",
+       "        this.canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    var x = canvas_pos.x * mpl.ratio;\n",
+       "    var y = canvas_pos.y * mpl.ratio;\n",
+       "\n",
+       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
+       "                             step: event.step,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "\n",
+       "    /* This prevents the web browser from automatically changing to\n",
+       "     * the text insertion cursor when the button is pressed.  We want\n",
+       "     * to control all of the cursor setting manually through the\n",
+       "     * 'cursor' event from matplotlib */\n",
+       "    event.preventDefault();\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    // Handle any extra behaviour associated with a key event\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.key_event = function(event, name) {\n",
+       "\n",
+       "    // Prevent repeat events\n",
+       "    if (name == 'key_press')\n",
+       "    {\n",
+       "        if (event.which === this._key)\n",
+       "            return;\n",
+       "        else\n",
+       "            this._key = event.which;\n",
+       "    }\n",
+       "    if (name == 'key_release')\n",
+       "        this._key = null;\n",
+       "\n",
+       "    var value = '';\n",
+       "    if (event.ctrlKey && event.which != 17)\n",
+       "        value += \"ctrl+\";\n",
+       "    if (event.altKey && event.which != 18)\n",
+       "        value += \"alt+\";\n",
+       "    if (event.shiftKey && event.which != 16)\n",
+       "        value += \"shift+\";\n",
+       "\n",
+       "    value += 'k';\n",
+       "    value += event.which.toString();\n",
+       "\n",
+       "    this._key_event_extra(event, name);\n",
+       "\n",
+       "    this.send_message(name, {key: value,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
+       "    if (name == 'download') {\n",
+       "        this.handle_save(this, null);\n",
+       "    } else {\n",
+       "        this.send_message(\"toolbar_button\", {name: name});\n",
+       "    }\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+       "    this.message.textContent = tooltip;\n",
+       "};\n",
+       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
+       "\n",
+       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+       "\n",
+       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
+       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
+       "    // object with the appropriate methods. Currently this is a non binary\n",
+       "    // socket, so there is still some room for performance tuning.\n",
+       "    var ws = {};\n",
+       "\n",
+       "    ws.close = function() {\n",
+       "        comm.close()\n",
+       "    };\n",
+       "    ws.send = function(m) {\n",
+       "        //console.log('sending', m);\n",
+       "        comm.send(m);\n",
+       "    };\n",
+       "    // Register the callback with on_msg.\n",
+       "    comm.on_msg(function(msg) {\n",
+       "        //console.log('receiving', msg['content']['data'], msg);\n",
+       "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
+       "        ws.onmessage(msg['content']['data'])\n",
+       "    });\n",
+       "    return ws;\n",
+       "}\n",
+       "\n",
+       "mpl.mpl_figure_comm = function(comm, msg) {\n",
+       "    // This is the function which gets called when the mpl process\n",
+       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+       "\n",
+       "    var id = msg.content.data.id;\n",
+       "    // Get hold of the div created by the display call when the Comm\n",
+       "    // socket was opened in Python.\n",
+       "    var element = $(\"#\" + id);\n",
+       "    var ws_proxy = comm_websocket_adapter(comm)\n",
+       "\n",
+       "    function ondownload(figure, format) {\n",
+       "        window.open(figure.imageObj.src);\n",
+       "    }\n",
+       "\n",
+       "    var fig = new mpl.figure(id, ws_proxy,\n",
+       "                           ondownload,\n",
+       "                           element.get(0));\n",
+       "\n",
+       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+       "    // web socket which is closed, not our websocket->open comm proxy.\n",
+       "    ws_proxy.onopen();\n",
+       "\n",
+       "    fig.parent_element = element.get(0);\n",
+       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+       "    if (!fig.cell_info) {\n",
+       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
+       "        return;\n",
+       "    }\n",
+       "\n",
+       "    var output_index = fig.cell_info[2]\n",
+       "    var cell = fig.cell_info[0];\n",
+       "\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+       "    var width = fig.canvas.width/mpl.ratio\n",
+       "    fig.root.unbind('remove')\n",
+       "\n",
+       "    // Update the output cell to use the data from the current canvas.\n",
+       "    fig.push_to_output();\n",
+       "    var dataURL = fig.canvas.toDataURL();\n",
+       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+       "    // the notebook keyboard shortcuts fail.\n",
+       "    IPython.keyboard_manager.enable()\n",
+       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
+       "    fig.close_ws(fig, msg);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+       "    fig.send_message('closing', msg);\n",
+       "    // fig.ws.close()\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+       "    // Turn the data on the canvas into data in the output cell.\n",
+       "    var width = this.canvas.width/mpl.ratio\n",
+       "    var dataURL = this.canvas.toDataURL();\n",
+       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Tell IPython that the notebook contents must change.\n",
+       "    IPython.notebook.set_dirty(true);\n",
+       "    this.send_message(\"ack\", {});\n",
+       "    var fig = this;\n",
+       "    // Wait a second, then push the new image to the DOM so\n",
+       "    // that it is saved nicely (might be nice to debounce this).\n",
+       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items){\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) { continue; };\n",
+       "\n",
+       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    // Add the status bar.\n",
+       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "\n",
+       "    // Add the close button to the window.\n",
+       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
+       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
+       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
+       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
+       "    buttongrp.append(button);\n",
+       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
+       "    titlebar.prepend(buttongrp);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(el){\n",
+       "    var fig = this\n",
+       "    el.on(\"remove\", function(){\n",
+       "\tfig.close_ws(fig, {});\n",
+       "    });\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
+       "    // this is important to make the div 'focusable\n",
+       "    el.attr('tabindex', 0)\n",
+       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
+       "    // off when our div gets focus\n",
+       "\n",
+       "    // location in version 3\n",
+       "    if (IPython.notebook.keyboard_manager) {\n",
+       "        IPython.notebook.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "    else {\n",
+       "        // location in version 2\n",
+       "        IPython.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    var manager = IPython.notebook.keyboard_manager;\n",
+       "    if (!manager)\n",
+       "        manager = IPython.keyboard_manager;\n",
+       "\n",
+       "    // Check for shift+enter\n",
+       "    if (event.shiftKey && event.which == 13) {\n",
+       "        this.canvas_div.blur();\n",
+       "        // select the cell after this one\n",
+       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+       "        IPython.notebook.select(index + 1);\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    fig.ondownload(fig, null);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.find_output_cell = function(html_output) {\n",
+       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+       "    // IPython event is triggered only after the cells have been serialised, which for\n",
+       "    // our purposes (turning an active figure into a static one), is too late.\n",
+       "    var cells = IPython.notebook.get_cells();\n",
+       "    var ncells = cells.length;\n",
+       "    for (var i=0; i<ncells; i++) {\n",
+       "        var cell = cells[i];\n",
+       "        if (cell.cell_type === 'code'){\n",
+       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
+       "                var data = cell.output_area.outputs[j];\n",
+       "                if (data.data) {\n",
+       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
+       "                    data = data.data;\n",
+       "                }\n",
+       "                if (data['text/html'] == html_output) {\n",
+       "                    return [cell, data, j];\n",
+       "                }\n",
+       "            }\n",
+       "        }\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "// Register the function which deals with the matplotlib target/channel.\n",
+       "// The kernel may be null if the page has been refreshed.\n",
+       "if (IPython.notebook.kernel != null) {\n",
+       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+       "}\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Javascript object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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\" width=\"639.999990463257\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plot_delta_beta(formula='KI3', density=-1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To activate the slider bar that selects the density call the sweep_density function.\n",
+    "\n",
+    "Select the density argument: density=(minDensity, maxDensity, step) where step is optional.\n",
+    "\n",
+    "Select the formula and the function to use as follows:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "e602ccf96f0d41a38763ac749d277c32",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "aW50ZXJhY3RpdmUoY2hpbGRyZW49KEZsb2F0U2xpZGVyKHZhbHVlPTEuMjAwMDAwMDAwMDAwMDAwMiwgZGVzY3JpcHRpb249dSdEZW5zaXR5JywgbWF4PTIuMCwgbWluPTAuNSksIE91dHB1dCjigKY=\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sweep_density(density=(0.5, 2, 0.1), formula='KI3', func=plot_ratio)\n",
+    "# sweep_density(density=(0.5, 2, 0.01), formula='C21H27NO3', func=plot_delta_beta)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "The differential ratio and differential delta & beta can be plotted in a similar fashion. In this case soft tissue ('C12H60O25N5') is embedded in paraffin wax ('C21H27NO3')."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support.' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        this.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option)\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "\n",
+       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+       "    // Updates the figure title.\n",
+       "    fig.header.textContent = msg['label'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
+       "    var cursor = msg['cursor'];\n",
+       "    switch(cursor)\n",
+       "    {\n",
+       "    case 0:\n",
+       "        cursor = 'pointer';\n",
+       "        break;\n",
+       "    case 1:\n",
+       "        cursor = 'default';\n",
+       "        break;\n",
+       "    case 2:\n",
+       "        cursor = 'crosshair';\n",
+       "        break;\n",
+       "    case 3:\n",
+       "        cursor = 'move';\n",
+       "        break;\n",
+       "    }\n",
+       "    fig.rubberband_canvas.style.cursor = cursor;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+       "    fig.message.textContent = msg['message'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+       "    // Request the server to send over a new figure.\n",
+       "    fig.send_draw_message();\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+       "    fig.image_mode = msg['mode'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Called whenever the canvas gets updated.\n",
+       "    this.send_message(\"ack\", {});\n",
+       "}\n",
+       "\n",
+       "// A function to construct a web socket function for onmessage handling.\n",
+       "// Called in the figure constructor.\n",
+       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
+       "    return function socket_on_message(evt) {\n",
+       "        if (evt.data instanceof Blob) {\n",
+       "            /* FIXME: We get \"Resource interpreted as Image but\n",
+       "             * transferred with MIME type text/plain:\" errors on\n",
+       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
+       "             * to be part of the websocket stream */\n",
+       "            evt.data.type = \"image/png\";\n",
+       "\n",
+       "            /* Free the memory for the previous frames */\n",
+       "            if (fig.imageObj.src) {\n",
+       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
+       "                    fig.imageObj.src);\n",
+       "            }\n",
+       "\n",
+       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+       "                evt.data);\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
+       "            fig.imageObj.src = evt.data;\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        var msg = JSON.parse(evt.data);\n",
+       "        var msg_type = msg['type'];\n",
+       "\n",
+       "        // Call the  \"handle_{type}\" callback, which takes\n",
+       "        // the figure and JSON message as its only arguments.\n",
+       "        try {\n",
+       "            var callback = fig[\"handle_\" + msg_type];\n",
+       "        } catch (e) {\n",
+       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        if (callback) {\n",
+       "            try {\n",
+       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+       "                callback(fig, msg);\n",
+       "            } catch (e) {\n",
+       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
+       "            }\n",
+       "        }\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
+       "mpl.findpos = function(e) {\n",
+       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
+       "    var targ;\n",
+       "    if (!e)\n",
+       "        e = window.event;\n",
+       "    if (e.target)\n",
+       "        targ = e.target;\n",
+       "    else if (e.srcElement)\n",
+       "        targ = e.srcElement;\n",
+       "    if (targ.nodeType == 3) // defeat Safari bug\n",
+       "        targ = targ.parentNode;\n",
+       "\n",
+       "    // jQuery normalizes the pageX and pageY\n",
+       "    // pageX,Y are the mouse positions relative to the document\n",
+       "    // offset() returns the position of the element relative to the document\n",
+       "    var x = e.pageX - $(targ).offset().left;\n",
+       "    var y = e.pageY - $(targ).offset().top;\n",
+       "\n",
+       "    return {\"x\": x, \"y\": y};\n",
+       "};\n",
+       "\n",
+       "/*\n",
+       " * return a copy of an object with only non-object keys\n",
+       " * we need this to avoid circular references\n",
+       " * http://stackoverflow.com/a/24161582/3208463\n",
+       " */\n",
+       "function simpleKeys (original) {\n",
+       "  return Object.keys(original).reduce(function (obj, key) {\n",
+       "    if (typeof original[key] !== 'object')\n",
+       "        obj[key] = original[key]\n",
+       "    return obj;\n",
+       "  }, {});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
+       "    var canvas_pos = mpl.findpos(event)\n",
+       "\n",
+       "    if (name === 'button_press')\n",
+       "    {\n",
+       "        this.canvas.focus();\n",
+       "        this.canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    var x = canvas_pos.x * mpl.ratio;\n",
+       "    var y = canvas_pos.y * mpl.ratio;\n",
+       "\n",
+       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
+       "                             step: event.step,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "\n",
+       "    /* This prevents the web browser from automatically changing to\n",
+       "     * the text insertion cursor when the button is pressed.  We want\n",
+       "     * to control all of the cursor setting manually through the\n",
+       "     * 'cursor' event from matplotlib */\n",
+       "    event.preventDefault();\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    // Handle any extra behaviour associated with a key event\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.key_event = function(event, name) {\n",
+       "\n",
+       "    // Prevent repeat events\n",
+       "    if (name == 'key_press')\n",
+       "    {\n",
+       "        if (event.which === this._key)\n",
+       "            return;\n",
+       "        else\n",
+       "            this._key = event.which;\n",
+       "    }\n",
+       "    if (name == 'key_release')\n",
+       "        this._key = null;\n",
+       "\n",
+       "    var value = '';\n",
+       "    if (event.ctrlKey && event.which != 17)\n",
+       "        value += \"ctrl+\";\n",
+       "    if (event.altKey && event.which != 18)\n",
+       "        value += \"alt+\";\n",
+       "    if (event.shiftKey && event.which != 16)\n",
+       "        value += \"shift+\";\n",
+       "\n",
+       "    value += 'k';\n",
+       "    value += event.which.toString();\n",
+       "\n",
+       "    this._key_event_extra(event, name);\n",
+       "\n",
+       "    this.send_message(name, {key: value,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
+       "    if (name == 'download') {\n",
+       "        this.handle_save(this, null);\n",
+       "    } else {\n",
+       "        this.send_message(\"toolbar_button\", {name: name});\n",
+       "    }\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+       "    this.message.textContent = tooltip;\n",
+       "};\n",
+       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
+       "\n",
+       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+       "\n",
+       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
+       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
+       "    // object with the appropriate methods. Currently this is a non binary\n",
+       "    // socket, so there is still some room for performance tuning.\n",
+       "    var ws = {};\n",
+       "\n",
+       "    ws.close = function() {\n",
+       "        comm.close()\n",
+       "    };\n",
+       "    ws.send = function(m) {\n",
+       "        //console.log('sending', m);\n",
+       "        comm.send(m);\n",
+       "    };\n",
+       "    // Register the callback with on_msg.\n",
+       "    comm.on_msg(function(msg) {\n",
+       "        //console.log('receiving', msg['content']['data'], msg);\n",
+       "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
+       "        ws.onmessage(msg['content']['data'])\n",
+       "    });\n",
+       "    return ws;\n",
+       "}\n",
+       "\n",
+       "mpl.mpl_figure_comm = function(comm, msg) {\n",
+       "    // This is the function which gets called when the mpl process\n",
+       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+       "\n",
+       "    var id = msg.content.data.id;\n",
+       "    // Get hold of the div created by the display call when the Comm\n",
+       "    // socket was opened in Python.\n",
+       "    var element = $(\"#\" + id);\n",
+       "    var ws_proxy = comm_websocket_adapter(comm)\n",
+       "\n",
+       "    function ondownload(figure, format) {\n",
+       "        window.open(figure.imageObj.src);\n",
+       "    }\n",
+       "\n",
+       "    var fig = new mpl.figure(id, ws_proxy,\n",
+       "                           ondownload,\n",
+       "                           element.get(0));\n",
+       "\n",
+       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+       "    // web socket which is closed, not our websocket->open comm proxy.\n",
+       "    ws_proxy.onopen();\n",
+       "\n",
+       "    fig.parent_element = element.get(0);\n",
+       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+       "    if (!fig.cell_info) {\n",
+       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
+       "        return;\n",
+       "    }\n",
+       "\n",
+       "    var output_index = fig.cell_info[2]\n",
+       "    var cell = fig.cell_info[0];\n",
+       "\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+       "    var width = fig.canvas.width/mpl.ratio\n",
+       "    fig.root.unbind('remove')\n",
+       "\n",
+       "    // Update the output cell to use the data from the current canvas.\n",
+       "    fig.push_to_output();\n",
+       "    var dataURL = fig.canvas.toDataURL();\n",
+       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+       "    // the notebook keyboard shortcuts fail.\n",
+       "    IPython.keyboard_manager.enable()\n",
+       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
+       "    fig.close_ws(fig, msg);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+       "    fig.send_message('closing', msg);\n",
+       "    // fig.ws.close()\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+       "    // Turn the data on the canvas into data in the output cell.\n",
+       "    var width = this.canvas.width/mpl.ratio\n",
+       "    var dataURL = this.canvas.toDataURL();\n",
+       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Tell IPython that the notebook contents must change.\n",
+       "    IPython.notebook.set_dirty(true);\n",
+       "    this.send_message(\"ack\", {});\n",
+       "    var fig = this;\n",
+       "    // Wait a second, then push the new image to the DOM so\n",
+       "    // that it is saved nicely (might be nice to debounce this).\n",
+       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items){\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) { continue; };\n",
+       "\n",
+       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    // Add the status bar.\n",
+       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "\n",
+       "    // Add the close button to the window.\n",
+       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
+       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
+       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
+       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
+       "    buttongrp.append(button);\n",
+       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
+       "    titlebar.prepend(buttongrp);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(el){\n",
+       "    var fig = this\n",
+       "    el.on(\"remove\", function(){\n",
+       "\tfig.close_ws(fig, {});\n",
+       "    });\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
+       "    // this is important to make the div 'focusable\n",
+       "    el.attr('tabindex', 0)\n",
+       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
+       "    // off when our div gets focus\n",
+       "\n",
+       "    // location in version 3\n",
+       "    if (IPython.notebook.keyboard_manager) {\n",
+       "        IPython.notebook.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "    else {\n",
+       "        // location in version 2\n",
+       "        IPython.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    var manager = IPython.notebook.keyboard_manager;\n",
+       "    if (!manager)\n",
+       "        manager = IPython.keyboard_manager;\n",
+       "\n",
+       "    // Check for shift+enter\n",
+       "    if (event.shiftKey && event.which == 13) {\n",
+       "        this.canvas_div.blur();\n",
+       "        // select the cell after this one\n",
+       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+       "        IPython.notebook.select(index + 1);\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    fig.ondownload(fig, null);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.find_output_cell = function(html_output) {\n",
+       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+       "    // IPython event is triggered only after the cells have been serialised, which for\n",
+       "    // our purposes (turning an active figure into a static one), is too late.\n",
+       "    var cells = IPython.notebook.get_cells();\n",
+       "    var ncells = cells.length;\n",
+       "    for (var i=0; i<ncells; i++) {\n",
+       "        var cell = cells[i];\n",
+       "        if (cell.cell_type === 'code'){\n",
+       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
+       "                var data = cell.output_area.outputs[j];\n",
+       "                if (data.data) {\n",
+       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
+       "                    data = data.data;\n",
+       "                }\n",
+       "                if (data['text/html'] == html_output) {\n",
+       "                    return [cell, data, j];\n",
+       "                }\n",
+       "            }\n",
+       "        }\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "// Register the function which deals with the matplotlib target/channel.\n",
+       "// The kernel may be null if the page has been refreshed.\n",
+       "if (IPython.notebook.kernel != null) {\n",
+       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+       "}\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Javascript object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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\" width=\"639.999990463257\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/javascript": [
+       "/* Put everything inside the global mpl namespace */\n",
+       "window.mpl = {};\n",
+       "\n",
+       "\n",
+       "mpl.get_websocket_type = function() {\n",
+       "    if (typeof(WebSocket) !== 'undefined') {\n",
+       "        return WebSocket;\n",
+       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
+       "        return MozWebSocket;\n",
+       "    } else {\n",
+       "        alert('Your browser does not have WebSocket support.' +\n",
+       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
+       "              'Firefox 4 and 5 are also supported but you ' +\n",
+       "              'have to enable WebSockets in about:config.');\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
+       "    this.id = figure_id;\n",
+       "\n",
+       "    this.ws = websocket;\n",
+       "\n",
+       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
+       "\n",
+       "    if (!this.supports_binary) {\n",
+       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
+       "        if (warnings) {\n",
+       "            warnings.style.display = 'block';\n",
+       "            warnings.textContent = (\n",
+       "                \"This browser does not support binary websocket messages. \" +\n",
+       "                    \"Performance may be slow.\");\n",
+       "        }\n",
+       "    }\n",
+       "\n",
+       "    this.imageObj = new Image();\n",
+       "\n",
+       "    this.context = undefined;\n",
+       "    this.message = undefined;\n",
+       "    this.canvas = undefined;\n",
+       "    this.rubberband_canvas = undefined;\n",
+       "    this.rubberband_context = undefined;\n",
+       "    this.format_dropdown = undefined;\n",
+       "\n",
+       "    this.image_mode = 'full';\n",
+       "\n",
+       "    this.root = $('<div/>');\n",
+       "    this._root_extra_style(this.root)\n",
+       "    this.root.attr('style', 'display: inline-block');\n",
+       "\n",
+       "    $(parent_element).append(this.root);\n",
+       "\n",
+       "    this._init_header(this);\n",
+       "    this._init_canvas(this);\n",
+       "    this._init_toolbar(this);\n",
+       "\n",
+       "    var fig = this;\n",
+       "\n",
+       "    this.waiting = false;\n",
+       "\n",
+       "    this.ws.onopen =  function () {\n",
+       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
+       "            fig.send_message(\"send_image_mode\", {});\n",
+       "            if (mpl.ratio != 1) {\n",
+       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
+       "            }\n",
+       "            fig.send_message(\"refresh\", {});\n",
+       "        }\n",
+       "\n",
+       "    this.imageObj.onload = function() {\n",
+       "            if (fig.image_mode == 'full') {\n",
+       "                // Full images could contain transparency (where diff images\n",
+       "                // almost always do), so we need to clear the canvas so that\n",
+       "                // there is no ghosting.\n",
+       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "            }\n",
+       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
+       "        };\n",
+       "\n",
+       "    this.imageObj.onunload = function() {\n",
+       "        this.ws.close();\n",
+       "    }\n",
+       "\n",
+       "    this.ws.onmessage = this._make_on_message_function(this);\n",
+       "\n",
+       "    this.ondownload = ondownload;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_header = function() {\n",
+       "    var titlebar = $(\n",
+       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
+       "        'ui-helper-clearfix\"/>');\n",
+       "    var titletext = $(\n",
+       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
+       "        'text-align: center; padding: 3px;\"/>');\n",
+       "    titlebar.append(titletext)\n",
+       "    this.root.append(titlebar);\n",
+       "    this.header = titletext[0];\n",
+       "}\n",
+       "\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_canvas = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var canvas_div = $('<div/>');\n",
+       "\n",
+       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
+       "\n",
+       "    function canvas_keyboard_event(event) {\n",
+       "        return fig.key_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
+       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
+       "    this.canvas_div = canvas_div\n",
+       "    this._canvas_extra_style(canvas_div)\n",
+       "    this.root.append(canvas_div);\n",
+       "\n",
+       "    var canvas = $('<canvas/>');\n",
+       "    canvas.addClass('mpl-canvas');\n",
+       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
+       "\n",
+       "    this.canvas = canvas[0];\n",
+       "    this.context = canvas[0].getContext(\"2d\");\n",
+       "\n",
+       "    var backingStore = this.context.backingStorePixelRatio ||\n",
+       "\tthis.context.webkitBackingStorePixelRatio ||\n",
+       "\tthis.context.mozBackingStorePixelRatio ||\n",
+       "\tthis.context.msBackingStorePixelRatio ||\n",
+       "\tthis.context.oBackingStorePixelRatio ||\n",
+       "\tthis.context.backingStorePixelRatio || 1;\n",
+       "\n",
+       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
+       "\n",
+       "    var rubberband = $('<canvas/>');\n",
+       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
+       "\n",
+       "    var pass_mouse_events = true;\n",
+       "\n",
+       "    canvas_div.resizable({\n",
+       "        start: function(event, ui) {\n",
+       "            pass_mouse_events = false;\n",
+       "        },\n",
+       "        resize: function(event, ui) {\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "        stop: function(event, ui) {\n",
+       "            pass_mouse_events = true;\n",
+       "            fig.request_resize(ui.size.width, ui.size.height);\n",
+       "        },\n",
+       "    });\n",
+       "\n",
+       "    function mouse_event_fn(event) {\n",
+       "        if (pass_mouse_events)\n",
+       "            return fig.mouse_event(event, event['data']);\n",
+       "    }\n",
+       "\n",
+       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
+       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
+       "    // Throttle sequential mouse events to 1 every 20ms.\n",
+       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
+       "\n",
+       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
+       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
+       "\n",
+       "    canvas_div.on(\"wheel\", function (event) {\n",
+       "        event = event.originalEvent;\n",
+       "        event['data'] = 'scroll'\n",
+       "        if (event.deltaY < 0) {\n",
+       "            event.step = 1;\n",
+       "        } else {\n",
+       "            event.step = -1;\n",
+       "        }\n",
+       "        mouse_event_fn(event);\n",
+       "    });\n",
+       "\n",
+       "    canvas_div.append(canvas);\n",
+       "    canvas_div.append(rubberband);\n",
+       "\n",
+       "    this.rubberband = rubberband;\n",
+       "    this.rubberband_canvas = rubberband[0];\n",
+       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
+       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
+       "\n",
+       "    this._resize_canvas = function(width, height) {\n",
+       "        // Keep the size of the canvas, canvas container, and rubber band\n",
+       "        // canvas in synch.\n",
+       "        canvas_div.css('width', width)\n",
+       "        canvas_div.css('height', height)\n",
+       "\n",
+       "        canvas.attr('width', width * mpl.ratio);\n",
+       "        canvas.attr('height', height * mpl.ratio);\n",
+       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
+       "\n",
+       "        rubberband.attr('width', width);\n",
+       "        rubberband.attr('height', height);\n",
+       "    }\n",
+       "\n",
+       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
+       "    // upon first draw.\n",
+       "    this._resize_canvas(600, 600);\n",
+       "\n",
+       "    // Disable right mouse context menu.\n",
+       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
+       "        return false;\n",
+       "    });\n",
+       "\n",
+       "    function set_focus () {\n",
+       "        canvas.focus();\n",
+       "        canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    window.setTimeout(set_focus, 100);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) {\n",
+       "            // put a spacer in here.\n",
+       "            continue;\n",
+       "        }\n",
+       "        var button = $('<button/>');\n",
+       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
+       "                        'ui-button-icon-only');\n",
+       "        button.attr('role', 'button');\n",
+       "        button.attr('aria-disabled', 'false');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "\n",
+       "        var icon_img = $('<span/>');\n",
+       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
+       "        icon_img.addClass(image);\n",
+       "        icon_img.addClass('ui-corner-all');\n",
+       "\n",
+       "        var tooltip_span = $('<span/>');\n",
+       "        tooltip_span.addClass('ui-button-text');\n",
+       "        tooltip_span.html(tooltip);\n",
+       "\n",
+       "        button.append(icon_img);\n",
+       "        button.append(tooltip_span);\n",
+       "\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    var fmt_picker_span = $('<span/>');\n",
+       "\n",
+       "    var fmt_picker = $('<select/>');\n",
+       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
+       "    fmt_picker_span.append(fmt_picker);\n",
+       "    nav_element.append(fmt_picker_span);\n",
+       "    this.format_dropdown = fmt_picker[0];\n",
+       "\n",
+       "    for (var ind in mpl.extensions) {\n",
+       "        var fmt = mpl.extensions[ind];\n",
+       "        var option = $(\n",
+       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
+       "        fmt_picker.append(option)\n",
+       "    }\n",
+       "\n",
+       "    // Add hover states to the ui-buttons\n",
+       "    $( \".ui-button\" ).hover(\n",
+       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
+       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
+       "    );\n",
+       "\n",
+       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
+       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
+       "    // which will in turn request a refresh of the image.\n",
+       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_message = function(type, properties) {\n",
+       "    properties['type'] = type;\n",
+       "    properties['figure_id'] = this.id;\n",
+       "    this.ws.send(JSON.stringify(properties));\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.send_draw_message = function() {\n",
+       "    if (!this.waiting) {\n",
+       "        this.waiting = true;\n",
+       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    var format_dropdown = fig.format_dropdown;\n",
+       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
+       "    fig.ondownload(fig, format);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
+       "    var size = msg['size'];\n",
+       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
+       "        fig._resize_canvas(size[0], size[1]);\n",
+       "        fig.send_message(\"refresh\", {});\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
+       "    var x0 = msg['x0'] / mpl.ratio;\n",
+       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
+       "    var x1 = msg['x1'] / mpl.ratio;\n",
+       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
+       "    x0 = Math.floor(x0) + 0.5;\n",
+       "    y0 = Math.floor(y0) + 0.5;\n",
+       "    x1 = Math.floor(x1) + 0.5;\n",
+       "    y1 = Math.floor(y1) + 0.5;\n",
+       "    var min_x = Math.min(x0, x1);\n",
+       "    var min_y = Math.min(y0, y1);\n",
+       "    var width = Math.abs(x1 - x0);\n",
+       "    var height = Math.abs(y1 - y0);\n",
+       "\n",
+       "    fig.rubberband_context.clearRect(\n",
+       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
+       "\n",
+       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
+       "    // Updates the figure title.\n",
+       "    fig.header.textContent = msg['label'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
+       "    var cursor = msg['cursor'];\n",
+       "    switch(cursor)\n",
+       "    {\n",
+       "    case 0:\n",
+       "        cursor = 'pointer';\n",
+       "        break;\n",
+       "    case 1:\n",
+       "        cursor = 'default';\n",
+       "        break;\n",
+       "    case 2:\n",
+       "        cursor = 'crosshair';\n",
+       "        break;\n",
+       "    case 3:\n",
+       "        cursor = 'move';\n",
+       "        break;\n",
+       "    }\n",
+       "    fig.rubberband_canvas.style.cursor = cursor;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
+       "    fig.message.textContent = msg['message'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
+       "    // Request the server to send over a new figure.\n",
+       "    fig.send_draw_message();\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
+       "    fig.image_mode = msg['mode'];\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Called whenever the canvas gets updated.\n",
+       "    this.send_message(\"ack\", {});\n",
+       "}\n",
+       "\n",
+       "// A function to construct a web socket function for onmessage handling.\n",
+       "// Called in the figure constructor.\n",
+       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
+       "    return function socket_on_message(evt) {\n",
+       "        if (evt.data instanceof Blob) {\n",
+       "            /* FIXME: We get \"Resource interpreted as Image but\n",
+       "             * transferred with MIME type text/plain:\" errors on\n",
+       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
+       "             * to be part of the websocket stream */\n",
+       "            evt.data.type = \"image/png\";\n",
+       "\n",
+       "            /* Free the memory for the previous frames */\n",
+       "            if (fig.imageObj.src) {\n",
+       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
+       "                    fig.imageObj.src);\n",
+       "            }\n",
+       "\n",
+       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
+       "                evt.data);\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
+       "            fig.imageObj.src = evt.data;\n",
+       "            fig.updated_canvas_event();\n",
+       "            fig.waiting = false;\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        var msg = JSON.parse(evt.data);\n",
+       "        var msg_type = msg['type'];\n",
+       "\n",
+       "        // Call the  \"handle_{type}\" callback, which takes\n",
+       "        // the figure and JSON message as its only arguments.\n",
+       "        try {\n",
+       "            var callback = fig[\"handle_\" + msg_type];\n",
+       "        } catch (e) {\n",
+       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
+       "            return;\n",
+       "        }\n",
+       "\n",
+       "        if (callback) {\n",
+       "            try {\n",
+       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
+       "                callback(fig, msg);\n",
+       "            } catch (e) {\n",
+       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
+       "            }\n",
+       "        }\n",
+       "    };\n",
+       "}\n",
+       "\n",
+       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
+       "mpl.findpos = function(e) {\n",
+       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
+       "    var targ;\n",
+       "    if (!e)\n",
+       "        e = window.event;\n",
+       "    if (e.target)\n",
+       "        targ = e.target;\n",
+       "    else if (e.srcElement)\n",
+       "        targ = e.srcElement;\n",
+       "    if (targ.nodeType == 3) // defeat Safari bug\n",
+       "        targ = targ.parentNode;\n",
+       "\n",
+       "    // jQuery normalizes the pageX and pageY\n",
+       "    // pageX,Y are the mouse positions relative to the document\n",
+       "    // offset() returns the position of the element relative to the document\n",
+       "    var x = e.pageX - $(targ).offset().left;\n",
+       "    var y = e.pageY - $(targ).offset().top;\n",
+       "\n",
+       "    return {\"x\": x, \"y\": y};\n",
+       "};\n",
+       "\n",
+       "/*\n",
+       " * return a copy of an object with only non-object keys\n",
+       " * we need this to avoid circular references\n",
+       " * http://stackoverflow.com/a/24161582/3208463\n",
+       " */\n",
+       "function simpleKeys (original) {\n",
+       "  return Object.keys(original).reduce(function (obj, key) {\n",
+       "    if (typeof original[key] !== 'object')\n",
+       "        obj[key] = original[key]\n",
+       "    return obj;\n",
+       "  }, {});\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
+       "    var canvas_pos = mpl.findpos(event)\n",
+       "\n",
+       "    if (name === 'button_press')\n",
+       "    {\n",
+       "        this.canvas.focus();\n",
+       "        this.canvas_div.focus();\n",
+       "    }\n",
+       "\n",
+       "    var x = canvas_pos.x * mpl.ratio;\n",
+       "    var y = canvas_pos.y * mpl.ratio;\n",
+       "\n",
+       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
+       "                             step: event.step,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "\n",
+       "    /* This prevents the web browser from automatically changing to\n",
+       "     * the text insertion cursor when the button is pressed.  We want\n",
+       "     * to control all of the cursor setting manually through the\n",
+       "     * 'cursor' event from matplotlib */\n",
+       "    event.preventDefault();\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    // Handle any extra behaviour associated with a key event\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.key_event = function(event, name) {\n",
+       "\n",
+       "    // Prevent repeat events\n",
+       "    if (name == 'key_press')\n",
+       "    {\n",
+       "        if (event.which === this._key)\n",
+       "            return;\n",
+       "        else\n",
+       "            this._key = event.which;\n",
+       "    }\n",
+       "    if (name == 'key_release')\n",
+       "        this._key = null;\n",
+       "\n",
+       "    var value = '';\n",
+       "    if (event.ctrlKey && event.which != 17)\n",
+       "        value += \"ctrl+\";\n",
+       "    if (event.altKey && event.which != 18)\n",
+       "        value += \"alt+\";\n",
+       "    if (event.shiftKey && event.which != 16)\n",
+       "        value += \"shift+\";\n",
+       "\n",
+       "    value += 'k';\n",
+       "    value += event.which.toString();\n",
+       "\n",
+       "    this._key_event_extra(event, name);\n",
+       "\n",
+       "    this.send_message(name, {key: value,\n",
+       "                             guiEvent: simpleKeys(event)});\n",
+       "    return false;\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
+       "    if (name == 'download') {\n",
+       "        this.handle_save(this, null);\n",
+       "    } else {\n",
+       "        this.send_message(\"toolbar_button\", {name: name});\n",
+       "    }\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
+       "    this.message.textContent = tooltip;\n",
+       "};\n",
+       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
+       "\n",
+       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
+       "\n",
+       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
+       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
+       "    // object with the appropriate methods. Currently this is a non binary\n",
+       "    // socket, so there is still some room for performance tuning.\n",
+       "    var ws = {};\n",
+       "\n",
+       "    ws.close = function() {\n",
+       "        comm.close()\n",
+       "    };\n",
+       "    ws.send = function(m) {\n",
+       "        //console.log('sending', m);\n",
+       "        comm.send(m);\n",
+       "    };\n",
+       "    // Register the callback with on_msg.\n",
+       "    comm.on_msg(function(msg) {\n",
+       "        //console.log('receiving', msg['content']['data'], msg);\n",
+       "        // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
+       "        ws.onmessage(msg['content']['data'])\n",
+       "    });\n",
+       "    return ws;\n",
+       "}\n",
+       "\n",
+       "mpl.mpl_figure_comm = function(comm, msg) {\n",
+       "    // This is the function which gets called when the mpl process\n",
+       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
+       "\n",
+       "    var id = msg.content.data.id;\n",
+       "    // Get hold of the div created by the display call when the Comm\n",
+       "    // socket was opened in Python.\n",
+       "    var element = $(\"#\" + id);\n",
+       "    var ws_proxy = comm_websocket_adapter(comm)\n",
+       "\n",
+       "    function ondownload(figure, format) {\n",
+       "        window.open(figure.imageObj.src);\n",
+       "    }\n",
+       "\n",
+       "    var fig = new mpl.figure(id, ws_proxy,\n",
+       "                           ondownload,\n",
+       "                           element.get(0));\n",
+       "\n",
+       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
+       "    // web socket which is closed, not our websocket->open comm proxy.\n",
+       "    ws_proxy.onopen();\n",
+       "\n",
+       "    fig.parent_element = element.get(0);\n",
+       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
+       "    if (!fig.cell_info) {\n",
+       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
+       "        return;\n",
+       "    }\n",
+       "\n",
+       "    var output_index = fig.cell_info[2]\n",
+       "    var cell = fig.cell_info[0];\n",
+       "\n",
+       "};\n",
+       "\n",
+       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
+       "    var width = fig.canvas.width/mpl.ratio\n",
+       "    fig.root.unbind('remove')\n",
+       "\n",
+       "    // Update the output cell to use the data from the current canvas.\n",
+       "    fig.push_to_output();\n",
+       "    var dataURL = fig.canvas.toDataURL();\n",
+       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
+       "    // the notebook keyboard shortcuts fail.\n",
+       "    IPython.keyboard_manager.enable()\n",
+       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
+       "    fig.close_ws(fig, msg);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
+       "    fig.send_message('closing', msg);\n",
+       "    // fig.ws.close()\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
+       "    // Turn the data on the canvas into data in the output cell.\n",
+       "    var width = this.canvas.width/mpl.ratio\n",
+       "    var dataURL = this.canvas.toDataURL();\n",
+       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.updated_canvas_event = function() {\n",
+       "    // Tell IPython that the notebook contents must change.\n",
+       "    IPython.notebook.set_dirty(true);\n",
+       "    this.send_message(\"ack\", {});\n",
+       "    var fig = this;\n",
+       "    // Wait a second, then push the new image to the DOM so\n",
+       "    // that it is saved nicely (might be nice to debounce this).\n",
+       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._init_toolbar = function() {\n",
+       "    var fig = this;\n",
+       "\n",
+       "    var nav_element = $('<div/>')\n",
+       "    nav_element.attr('style', 'width: 100%');\n",
+       "    this.root.append(nav_element);\n",
+       "\n",
+       "    // Define a callback function for later on.\n",
+       "    function toolbar_event(event) {\n",
+       "        return fig.toolbar_button_onclick(event['data']);\n",
+       "    }\n",
+       "    function toolbar_mouse_event(event) {\n",
+       "        return fig.toolbar_button_onmouseover(event['data']);\n",
+       "    }\n",
+       "\n",
+       "    for(var toolbar_ind in mpl.toolbar_items){\n",
+       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
+       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
+       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
+       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
+       "\n",
+       "        if (!name) { continue; };\n",
+       "\n",
+       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
+       "        button.click(method_name, toolbar_event);\n",
+       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
+       "        nav_element.append(button);\n",
+       "    }\n",
+       "\n",
+       "    // Add the status bar.\n",
+       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
+       "    nav_element.append(status_bar);\n",
+       "    this.message = status_bar[0];\n",
+       "\n",
+       "    // Add the close button to the window.\n",
+       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
+       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
+       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
+       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
+       "    buttongrp.append(button);\n",
+       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
+       "    titlebar.prepend(buttongrp);\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._root_extra_style = function(el){\n",
+       "    var fig = this\n",
+       "    el.on(\"remove\", function(){\n",
+       "\tfig.close_ws(fig, {});\n",
+       "    });\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
+       "    // this is important to make the div 'focusable\n",
+       "    el.attr('tabindex', 0)\n",
+       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
+       "    // off when our div gets focus\n",
+       "\n",
+       "    // location in version 3\n",
+       "    if (IPython.notebook.keyboard_manager) {\n",
+       "        IPython.notebook.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "    else {\n",
+       "        // location in version 2\n",
+       "        IPython.keyboard_manager.register_events(el);\n",
+       "    }\n",
+       "\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
+       "    var manager = IPython.notebook.keyboard_manager;\n",
+       "    if (!manager)\n",
+       "        manager = IPython.keyboard_manager;\n",
+       "\n",
+       "    // Check for shift+enter\n",
+       "    if (event.shiftKey && event.which == 13) {\n",
+       "        this.canvas_div.blur();\n",
+       "        // select the cell after this one\n",
+       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
+       "        IPython.notebook.select(index + 1);\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
+       "    fig.ondownload(fig, null);\n",
+       "}\n",
+       "\n",
+       "\n",
+       "mpl.find_output_cell = function(html_output) {\n",
+       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
+       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
+       "    // IPython event is triggered only after the cells have been serialised, which for\n",
+       "    // our purposes (turning an active figure into a static one), is too late.\n",
+       "    var cells = IPython.notebook.get_cells();\n",
+       "    var ncells = cells.length;\n",
+       "    for (var i=0; i<ncells; i++) {\n",
+       "        var cell = cells[i];\n",
+       "        if (cell.cell_type === 'code'){\n",
+       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
+       "                var data = cell.output_area.outputs[j];\n",
+       "                if (data.data) {\n",
+       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
+       "                    data = data.data;\n",
+       "                }\n",
+       "                if (data['text/html'] == html_output) {\n",
+       "                    return [cell, data, j];\n",
+       "                }\n",
+       "            }\n",
+       "        }\n",
+       "    }\n",
+       "}\n",
+       "\n",
+       "// Register the function which deals with the matplotlib target/channel.\n",
+       "// The kernel may be null if the page has been refreshed.\n",
+       "if (IPython.notebook.kernel != null) {\n",
+       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
+       "}\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Javascript object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/html": [
+       "<img src=\"data:image/png;base64,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9dY9depU7rjjDn777Tc++ugj9tlnn7TXOh11MgGQdrOmpED/NgK6MT9cQRMAKTGUZWoEgkjg7GfH83thUUab1rp+DZ44fc8y1eGaa67hrbfe4ocffgit/SstXryYFi1aMGjQIF588cUy5ZvMTemokwmAZCyUZff64gFwBcANK6BCuT9fKcssbNUxAtlJIJcFwPz580Mu/2HDhnHuueduB7hjx460bt2aDz/8kFtuuYUXXniB6dOn8+abb3LUUUeVaIzRo0fTv3//uMbq27cvn3322V+u81KnV155hVNPPZVp06ZRvXp1dBT8ww8/TPv27eOW615gAsAzquy/0FcBcH0hVKqc/Y22GhoBI2AEkiDw1FNPcdZZZ4Xc/W3btt2W09atWykoKAh5AB5//HG++eab0GeBgwcP5pJLLilVABQVFTFnzpy4tapRowatWv013spLne6++24mTJhAv379QuUMHTo0JExiCYqSKmICIK6JcucCXwTAm+fBxJfh2oVQpXruNN5qagSMgBEoAwFF/mvdf+3atWhCdtOYMWPo3bs37733Hoceeui23++3335xBUAZqrHdLYnWSTdLDEisKI7BazIB4JVUeq/rBQwBtgBvAJ52ofBFALxzIfzwPFw1B/KceID0tt1KMwJGwAikjcCQIUNC3/l/9913dO/ePVTupk2bQpP/ihUrmDhxIlWqVEmrAEi0TqrcKaecQv369XnggQc8szMB4BlVWi9sBiwFioFPgcOAuBE2vgiAdy+FCU/BFTOhZv20NtoKMwJGwAikm8CMGTPo0qULWu+/8cYbUfT9vffey+TJk9FGPJ07d96uSunwACRap5tuuolRo0ah2INIL0Y8liYA4hHK/N8/BgYC6+JVxRcB8P6V8O0jcNkvUKdpvCLt70bACBiBnCfwwQcfcPXVVzNlyhRq167NgAEDQssCsQLq0iEABNRrnW699VZGjBgRClTMz0/Ma2sCwL+uOxQ4AmgNdAN+jMi6A/As0ADQB/ZnAJM9FK0w0kHAeR6uxRcBMOpaGDsMLplkmwF5gW7XGAEjUK4IpEsAeIEqkaIYhbJM/srfBIAXyt6u6QPMBMYA+j4kUgB8AjwHPONM6FcC+mBVvqWHo7L/ALgTaOHcI1GxxksVfBEAo2+EMffBP7+H+u28FGvXGAEjYAQCT0DLA0888QRLliwJeQm0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\" width=\"639.999990463257\">"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "plot_differential_ratio(formula1='C12H60O25N5', density1=1, formula2='C21H27NO3', density2=1)\n",
+    "plot_differential_delta_beta(formula1='C12H60O25N5', density1=1, formula2='C21H27NO3', density2=1)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "To activate the slider bars that selects the densities for two materials call the sweep_densities function."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "06f26b5515bd4ab58c7d5a5b1a3a0158",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "aW50ZXJhY3RpdmUoY2hpbGRyZW49KEZsb2F0U2xpZGVyKHZhbHVlPTEuMDA1LCBkZXNjcmlwdGlvbj11J0RlbnNpdHkxJywgbWF4PTIuMCwgbWluPTAuMDEpLCBGbG9hdFNsaWRlcih2YWx1ZT3igKY=\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "sweep_densities(formula2='C21H27NO3I3K', density2=(0.5, 2, 0.01), func=plot_differential_ratio)\n",
+    "# sweep_densities(formula2='C21H27NO3I3K', density2=(0.5, 2, 0.01), func=plot_differential_delta_beta)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Your own code"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "255d599f4a144e40842e2817443fc261",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "aW50ZXJhY3RpdmUoY2hpbGRyZW49KEZsb2F0U2xpZGVyKHZhbHVlPTEuMDEsIGRlc2NyaXB0aW9uPXUnRGVuc2l0eTEnLCBtYXg9MS4wMiwgbWluPTEuMCwgc3RlcD0wLjAxKSwgRmxvYXRTbGnigKY=\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# plot_ratio(density=(0.5, 2), formula='KI3')\n",
+    "# plot_delta_beta(density=(1, 5, 0.1), formula='KI3')\n",
+    "# sweep_density(density=(0.5, 2, 0.1), formula='KI3', func=plot_ratio)\n",
+    "# sweep_density(density=(0.5, 2, 0.01), formula='C21H27NO3', func=plot_delta_beta)\n",
+    "# plot_differential_ratio(formula1='C12H60O25N5', density1=1, formula2='C21H27NO3', density2=1)\n",
+    "# plot_differential_delta_beta(formula1='C12H60O25N5', density1=1, formula2='C21H27NO3', density2=1)\n",
+    "# sweep_densities(formula2='C21H27NO3I3K', density2=(0.5, 2, 0.01), func=plot_differential_ratio)\n",
+    "# sweep_densities(formula2='C21H27NO3I3K', density2=(0.5, 2, 0.01), func=plot_differential_delta_beta)\n",
+    "sweep_densities(density1=(1.0, 1.02, 0.01), density2=(0.5, 1.5, 0.01), func=plot_differential_ratio)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 2",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.15"
+  },
+  "toc": {
+   "base_numbering": 1,
+   "nav_menu": {},
+   "number_sections": true,
+   "sideBar": true,
+   "skip_h1_title": false,
+   "title_cell": "Table of Contents",
+   "title_sidebar": "Contents",
+   "toc_cell": true,
+   "toc_position": {
+    "height": "calc(100% - 180px)",
+    "left": "10px",
+    "top": "150px",
+    "width": "165px"
+   },
+   "toc_section_display": true,
+   "toc_window_display": true
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/Refractive index calculator.ipynb b/Refractive index calculator.ipynb
index d05d1e1..fbdcc98 100644
--- a/Refractive index calculator.ipynb	
+++ b/Refractive index calculator.ipynb	
@@ -84,7 +84,7 @@
     "\n",
     "[3]\tM. A. Beltran, D. M. Paganin, K. Uesugi et al., “2D and 3D X-ray phase retrieval of multi-material objects using a single defocus distance”, Optics Express, vol. 18, pp. 6423-6436, 2010.\n",
     "\n",
-    "[4]  C. Rossides, S. Pender, and P. Schneider. “Phase-contrast imaging in practice: Protocol design flowchart for X-ray propagation-based phase-contrast imaging”. In preparation (2020)."
+    "[4]  C. Rossides, S. Pender, and P. Schneider. “Phase-contrast imaging in practice: Protocol design flowchart for X-ray propagation-based phase-contrast imaging”. Submitted (2021)."
    ]
   },
   {
@@ -96,7 +96,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -120,7 +120,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -4408,18 +4408,18 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "dd39134294fe4527b12cea4fb20f885b",
+       "model_id": "255d599f4a144e40842e2817443fc261",
        "version_major": 2,
        "version_minor": 0
       },
       "text/plain": [
-       "aW50ZXJhY3RpdmUoY2hpbGRyZW49KEZsb2F0U2xpZGVyKHZhbHVlPTEuMDA1LCBkZXNjcmlwdGlvbj11J0RlbnNpdHkxJywgbWF4PTIuMCwgbWluPTAuMDEpLCBGbG9hdFNsaWRlcih2YWx1ZT3igKY=\n"
+       "aW50ZXJhY3RpdmUoY2hpbGRyZW49KEZsb2F0U2xpZGVyKHZhbHVlPTEuMDEsIGRlc2NyaXB0aW9uPXUnRGVuc2l0eTEnLCBtYXg9MS4wMiwgbWluPTEuMCwgc3RlcD0wLjAxKSwgRmxvYXRTbGnigKY=\n"
       ]
      },
      "metadata": {},
@@ -4435,7 +4435,7 @@
     "# plot_differential_delta_beta(formula1='C12H60O25N5', density1=1, formula2='C21H27NO3', density2=1)\n",
     "# sweep_densities(formula2='C21H27NO3I3K', density2=(0.5, 2, 0.01), func=plot_differential_ratio)\n",
     "# sweep_densities(formula2='C21H27NO3I3K', density2=(0.5, 2, 0.01), func=plot_differential_delta_beta)\n",
-    "sweep_densities(formula1='C12H585N5', formula2='C21H27NO3', density2=(0.5, 2, 0.01), func=plot_differential_ratio)"
+    "sweep_densities(density1=(1.0, 1.02, 0.01), density2=(0.5, 1.5, 0.01), func=plot_differential_ratio)"
    ]
   },
   {
-- 
GitLab