Format: application/octet-stream
⬇ Download File (613.7 KB)
   1  {
   2   "cells": [
   3    {
   4     "cell_type": "code",
   5     "execution_count": 2,
   6     "id": "75a7336a",
   7     "metadata": {},
   8     "outputs": [],
   9     "source": [
  10      "%matplotlib notebook\n",
  11      "import numpy as np\n",
  12      "import pandas as pd\n",
  13      "import seaborn as sns\n",
  14      "import matplotlib.pyplot as plt\n",
  15      "\n",
  16      "from sklearn.model_selection import train_test_split\n",
  17      "from sklearn.neighbors import KNeighborsClassifier\n",
  18      "\n",
  19      "#np.set_printoptions(precision=2)\n",
  20      "\n",
  21      "\n",
  22      "fruits = pd.read_table('Source/readonly/fruit_data_with_colors.txt')\n",
  23      "\n",
  24      "feature_names_fruits = ['height', 'width', 'mass', 'color_score']"
  25     ]
  26    },
  27    {
  28     "cell_type": "code",
  29     "execution_count": 3,
  30     "id": "8615abad",
  31     "metadata": {},
  32     "outputs": [],
  33     "source": [
  34      "features= fruits[feature_names_fruits]\n",
  35      "label= fruits.fruit_label"
  36     ]
  37    },
  38    {
  39     "cell_type": "code",
  40     "execution_count": 4,
  41     "id": "9acc60c5",
  42     "metadata": {},
  43     "outputs": [],
  44     "source": [
  45      "target_names_fruits = ['apple', 'mandarin', 'orange', 'lemon']"
  46     ]
  47    },
  48    {
  49     "cell_type": "code",
  50     "execution_count": 5,
  51     "id": "2dbdcb8c",
  52     "metadata": {},
  53     "outputs": [],
  54     "source": [
  55      "X_train, X_test, y_train, y_test = train_test_split(features, label, random_state=0)"
  56     ]
  57    },
  58    {
  59     "cell_type": "code",
  60     "execution_count": 6,
  61     "id": "9f3b8682",
  62     "metadata": {},
  63     "outputs": [],
  64     "source": [
  65      "from sklearn.preprocessing import MinMaxScaler\n",
  66      "scaler = MinMaxScaler()\n",
  67      "X_train_scaled = scaler.fit_transform(X_train)\n",
  68      "X_test_scaled = scaler.transform(X_test)"
  69     ]
  70    },
  71    {
  72     "cell_type": "code",
  73     "execution_count": 7,
  74     "id": "5a9dce41",
  75     "metadata": {},
  76     "outputs": [
  77      {
  78       "name": "stdout",
  79       "output_type": "stream",
  80       "text": [
  81        "train 0.9545454545454546\n",
  82        "test 1.0\n",
  83        "orange\n"
  84       ]
  85      }
  86     ],
  87     "source": [
  88      "knn = KNeighborsClassifier(n_neighbors = 5)\n",
  89      "knn.fit(X_train_scaled, y_train)\n",
  90      "\n",
  91      "\n",
  92      "print('train',knn.score(X_train_scaled, y_train))\n",
  93      "print('test',knn.score(X_test_scaled, y_test))\n",
  94      "\n",
  95      "example_fruit = [[5.5, 2.2, 10, 0.70]]\n",
  96      "\n",
  97      "\n",
  98      "print(target_names_fruits[knn.predict(example_fruit)[0]-1])"
  99     ]
 100    },
 101    {
 102     "cell_type": "code",
 103     "execution_count": null,
 104     "id": "0f905335",
 105     "metadata": {},
 106     "outputs": [],
 107     "source": []
 108    },
 109    {
 110     "cell_type": "code",
 111     "execution_count": null,
 112     "id": "6f688553",
 113     "metadata": {},
 114     "outputs": [],
 115     "source": []
 116    },
 117    {
 118     "cell_type": "code",
 119     "execution_count": null,
 120     "id": "24fd6553",
 121     "metadata": {},
 122     "outputs": [],
 123     "source": []
 124    },
 125    {
 126     "cell_type": "code",
 127     "execution_count": 8,
 128     "id": "d8e0d391",
 129     "metadata": {},
 130     "outputs": [],
 131     "source": [
 132      "from sklearn.datasets import make_classification, make_blobs\n",
 133      "from matplotlib.colors import ListedColormap\n",
 134      "from sklearn.datasets import load_breast_cancer\n",
 135      "from adspy_shared_utilities import load_crime_dataset"
 136     ]
 137    },
 138    {
 139     "cell_type": "code",
 140     "execution_count": 9,
 141     "id": "bb170936",
 142     "metadata": {},
 143     "outputs": [],
 144     "source": [
 145      "cmap_bold = ListedColormap(['#FFFF00', '#00FF00', '#0000FF','#000000'])"
 146     ]
 147    },
 148    {
 149     "cell_type": "code",
 150     "execution_count": 10,
 151     "id": "520aaa3b",
 152     "metadata": {},
 153     "outputs": [
 154      {
 155       "data": {
 156        "application/javascript": [
 157         "/* Put everything inside the global mpl namespace */\n",
 158         "/* global mpl */\n",
 159         "window.mpl = {};\n",
 160         "\n",
 161         "mpl.get_websocket_type = function () {\n",
 162         "    if (typeof WebSocket !== 'undefined') {\n",
 163         "        return WebSocket;\n",
 164         "    } else if (typeof MozWebSocket !== 'undefined') {\n",
 165         "        return MozWebSocket;\n",
 166         "    } else {\n",
 167         "        alert(\n",
 168         "            'Your browser does not have WebSocket support. ' +\n",
 169         "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
 170         "                'Firefox 4 and 5 are also supported but you ' +\n",
 171         "                'have to enable WebSockets in about:config.'\n",
 172         "        );\n",
 173         "    }\n",
 174         "};\n",
 175         "\n",
 176         "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
 177         "    this.id = figure_id;\n",
 178         "\n",
 179         "    this.ws = websocket;\n",
 180         "\n",
 181         "    this.supports_binary = this.ws.binaryType !== undefined;\n",
 182         "\n",
 183         "    if (!this.supports_binary) {\n",
 184         "        var warnings = document.getElementById('mpl-warnings');\n",
 185         "        if (warnings) {\n",
 186         "            warnings.style.display = 'block';\n",
 187         "            warnings.textContent =\n",
 188         "                'This browser does not support binary websocket messages. ' +\n",
 189         "                'Performance may be slow.';\n",
 190         "        }\n",
 191         "    }\n",
 192         "\n",
 193         "    this.imageObj = new Image();\n",
 194         "\n",
 195         "    this.context = undefined;\n",
 196         "    this.message = undefined;\n",
 197         "    this.canvas = undefined;\n",
 198         "    this.rubberband_canvas = undefined;\n",
 199         "    this.rubberband_context = undefined;\n",
 200         "    this.format_dropdown = undefined;\n",
 201         "\n",
 202         "    this.image_mode = 'full';\n",
 203         "\n",
 204         "    this.root = document.createElement('div');\n",
 205         "    this.root.setAttribute('style', 'display: inline-block');\n",
 206         "    this._root_extra_style(this.root);\n",
 207         "\n",
 208         "    parent_element.appendChild(this.root);\n",
 209         "\n",
 210         "    this._init_header(this);\n",
 211         "    this._init_canvas(this);\n",
 212         "    this._init_toolbar(this);\n",
 213         "\n",
 214         "    var fig = this;\n",
 215         "\n",
 216         "    this.waiting = false;\n",
 217         "\n",
 218         "    this.ws.onopen = function () {\n",
 219         "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
 220         "        fig.send_message('send_image_mode', {});\n",
 221         "        if (fig.ratio !== 1) {\n",
 222         "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
 223         "        }\n",
 224         "        fig.send_message('refresh', {});\n",
 225         "    };\n",
 226         "\n",
 227         "    this.imageObj.onload = function () {\n",
 228         "        if (fig.image_mode === 'full') {\n",
 229         "            // Full images could contain transparency (where diff images\n",
 230         "            // almost always do), so we need to clear the canvas so that\n",
 231         "            // there is no ghosting.\n",
 232         "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
 233         "        }\n",
 234         "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
 235         "    };\n",
 236         "\n",
 237         "    this.imageObj.onunload = function () {\n",
 238         "        fig.ws.close();\n",
 239         "    };\n",
 240         "\n",
 241         "    this.ws.onmessage = this._make_on_message_function(this);\n",
 242         "\n",
 243         "    this.ondownload = ondownload;\n",
 244         "};\n",
 245         "\n",
 246         "mpl.figure.prototype._init_header = function () {\n",
 247         "    var titlebar = document.createElement('div');\n",
 248         "    titlebar.classList =\n",
 249         "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
 250         "    var titletext = document.createElement('div');\n",
 251         "    titletext.classList = 'ui-dialog-title';\n",
 252         "    titletext.setAttribute(\n",
 253         "        'style',\n",
 254         "        'width: 100%; text-align: center; padding: 3px;'\n",
 255         "    );\n",
 256         "    titlebar.appendChild(titletext);\n",
 257         "    this.root.appendChild(titlebar);\n",
 258         "    this.header = titletext;\n",
 259         "};\n",
 260         "\n",
 261         "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
 262         "\n",
 263         "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
 264         "\n",
 265         "mpl.figure.prototype._init_canvas = function () {\n",
 266         "    var fig = this;\n",
 267         "\n",
 268         "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
 269         "    canvas_div.setAttribute(\n",
 270         "        'style',\n",
 271         "        'border: 1px solid #ddd;' +\n",
 272         "            'box-sizing: content-box;' +\n",
 273         "            'clear: both;' +\n",
 274         "            'min-height: 1px;' +\n",
 275         "            'min-width: 1px;' +\n",
 276         "            'outline: 0;' +\n",
 277         "            'overflow: hidden;' +\n",
 278         "            'position: relative;' +\n",
 279         "            'resize: both;'\n",
 280         "    );\n",
 281         "\n",
 282         "    function on_keyboard_event_closure(name) {\n",
 283         "        return function (event) {\n",
 284         "            return fig.key_event(event, name);\n",
 285         "        };\n",
 286         "    }\n",
 287         "\n",
 288         "    canvas_div.addEventListener(\n",
 289         "        'keydown',\n",
 290         "        on_keyboard_event_closure('key_press')\n",
 291         "    );\n",
 292         "    canvas_div.addEventListener(\n",
 293         "        'keyup',\n",
 294         "        on_keyboard_event_closure('key_release')\n",
 295         "    );\n",
 296         "\n",
 297         "    this._canvas_extra_style(canvas_div);\n",
 298         "    this.root.appendChild(canvas_div);\n",
 299         "\n",
 300         "    var canvas = (this.canvas = document.createElement('canvas'));\n",
 301         "    canvas.classList.add('mpl-canvas');\n",
 302         "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
 303         "\n",
 304         "    this.context = canvas.getContext('2d');\n",
 305         "\n",
 306         "    var backingStore =\n",
 307         "        this.context.backingStorePixelRatio ||\n",
 308         "        this.context.webkitBackingStorePixelRatio ||\n",
 309         "        this.context.mozBackingStorePixelRatio ||\n",
 310         "        this.context.msBackingStorePixelRatio ||\n",
 311         "        this.context.oBackingStorePixelRatio ||\n",
 312         "        this.context.backingStorePixelRatio ||\n",
 313         "        1;\n",
 314         "\n",
 315         "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
 316         "\n",
 317         "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
 318         "        'canvas'\n",
 319         "    ));\n",
 320         "    rubberband_canvas.setAttribute(\n",
 321         "        'style',\n",
 322         "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
 323         "    );\n",
 324         "\n",
 325         "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
 326         "    if (this.ResizeObserver === undefined) {\n",
 327         "        if (window.ResizeObserver !== undefined) {\n",
 328         "            this.ResizeObserver = window.ResizeObserver;\n",
 329         "        } else {\n",
 330         "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
 331         "            this.ResizeObserver = obs.ResizeObserver;\n",
 332         "        }\n",
 333         "    }\n",
 334         "\n",
 335         "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
 336         "        var nentries = entries.length;\n",
 337         "        for (var i = 0; i < nentries; i++) {\n",
 338         "            var entry = entries[i];\n",
 339         "            var width, height;\n",
 340         "            if (entry.contentBoxSize) {\n",
 341         "                if (entry.contentBoxSize instanceof Array) {\n",
 342         "                    // Chrome 84 implements new version of spec.\n",
 343         "                    width = entry.contentBoxSize[0].inlineSize;\n",
 344         "                    height = entry.contentBoxSize[0].blockSize;\n",
 345         "                } else {\n",
 346         "                    // Firefox implements old version of spec.\n",
 347         "                    width = entry.contentBoxSize.inlineSize;\n",
 348         "                    height = entry.contentBoxSize.blockSize;\n",
 349         "                }\n",
 350         "            } else {\n",
 351         "                // Chrome <84 implements even older version of spec.\n",
 352         "                width = entry.contentRect.width;\n",
 353         "                height = entry.contentRect.height;\n",
 354         "            }\n",
 355         "\n",
 356         "            // Keep the size of the canvas and rubber band canvas in sync with\n",
 357         "            // the canvas container.\n",
 358         "            if (entry.devicePixelContentBoxSize) {\n",
 359         "                // Chrome 84 implements new version of spec.\n",
 360         "                canvas.setAttribute(\n",
 361         "                    'width',\n",
 362         "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
 363         "                );\n",
 364         "                canvas.setAttribute(\n",
 365         "                    'height',\n",
 366         "                    entry.devicePixelContentBoxSize[0].blockSize\n",
 367         "                );\n",
 368         "            } else {\n",
 369         "                canvas.setAttribute('width', width * fig.ratio);\n",
 370         "                canvas.setAttribute('height', height * fig.ratio);\n",
 371         "            }\n",
 372         "            canvas.setAttribute(\n",
 373         "                'style',\n",
 374         "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
 375         "            );\n",
 376         "\n",
 377         "            rubberband_canvas.setAttribute('width', width);\n",
 378         "            rubberband_canvas.setAttribute('height', height);\n",
 379         "\n",
 380         "            // And update the size in Python. We ignore the initial 0/0 size\n",
 381         "            // that occurs as the element is placed into the DOM, which should\n",
 382         "            // otherwise not happen due to the minimum size styling.\n",
 383         "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
 384         "                fig.request_resize(width, height);\n",
 385         "            }\n",
 386         "        }\n",
 387         "    });\n",
 388         "    this.resizeObserverInstance.observe(canvas_div);\n",
 389         "\n",
 390         "    function on_mouse_event_closure(name) {\n",
 391         "        return function (event) {\n",
 392         "            return fig.mouse_event(event, name);\n",
 393         "        };\n",
 394         "    }\n",
 395         "\n",
 396         "    rubberband_canvas.addEventListener(\n",
 397         "        'mousedown',\n",
 398         "        on_mouse_event_closure('button_press')\n",
 399         "    );\n",
 400         "    rubberband_canvas.addEventListener(\n",
 401         "        'mouseup',\n",
 402         "        on_mouse_event_closure('button_release')\n",
 403         "    );\n",
 404         "    // Throttle sequential mouse events to 1 every 20ms.\n",
 405         "    rubberband_canvas.addEventListener(\n",
 406         "        'mousemove',\n",
 407         "        on_mouse_event_closure('motion_notify')\n",
 408         "    );\n",
 409         "\n",
 410         "    rubberband_canvas.addEventListener(\n",
 411         "        'mouseenter',\n",
 412         "        on_mouse_event_closure('figure_enter')\n",
 413         "    );\n",
 414         "    rubberband_canvas.addEventListener(\n",
 415         "        'mouseleave',\n",
 416         "        on_mouse_event_closure('figure_leave')\n",
 417         "    );\n",
 418         "\n",
 419         "    canvas_div.addEventListener('wheel', function (event) {\n",
 420         "        if (event.deltaY < 0) {\n",
 421         "            event.step = 1;\n",
 422         "        } else {\n",
 423         "            event.step = -1;\n",
 424         "        }\n",
 425         "        on_mouse_event_closure('scroll')(event);\n",
 426         "    });\n",
 427         "\n",
 428         "    canvas_div.appendChild(canvas);\n",
 429         "    canvas_div.appendChild(rubberband_canvas);\n",
 430         "\n",
 431         "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
 432         "    this.rubberband_context.strokeStyle = '#000000';\n",
 433         "\n",
 434         "    this._resize_canvas = function (width, height, forward) {\n",
 435         "        if (forward) {\n",
 436         "            canvas_div.style.width = width + 'px';\n",
 437         "            canvas_div.style.height = height + 'px';\n",
 438         "        }\n",
 439         "    };\n",
 440         "\n",
 441         "    // Disable right mouse context menu.\n",
 442         "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
 443         "        event.preventDefault();\n",
 444         "        return false;\n",
 445         "    });\n",
 446         "\n",
 447         "    function set_focus() {\n",
 448         "        canvas.focus();\n",
 449         "        canvas_div.focus();\n",
 450         "    }\n",
 451         "\n",
 452         "    window.setTimeout(set_focus, 100);\n",
 453         "};\n",
 454         "\n",
 455         "mpl.figure.prototype._init_toolbar = function () {\n",
 456         "    var fig = this;\n",
 457         "\n",
 458         "    var toolbar = document.createElement('div');\n",
 459         "    toolbar.classList = 'mpl-toolbar';\n",
 460         "    this.root.appendChild(toolbar);\n",
 461         "\n",
 462         "    function on_click_closure(name) {\n",
 463         "        return function (_event) {\n",
 464         "            return fig.toolbar_button_onclick(name);\n",
 465         "        };\n",
 466         "    }\n",
 467         "\n",
 468         "    function on_mouseover_closure(tooltip) {\n",
 469         "        return function (event) {\n",
 470         "            if (!event.currentTarget.disabled) {\n",
 471         "                return fig.toolbar_button_onmouseover(tooltip);\n",
 472         "            }\n",
 473         "        };\n",
 474         "    }\n",
 475         "\n",
 476         "    fig.buttons = {};\n",
 477         "    var buttonGroup = document.createElement('div');\n",
 478         "    buttonGroup.classList = 'mpl-button-group';\n",
 479         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
 480         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
 481         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
 482         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
 483         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
 484         "\n",
 485         "        if (!name) {\n",
 486         "            /* Instead of a spacer, we start a new button group. */\n",
 487         "            if (buttonGroup.hasChildNodes()) {\n",
 488         "                toolbar.appendChild(buttonGroup);\n",
 489         "            }\n",
 490         "            buttonGroup = document.createElement('div');\n",
 491         "            buttonGroup.classList = 'mpl-button-group';\n",
 492         "            continue;\n",
 493         "        }\n",
 494         "\n",
 495         "        var button = (fig.buttons[name] = document.createElement('button'));\n",
 496         "        button.classList = 'mpl-widget';\n",
 497         "        button.setAttribute('role', 'button');\n",
 498         "        button.setAttribute('aria-disabled', 'false');\n",
 499         "        button.addEventListener('click', on_click_closure(method_name));\n",
 500         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
 501         "\n",
 502         "        var icon_img = document.createElement('img');\n",
 503         "        icon_img.src = '_images/' + image + '.png';\n",
 504         "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
 505         "        icon_img.alt = tooltip;\n",
 506         "        button.appendChild(icon_img);\n",
 507         "\n",
 508         "        buttonGroup.appendChild(button);\n",
 509         "    }\n",
 510         "\n",
 511         "    if (buttonGroup.hasChildNodes()) {\n",
 512         "        toolbar.appendChild(buttonGroup);\n",
 513         "    }\n",
 514         "\n",
 515         "    var fmt_picker = document.createElement('select');\n",
 516         "    fmt_picker.classList = 'mpl-widget';\n",
 517         "    toolbar.appendChild(fmt_picker);\n",
 518         "    this.format_dropdown = fmt_picker;\n",
 519         "\n",
 520         "    for (var ind in mpl.extensions) {\n",
 521         "        var fmt = mpl.extensions[ind];\n",
 522         "        var option = document.createElement('option');\n",
 523         "        option.selected = fmt === mpl.default_extension;\n",
 524         "        option.innerHTML = fmt;\n",
 525         "        fmt_picker.appendChild(option);\n",
 526         "    }\n",
 527         "\n",
 528         "    var status_bar = document.createElement('span');\n",
 529         "    status_bar.classList = 'mpl-message';\n",
 530         "    toolbar.appendChild(status_bar);\n",
 531         "    this.message = status_bar;\n",
 532         "};\n",
 533         "\n",
 534         "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
 535         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
 536         "    // which will in turn request a refresh of the image.\n",
 537         "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
 538         "};\n",
 539         "\n",
 540         "mpl.figure.prototype.send_message = function (type, properties) {\n",
 541         "    properties['type'] = type;\n",
 542         "    properties['figure_id'] = this.id;\n",
 543         "    this.ws.send(JSON.stringify(properties));\n",
 544         "};\n",
 545         "\n",
 546         "mpl.figure.prototype.send_draw_message = function () {\n",
 547         "    if (!this.waiting) {\n",
 548         "        this.waiting = true;\n",
 549         "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
 550         "    }\n",
 551         "};\n",
 552         "\n",
 553         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
 554         "    var format_dropdown = fig.format_dropdown;\n",
 555         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
 556         "    fig.ondownload(fig, format);\n",
 557         "};\n",
 558         "\n",
 559         "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
 560         "    var size = msg['size'];\n",
 561         "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
 562         "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
 563         "        fig.send_message('refresh', {});\n",
 564         "    }\n",
 565         "};\n",
 566         "\n",
 567         "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
 568         "    var x0 = msg['x0'] / fig.ratio;\n",
 569         "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
 570         "    var x1 = msg['x1'] / fig.ratio;\n",
 571         "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
 572         "    x0 = Math.floor(x0) + 0.5;\n",
 573         "    y0 = Math.floor(y0) + 0.5;\n",
 574         "    x1 = Math.floor(x1) + 0.5;\n",
 575         "    y1 = Math.floor(y1) + 0.5;\n",
 576         "    var min_x = Math.min(x0, x1);\n",
 577         "    var min_y = Math.min(y0, y1);\n",
 578         "    var width = Math.abs(x1 - x0);\n",
 579         "    var height = Math.abs(y1 - y0);\n",
 580         "\n",
 581         "    fig.rubberband_context.clearRect(\n",
 582         "        0,\n",
 583         "        0,\n",
 584         "        fig.canvas.width / fig.ratio,\n",
 585         "        fig.canvas.height / fig.ratio\n",
 586         "    );\n",
 587         "\n",
 588         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
 589         "};\n",
 590         "\n",
 591         "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
 592         "    // Updates the figure title.\n",
 593         "    fig.header.textContent = msg['label'];\n",
 594         "};\n",
 595         "\n",
 596         "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
 597         "    var cursor = msg['cursor'];\n",
 598         "    switch (cursor) {\n",
 599         "        case 0:\n",
 600         "            cursor = 'pointer';\n",
 601         "            break;\n",
 602         "        case 1:\n",
 603         "            cursor = 'default';\n",
 604         "            break;\n",
 605         "        case 2:\n",
 606         "            cursor = 'crosshair';\n",
 607         "            break;\n",
 608         "        case 3:\n",
 609         "            cursor = 'move';\n",
 610         "            break;\n",
 611         "    }\n",
 612         "    fig.rubberband_canvas.style.cursor = cursor;\n",
 613         "};\n",
 614         "\n",
 615         "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
 616         "    fig.message.textContent = msg['message'];\n",
 617         "};\n",
 618         "\n",
 619         "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
 620         "    // Request the server to send over a new figure.\n",
 621         "    fig.send_draw_message();\n",
 622         "};\n",
 623         "\n",
 624         "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
 625         "    fig.image_mode = msg['mode'];\n",
 626         "};\n",
 627         "\n",
 628         "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
 629         "    for (var key in msg) {\n",
 630         "        if (!(key in fig.buttons)) {\n",
 631         "            continue;\n",
 632         "        }\n",
 633         "        fig.buttons[key].disabled = !msg[key];\n",
 634         "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
 635         "    }\n",
 636         "};\n",
 637         "\n",
 638         "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
 639         "    if (msg['mode'] === 'PAN') {\n",
 640         "        fig.buttons['Pan'].classList.add('active');\n",
 641         "        fig.buttons['Zoom'].classList.remove('active');\n",
 642         "    } else if (msg['mode'] === 'ZOOM') {\n",
 643         "        fig.buttons['Pan'].classList.remove('active');\n",
 644         "        fig.buttons['Zoom'].classList.add('active');\n",
 645         "    } else {\n",
 646         "        fig.buttons['Pan'].classList.remove('active');\n",
 647         "        fig.buttons['Zoom'].classList.remove('active');\n",
 648         "    }\n",
 649         "};\n",
 650         "\n",
 651         "mpl.figure.prototype.updated_canvas_event = function () {\n",
 652         "    // Called whenever the canvas gets updated.\n",
 653         "    this.send_message('ack', {});\n",
 654         "};\n",
 655         "\n",
 656         "// A function to construct a web socket function for onmessage handling.\n",
 657         "// Called in the figure constructor.\n",
 658         "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
 659         "    return function socket_on_message(evt) {\n",
 660         "        if (evt.data instanceof Blob) {\n",
 661         "            /* FIXME: We get \"Resource interpreted as Image but\n",
 662         "             * transferred with MIME type text/plain:\" errors on\n",
 663         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
 664         "             * to be part of the websocket stream */\n",
 665         "            evt.data.type = 'image/png';\n",
 666         "\n",
 667         "            /* Free the memory for the previous frames */\n",
 668         "            if (fig.imageObj.src) {\n",
 669         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
 670         "                    fig.imageObj.src\n",
 671         "                );\n",
 672         "            }\n",
 673         "\n",
 674         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
 675         "                evt.data\n",
 676         "            );\n",
 677         "            fig.updated_canvas_event();\n",
 678         "            fig.waiting = false;\n",
 679         "            return;\n",
 680         "        } else if (\n",
 681         "            typeof evt.data === 'string' &&\n",
 682         "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
 683         "        ) {\n",
 684         "            fig.imageObj.src = evt.data;\n",
 685         "            fig.updated_canvas_event();\n",
 686         "            fig.waiting = false;\n",
 687         "            return;\n",
 688         "        }\n",
 689         "\n",
 690         "        var msg = JSON.parse(evt.data);\n",
 691         "        var msg_type = msg['type'];\n",
 692         "\n",
 693         "        // Call the  \"handle_{type}\" callback, which takes\n",
 694         "        // the figure and JSON message as its only arguments.\n",
 695         "        try {\n",
 696         "            var callback = fig['handle_' + msg_type];\n",
 697         "        } catch (e) {\n",
 698         "            console.log(\n",
 699         "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
 700         "                msg\n",
 701         "            );\n",
 702         "            return;\n",
 703         "        }\n",
 704         "\n",
 705         "        if (callback) {\n",
 706         "            try {\n",
 707         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
 708         "                callback(fig, msg);\n",
 709         "            } catch (e) {\n",
 710         "                console.log(\n",
 711         "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
 712         "                    e,\n",
 713         "                    e.stack,\n",
 714         "                    msg\n",
 715         "                );\n",
 716         "            }\n",
 717         "        }\n",
 718         "    };\n",
 719         "};\n",
 720         "\n",
 721         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
 722         "mpl.findpos = function (e) {\n",
 723         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
 724         "    var targ;\n",
 725         "    if (!e) {\n",
 726         "        e = window.event;\n",
 727         "    }\n",
 728         "    if (e.target) {\n",
 729         "        targ = e.target;\n",
 730         "    } else if (e.srcElement) {\n",
 731         "        targ = e.srcElement;\n",
 732         "    }\n",
 733         "    if (targ.nodeType === 3) {\n",
 734         "        // defeat Safari bug\n",
 735         "        targ = targ.parentNode;\n",
 736         "    }\n",
 737         "\n",
 738         "    // pageX,Y are the mouse positions relative to the document\n",
 739         "    var boundingRect = targ.getBoundingClientRect();\n",
 740         "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
 741         "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
 742         "\n",
 743         "    return { x: x, y: y };\n",
 744         "};\n",
 745         "\n",
 746         "/*\n",
 747         " * return a copy of an object with only non-object keys\n",
 748         " * we need this to avoid circular references\n",
 749         " * http://stackoverflow.com/a/24161582/3208463\n",
 750         " */\n",
 751         "function simpleKeys(original) {\n",
 752         "    return Object.keys(original).reduce(function (obj, key) {\n",
 753         "        if (typeof original[key] !== 'object') {\n",
 754         "            obj[key] = original[key];\n",
 755         "        }\n",
 756         "        return obj;\n",
 757         "    }, {});\n",
 758         "}\n",
 759         "\n",
 760         "mpl.figure.prototype.mouse_event = function (event, name) {\n",
 761         "    var canvas_pos = mpl.findpos(event);\n",
 762         "\n",
 763         "    if (name === 'button_press') {\n",
 764         "        this.canvas.focus();\n",
 765         "        this.canvas_div.focus();\n",
 766         "    }\n",
 767         "\n",
 768         "    var x = canvas_pos.x * this.ratio;\n",
 769         "    var y = canvas_pos.y * this.ratio;\n",
 770         "\n",
 771         "    this.send_message(name, {\n",
 772         "        x: x,\n",
 773         "        y: y,\n",
 774         "        button: event.button,\n",
 775         "        step: event.step,\n",
 776         "        guiEvent: simpleKeys(event),\n",
 777         "    });\n",
 778         "\n",
 779         "    /* This prevents the web browser from automatically changing to\n",
 780         "     * the text insertion cursor when the button is pressed.  We want\n",
 781         "     * to control all of the cursor setting manually through the\n",
 782         "     * 'cursor' event from matplotlib */\n",
 783         "    event.preventDefault();\n",
 784         "    return false;\n",
 785         "};\n",
 786         "\n",
 787         "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
 788         "    // Handle any extra behaviour associated with a key event\n",
 789         "};\n",
 790         "\n",
 791         "mpl.figure.prototype.key_event = function (event, name) {\n",
 792         "    // Prevent repeat events\n",
 793         "    if (name === 'key_press') {\n",
 794         "        if (event.which === this._key) {\n",
 795         "            return;\n",
 796         "        } else {\n",
 797         "            this._key = event.which;\n",
 798         "        }\n",
 799         "    }\n",
 800         "    if (name === 'key_release') {\n",
 801         "        this._key = null;\n",
 802         "    }\n",
 803         "\n",
 804         "    var value = '';\n",
 805         "    if (event.ctrlKey && event.which !== 17) {\n",
 806         "        value += 'ctrl+';\n",
 807         "    }\n",
 808         "    if (event.altKey && event.which !== 18) {\n",
 809         "        value += 'alt+';\n",
 810         "    }\n",
 811         "    if (event.shiftKey && event.which !== 16) {\n",
 812         "        value += 'shift+';\n",
 813         "    }\n",
 814         "\n",
 815         "    value += 'k';\n",
 816         "    value += event.which.toString();\n",
 817         "\n",
 818         "    this._key_event_extra(event, name);\n",
 819         "\n",
 820         "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
 821         "    return false;\n",
 822         "};\n",
 823         "\n",
 824         "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
 825         "    if (name === 'download') {\n",
 826         "        this.handle_save(this, null);\n",
 827         "    } else {\n",
 828         "        this.send_message('toolbar_button', { name: name });\n",
 829         "    }\n",
 830         "};\n",
 831         "\n",
 832         "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
 833         "    this.message.textContent = tooltip;\n",
 834         "};\n",
 835         "\n",
 836         "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
 837         "// prettier-ignore\n",
 838         "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
 839         "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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
 840         "\n",
 841         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
 842         "\n",
 843         "mpl.default_extension = \"png\";/* global mpl */\n",
 844         "\n",
 845         "var comm_websocket_adapter = function (comm) {\n",
 846         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
 847         "    // object with the appropriate methods. Currently this is a non binary\n",
 848         "    // socket, so there is still some room for performance tuning.\n",
 849         "    var ws = {};\n",
 850         "\n",
 851         "    ws.close = function () {\n",
 852         "        comm.close();\n",
 853         "    };\n",
 854         "    ws.send = function (m) {\n",
 855         "        //console.log('sending', m);\n",
 856         "        comm.send(m);\n",
 857         "    };\n",
 858         "    // Register the callback with on_msg.\n",
 859         "    comm.on_msg(function (msg) {\n",
 860         "        //console.log('receiving', msg['content']['data'], msg);\n",
 861         "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
 862         "        ws.onmessage(msg['content']['data']);\n",
 863         "    });\n",
 864         "    return ws;\n",
 865         "};\n",
 866         "\n",
 867         "mpl.mpl_figure_comm = function (comm, msg) {\n",
 868         "    // This is the function which gets called when the mpl process\n",
 869         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
 870         "\n",
 871         "    var id = msg.content.data.id;\n",
 872         "    // Get hold of the div created by the display call when the Comm\n",
 873         "    // socket was opened in Python.\n",
 874         "    var element = document.getElementById(id);\n",
 875         "    var ws_proxy = comm_websocket_adapter(comm);\n",
 876         "\n",
 877         "    function ondownload(figure, _format) {\n",
 878         "        window.open(figure.canvas.toDataURL());\n",
 879         "    }\n",
 880         "\n",
 881         "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
 882         "\n",
 883         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
 884         "    // web socket which is closed, not our websocket->open comm proxy.\n",
 885         "    ws_proxy.onopen();\n",
 886         "\n",
 887         "    fig.parent_element = element;\n",
 888         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
 889         "    if (!fig.cell_info) {\n",
 890         "        console.error('Failed to find cell for figure', id, fig);\n",
 891         "        return;\n",
 892         "    }\n",
 893         "    fig.cell_info[0].output_area.element.on(\n",
 894         "        'cleared',\n",
 895         "        { fig: fig },\n",
 896         "        fig._remove_fig_handler\n",
 897         "    );\n",
 898         "};\n",
 899         "\n",
 900         "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
 901         "    var width = fig.canvas.width / fig.ratio;\n",
 902         "    fig.cell_info[0].output_area.element.off(\n",
 903         "        'cleared',\n",
 904         "        fig._remove_fig_handler\n",
 905         "    );\n",
 906         "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
 907         "\n",
 908         "    // Update the output cell to use the data from the current canvas.\n",
 909         "    fig.push_to_output();\n",
 910         "    var dataURL = fig.canvas.toDataURL();\n",
 911         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
 912         "    // the notebook keyboard shortcuts fail.\n",
 913         "    IPython.keyboard_manager.enable();\n",
 914         "    fig.parent_element.innerHTML =\n",
 915         "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
 916         "    fig.close_ws(fig, msg);\n",
 917         "};\n",
 918         "\n",
 919         "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
 920         "    fig.send_message('closing', msg);\n",
 921         "    // fig.ws.close()\n",
 922         "};\n",
 923         "\n",
 924         "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
 925         "    // Turn the data on the canvas into data in the output cell.\n",
 926         "    var width = this.canvas.width / this.ratio;\n",
 927         "    var dataURL = this.canvas.toDataURL();\n",
 928         "    this.cell_info[1]['text/html'] =\n",
 929         "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
 930         "};\n",
 931         "\n",
 932         "mpl.figure.prototype.updated_canvas_event = function () {\n",
 933         "    // Tell IPython that the notebook contents must change.\n",
 934         "    IPython.notebook.set_dirty(true);\n",
 935         "    this.send_message('ack', {});\n",
 936         "    var fig = this;\n",
 937         "    // Wait a second, then push the new image to the DOM so\n",
 938         "    // that it is saved nicely (might be nice to debounce this).\n",
 939         "    setTimeout(function () {\n",
 940         "        fig.push_to_output();\n",
 941         "    }, 1000);\n",
 942         "};\n",
 943         "\n",
 944         "mpl.figure.prototype._init_toolbar = function () {\n",
 945         "    var fig = this;\n",
 946         "\n",
 947         "    var toolbar = document.createElement('div');\n",
 948         "    toolbar.classList = 'btn-toolbar';\n",
 949         "    this.root.appendChild(toolbar);\n",
 950         "\n",
 951         "    function on_click_closure(name) {\n",
 952         "        return function (_event) {\n",
 953         "            return fig.toolbar_button_onclick(name);\n",
 954         "        };\n",
 955         "    }\n",
 956         "\n",
 957         "    function on_mouseover_closure(tooltip) {\n",
 958         "        return function (event) {\n",
 959         "            if (!event.currentTarget.disabled) {\n",
 960         "                return fig.toolbar_button_onmouseover(tooltip);\n",
 961         "            }\n",
 962         "        };\n",
 963         "    }\n",
 964         "\n",
 965         "    fig.buttons = {};\n",
 966         "    var buttonGroup = document.createElement('div');\n",
 967         "    buttonGroup.classList = 'btn-group';\n",
 968         "    var button;\n",
 969         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
 970         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
 971         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
 972         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
 973         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
 974         "\n",
 975         "        if (!name) {\n",
 976         "            /* Instead of a spacer, we start a new button group. */\n",
 977         "            if (buttonGroup.hasChildNodes()) {\n",
 978         "                toolbar.appendChild(buttonGroup);\n",
 979         "            }\n",
 980         "            buttonGroup = document.createElement('div');\n",
 981         "            buttonGroup.classList = 'btn-group';\n",
 982         "            continue;\n",
 983         "        }\n",
 984         "\n",
 985         "        button = fig.buttons[name] = document.createElement('button');\n",
 986         "        button.classList = 'btn btn-default';\n",
 987         "        button.href = '#';\n",
 988         "        button.title = name;\n",
 989         "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
 990         "        button.addEventListener('click', on_click_closure(method_name));\n",
 991         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
 992         "        buttonGroup.appendChild(button);\n",
 993         "    }\n",
 994         "\n",
 995         "    if (buttonGroup.hasChildNodes()) {\n",
 996         "        toolbar.appendChild(buttonGroup);\n",
 997         "    }\n",
 998         "\n",
 999         "    // Add the status bar.\n",
1000         "    var status_bar = document.createElement('span');\n",
1001         "    status_bar.classList = 'mpl-message pull-right';\n",
1002         "    toolbar.appendChild(status_bar);\n",
1003         "    this.message = status_bar;\n",
1004         "\n",
1005         "    // Add the close button to the window.\n",
1006         "    var buttongrp = document.createElement('div');\n",
1007         "    buttongrp.classList = 'btn-group inline pull-right';\n",
1008         "    button = document.createElement('button');\n",
1009         "    button.classList = 'btn btn-mini btn-primary';\n",
1010         "    button.href = '#';\n",
1011         "    button.title = 'Stop Interaction';\n",
1012         "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
1013         "    button.addEventListener('click', function (_evt) {\n",
1014         "        fig.handle_close(fig, {});\n",
1015         "    });\n",
1016         "    button.addEventListener(\n",
1017         "        'mouseover',\n",
1018         "        on_mouseover_closure('Stop Interaction')\n",
1019         "    );\n",
1020         "    buttongrp.appendChild(button);\n",
1021         "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
1022         "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
1023         "};\n",
1024         "\n",
1025         "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
1026         "    var fig = event.data.fig;\n",
1027         "    if (event.target !== this) {\n",
1028         "        // Ignore bubbled events from children.\n",
1029         "        return;\n",
1030         "    }\n",
1031         "    fig.close_ws(fig, {});\n",
1032         "};\n",
1033         "\n",
1034         "mpl.figure.prototype._root_extra_style = function (el) {\n",
1035         "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
1036         "};\n",
1037         "\n",
1038         "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
1039         "    // this is important to make the div 'focusable\n",
1040         "    el.setAttribute('tabindex', 0);\n",
1041         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
1042         "    // off when our div gets focus\n",
1043         "\n",
1044         "    // location in version 3\n",
1045         "    if (IPython.notebook.keyboard_manager) {\n",
1046         "        IPython.notebook.keyboard_manager.register_events(el);\n",
1047         "    } else {\n",
1048         "        // location in version 2\n",
1049         "        IPython.keyboard_manager.register_events(el);\n",
1050         "    }\n",
1051         "};\n",
1052         "\n",
1053         "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
1054         "    var manager = IPython.notebook.keyboard_manager;\n",
1055         "    if (!manager) {\n",
1056         "        manager = IPython.keyboard_manager;\n",
1057         "    }\n",
1058         "\n",
1059         "    // Check for shift+enter\n",
1060         "    if (event.shiftKey && event.which === 13) {\n",
1061         "        this.canvas_div.blur();\n",
1062         "        // select the cell after this one\n",
1063         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
1064         "        IPython.notebook.select(index + 1);\n",
1065         "    }\n",
1066         "};\n",
1067         "\n",
1068         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
1069         "    fig.ondownload(fig, null);\n",
1070         "};\n",
1071         "\n",
1072         "mpl.find_output_cell = function (html_output) {\n",
1073         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
1074         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
1075         "    // IPython event is triggered only after the cells have been serialised, which for\n",
1076         "    // our purposes (turning an active figure into a static one), is too late.\n",
1077         "    var cells = IPython.notebook.get_cells();\n",
1078         "    var ncells = cells.length;\n",
1079         "    for (var i = 0; i < ncells; i++) {\n",
1080         "        var cell = cells[i];\n",
1081         "        if (cell.cell_type === 'code') {\n",
1082         "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
1083         "                var data = cell.output_area.outputs[j];\n",
1084         "                if (data.data) {\n",
1085         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
1086         "                    data = data.data;\n",
1087         "                }\n",
1088         "                if (data['text/html'] === html_output) {\n",
1089         "                    return [cell, data, j];\n",
1090         "                }\n",
1091         "            }\n",
1092         "        }\n",
1093         "    }\n",
1094         "};\n",
1095         "\n",
1096         "// Register the function which deals with the matplotlib target/channel.\n",
1097         "// The kernel may be null if the page has been refreshed.\n",
1098         "if (IPython.notebook.kernel !== null) {\n",
1099         "    IPython.notebook.kernel.comm_manager.register_target(\n",
1100         "        'matplotlib',\n",
1101         "        mpl.mpl_figure_comm\n",
1102         "    );\n",
1103         "}\n"
1104        ],
1105        "text/plain": [
1106         "<IPython.core.display.Javascript object>"
1107        ]
1108       },
1109       "metadata": {},
1110       "output_type": "display_data"
1111      },
1112      {
1113       "data": {
1114        "text/html": [
1115         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCZhVxZn+vxYV2ZsGmiV0h0VoFGUx0MZgWCQIiTruIJlxQQcIyWSisrQx8080oxgWNTOOCLiA0REXXDKgkTiBhggzadRAOxpaaVQaAVkaEGQT5P+8B+p6OH2WOrfOvffcvu95Hp9E+1Sdql9959R7v6rvq7xjx44dE14kQAIkQAIkQAIkQAI5QyCPAjBnxpodJQESIAESIAESIAGLAAUgDYEESIAESIAESIAEcowABWCODTi7SwIkQAIkQAIkQAIUgLQBEiABEiABEiABEsgxAhSAOTbg7C4JkAAJkAAJkAAJUADSBkiABEiABEiABEggxwhQAObYgLO7JEACJEACJEACJEABSBsgARIgARIgARIggRwjQAGYYwPO7pIACZAACZAACZAABSBtgARIgARIgARIgARyjAAFYI4NOLtLAiRAAiRAAiRAAhSAtAESIAESIAESIAESyDECFIA5NuDsLgmQAAmQAAmQAAlQANIGSIAESIAESIAESCDHCFAA5tiAs7skQAIkQAIkQAIkQAFIGyABEiABEiABEiCBHCNAAZhjA87ukgAJkAAJkAAJkAAFIG2ABEiABEiABEiABHKMAAVgjg04u0sCJEACJEACJEACFIC0ARIgARIgARIgARLIMQIUgDk24OwuCZAACZAACZAACVAA0gZIgARIgARIgARIIMcIUADm2ICzuyRAAiRAAiRAAiRAAUgbIAESIAESIAESIIEcI0ABmGMDzu6SAAmQAAmQAAmQAAUgbYAESIAESIAESIAEcowABWCODTi7SwIkQAIkQAIkQAIUgLQBEiABEiABEiABEsgxAhSAOTbg7C4JkAAJkAAJkAAJUADSBkiABEiABEiABEggxwhQAObYgLO7JEACJEACJEACJEABSBsgARIgARIgARIggRwjQAGYYwPO7pIACZAACZAACZAABSBtgARIgARIgARIgARyjAAFYI4NOLtLAiRAAiRAAiRAAhSAtAESIAESIAESIAESyDECFID1bMD/8pe/yG9+8xt5++235bPPPpP8/Hzp0qWLfOc735H7778/1r296aabpLy8XD7++ONYtzPujevUqZMMHjxY5s+fH/emJt0+2Ejnzp1lxowZMmnSJN96wGHMmDHy0Ucf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gAACCCCAgLMCBEBnu44TRwABBBBAAAEEggkQAIO50QoBBBBAAAEEEHBWgADoWNddf/31sn79etm5c6c0b95crrzySpk0aZJ5mjlbeoEtW7bII488IkuWLJHvvvvOWN1yyy0yevRoqV+/PmxZBCZMmCCLFi0yNadW+r2ZbHUFnn32WZk8ebJ8++23ct5558lTTz0ll112GVQZBJYvX268Pv74Y2P2xhtvSN++ffHKIqBPgnj99dfliy++kIYNG8oll1xifvd37NgRtywC06dPF/3RcUA3fX+OGTNGrrnmmsS7EQAdK4Enn3xSunXrJq1atZIdO3bIgw8+aK5g1apVjl1J4U73nXfekfnz58uAAQOkQ4cO8umnn8pdd90lt956q0yZMqVwJ+LgK40dO1aaNWsm+r3Xs2bNIgCm6UOtLa0lDYHdu3eXGTNmyAsvvCCff/65nHHGGQ72ev5PefHixbJy5Urp0qWL9OvXjwDogbxPnz7Sv39/ueiii+TXX381f8Bu3LjR1FmjRo08HCGZu7z11ltSr14987tftzlz5pg/PtatW2fCYJI3AqDjvb9w4ULzl7M+G+qEE05w/GoKd/r6C0D/Kty8eXPhXtThV5o9e7YMGzaMAJimDy+++GITZLSeUts555xj3pc6a8OWXUC/R50ZQP9V8sMPP8ipp54qH3zwgfTo0cP/ARLcokWLFiYE3nHHHQlWECEAOtz9e/bskXvvvdfMBH744YcOX0nhT/2hhx4SnRlcu3Zt4V/cwVckAKbvtF9++UVOPPFEefXVV+XGG2+s3emBBx4wH5vr4MxGAMxHDXzzzTdy1llnmVnA888/Px8vEbtjHj582LxXBw4caGYAzz333Nhdo58LIgD60YrIviNGjJBnnnlGfvrpJ+natau8/fbb0rJly4icXfRPY9OmTWbGZurUqXLnnXdG/4QjcIYEwPSdUF1dLW3atDEfZ+o9Want0UcfNR81ffnllxHovWifAjOA/vunpqZGbrjhBtm7d6+sWLHC/wES1kJDst469fPPP0vjxo3llVdekWuvvTZhCnUvlwAYgRIYN26cjB8/PuuZrFmzRiorK80+u3btEp3927p1q2nXtGlTEwL1F2mSNr9uaqMD9uWXX25+9D6tJG5B3AiA2QOg3oOrA0xq08UzL730krlhny27AAHQf4UMHTrULM7ST37Ky8v9HyBhLXSmftu2beYWltdee8387tfZeWYA9U8JtqIKaKDTn2xb27ZtpUGDBnV20ZvzKyoqzCKQowegol5QgV7cr5uGv169eones6WBprS0tEBnGq2X8eumZ08ATN+HfARsX9sEQH+G999/v7z55puiK6nbtWvnrzF7GwF9ekb79u3Ngq0kb8wAOt77VVVVZqXh0qVLpWfPno5fTf5OX++T1PB34YUXyssvv2xWhbF5FyAAZrbSPyi0rnQVcGrTmQX9iI5FILlrjACY20j30LkaDX+6YGbZsmXm/j+2YAK9e/c2Eyf6ey3JGwHQod5fvXq16M+ll15qngGoK1j1eUb6HK3PPvtMysrKHLqawp1q6mNfDcpz5849JvydfvrphTsRB19JPzbR2w10tbmumkvdb6SPVNB7adjEPGJIHwPz3HPPmVn4mTNnyvPPP2/ek2eeeSZEaQR+/PFH0UUMunXu3FmeeOIJ8wears7k0TnpS2bIkCHm3rUFCxYc8+w/vQVInwvIll5g1KhR5pl/GvgOHDgg8+bNk4kTJ5pFgFdddVWi2QiADnW/3siqqws3bNggBw8eNM8C1GdD6YpWvRGdLb2A/pV3++23p/1H7oDIXjWDBg0yixmO35hxPlZEZ/8ef/xx88eYrsjU53XyaI7MtaUzWBr4jt90dWbSZ2UyqWW6x/vFF18UfZ+ypRfQR728//775r2pYblTp06iCymTHv5UiwDIuwYBBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAgRAagABBBBAAAEEEEiYAAEwYR3O5SKAAAIIIIAAAv8FWD7peQ1kiF8AAAAASUVORK5CYII=\" width=\"640\">"
1116        ],
1117        "text/plain": [
1118         "<IPython.core.display.HTML object>"
1119        ]
1120       },
1121       "metadata": {},
1122       "output_type": "display_data"
1123      }
1124     ],
1125     "source": [
1126      "from sklearn.datasets import make_regression\n",
1127      "plt.figure()\n",
1128      "plt.title('Sample regression problem with one input variable')\n",
1129      "X_R1, y_R1 = make_regression(n_samples = 1000, n_features=1,\n",
1130      "                            n_informative=1, bias = 150.0,\n",
1131      "                            noise = 30, random_state=0)\n",
1132      "plt.scatter(X_R1, y_R1, marker= 'o', s=25)\n",
1133      "plt.show()"
1134     ]
1135    },
1136    {
1137     "cell_type": "code",
1138     "execution_count": 18,
1139     "id": "82ea4f47",
1140     "metadata": {},
1141     "outputs": [
1142      {
1143       "data": {
1144        "application/javascript": [
1145         "/* Put everything inside the global mpl namespace */\n",
1146         "/* global mpl */\n",
1147         "window.mpl = {};\n",
1148         "\n",
1149         "mpl.get_websocket_type = function () {\n",
1150         "    if (typeof WebSocket !== 'undefined') {\n",
1151         "        return WebSocket;\n",
1152         "    } else if (typeof MozWebSocket !== 'undefined') {\n",
1153         "        return MozWebSocket;\n",
1154         "    } else {\n",
1155         "        alert(\n",
1156         "            'Your browser does not have WebSocket support. ' +\n",
1157         "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
1158         "                'Firefox 4 and 5 are also supported but you ' +\n",
1159         "                'have to enable WebSockets in about:config.'\n",
1160         "        );\n",
1161         "    }\n",
1162         "};\n",
1163         "\n",
1164         "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
1165         "    this.id = figure_id;\n",
1166         "\n",
1167         "    this.ws = websocket;\n",
1168         "\n",
1169         "    this.supports_binary = this.ws.binaryType !== undefined;\n",
1170         "\n",
1171         "    if (!this.supports_binary) {\n",
1172         "        var warnings = document.getElementById('mpl-warnings');\n",
1173         "        if (warnings) {\n",
1174         "            warnings.style.display = 'block';\n",
1175         "            warnings.textContent =\n",
1176         "                'This browser does not support binary websocket messages. ' +\n",
1177         "                'Performance may be slow.';\n",
1178         "        }\n",
1179         "    }\n",
1180         "\n",
1181         "    this.imageObj = new Image();\n",
1182         "\n",
1183         "    this.context = undefined;\n",
1184         "    this.message = undefined;\n",
1185         "    this.canvas = undefined;\n",
1186         "    this.rubberband_canvas = undefined;\n",
1187         "    this.rubberband_context = undefined;\n",
1188         "    this.format_dropdown = undefined;\n",
1189         "\n",
1190         "    this.image_mode = 'full';\n",
1191         "\n",
1192         "    this.root = document.createElement('div');\n",
1193         "    this.root.setAttribute('style', 'display: inline-block');\n",
1194         "    this._root_extra_style(this.root);\n",
1195         "\n",
1196         "    parent_element.appendChild(this.root);\n",
1197         "\n",
1198         "    this._init_header(this);\n",
1199         "    this._init_canvas(this);\n",
1200         "    this._init_toolbar(this);\n",
1201         "\n",
1202         "    var fig = this;\n",
1203         "\n",
1204         "    this.waiting = false;\n",
1205         "\n",
1206         "    this.ws.onopen = function () {\n",
1207         "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
1208         "        fig.send_message('send_image_mode', {});\n",
1209         "        if (fig.ratio !== 1) {\n",
1210         "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
1211         "        }\n",
1212         "        fig.send_message('refresh', {});\n",
1213         "    };\n",
1214         "\n",
1215         "    this.imageObj.onload = function () {\n",
1216         "        if (fig.image_mode === 'full') {\n",
1217         "            // Full images could contain transparency (where diff images\n",
1218         "            // almost always do), so we need to clear the canvas so that\n",
1219         "            // there is no ghosting.\n",
1220         "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
1221         "        }\n",
1222         "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
1223         "    };\n",
1224         "\n",
1225         "    this.imageObj.onunload = function () {\n",
1226         "        fig.ws.close();\n",
1227         "    };\n",
1228         "\n",
1229         "    this.ws.onmessage = this._make_on_message_function(this);\n",
1230         "\n",
1231         "    this.ondownload = ondownload;\n",
1232         "};\n",
1233         "\n",
1234         "mpl.figure.prototype._init_header = function () {\n",
1235         "    var titlebar = document.createElement('div');\n",
1236         "    titlebar.classList =\n",
1237         "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
1238         "    var titletext = document.createElement('div');\n",
1239         "    titletext.classList = 'ui-dialog-title';\n",
1240         "    titletext.setAttribute(\n",
1241         "        'style',\n",
1242         "        'width: 100%; text-align: center; padding: 3px;'\n",
1243         "    );\n",
1244         "    titlebar.appendChild(titletext);\n",
1245         "    this.root.appendChild(titlebar);\n",
1246         "    this.header = titletext;\n",
1247         "};\n",
1248         "\n",
1249         "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
1250         "\n",
1251         "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
1252         "\n",
1253         "mpl.figure.prototype._init_canvas = function () {\n",
1254         "    var fig = this;\n",
1255         "\n",
1256         "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
1257         "    canvas_div.setAttribute(\n",
1258         "        'style',\n",
1259         "        'border: 1px solid #ddd;' +\n",
1260         "            'box-sizing: content-box;' +\n",
1261         "            'clear: both;' +\n",
1262         "            'min-height: 1px;' +\n",
1263         "            'min-width: 1px;' +\n",
1264         "            'outline: 0;' +\n",
1265         "            'overflow: hidden;' +\n",
1266         "            'position: relative;' +\n",
1267         "            'resize: both;'\n",
1268         "    );\n",
1269         "\n",
1270         "    function on_keyboard_event_closure(name) {\n",
1271         "        return function (event) {\n",
1272         "            return fig.key_event(event, name);\n",
1273         "        };\n",
1274         "    }\n",
1275         "\n",
1276         "    canvas_div.addEventListener(\n",
1277         "        'keydown',\n",
1278         "        on_keyboard_event_closure('key_press')\n",
1279         "    );\n",
1280         "    canvas_div.addEventListener(\n",
1281         "        'keyup',\n",
1282         "        on_keyboard_event_closure('key_release')\n",
1283         "    );\n",
1284         "\n",
1285         "    this._canvas_extra_style(canvas_div);\n",
1286         "    this.root.appendChild(canvas_div);\n",
1287         "\n",
1288         "    var canvas = (this.canvas = document.createElement('canvas'));\n",
1289         "    canvas.classList.add('mpl-canvas');\n",
1290         "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
1291         "\n",
1292         "    this.context = canvas.getContext('2d');\n",
1293         "\n",
1294         "    var backingStore =\n",
1295         "        this.context.backingStorePixelRatio ||\n",
1296         "        this.context.webkitBackingStorePixelRatio ||\n",
1297         "        this.context.mozBackingStorePixelRatio ||\n",
1298         "        this.context.msBackingStorePixelRatio ||\n",
1299         "        this.context.oBackingStorePixelRatio ||\n",
1300         "        this.context.backingStorePixelRatio ||\n",
1301         "        1;\n",
1302         "\n",
1303         "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
1304         "\n",
1305         "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
1306         "        'canvas'\n",
1307         "    ));\n",
1308         "    rubberband_canvas.setAttribute(\n",
1309         "        'style',\n",
1310         "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
1311         "    );\n",
1312         "\n",
1313         "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
1314         "    if (this.ResizeObserver === undefined) {\n",
1315         "        if (window.ResizeObserver !== undefined) {\n",
1316         "            this.ResizeObserver = window.ResizeObserver;\n",
1317         "        } else {\n",
1318         "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
1319         "            this.ResizeObserver = obs.ResizeObserver;\n",
1320         "        }\n",
1321         "    }\n",
1322         "\n",
1323         "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
1324         "        var nentries = entries.length;\n",
1325         "        for (var i = 0; i < nentries; i++) {\n",
1326         "            var entry = entries[i];\n",
1327         "            var width, height;\n",
1328         "            if (entry.contentBoxSize) {\n",
1329         "                if (entry.contentBoxSize instanceof Array) {\n",
1330         "                    // Chrome 84 implements new version of spec.\n",
1331         "                    width = entry.contentBoxSize[0].inlineSize;\n",
1332         "                    height = entry.contentBoxSize[0].blockSize;\n",
1333         "                } else {\n",
1334         "                    // Firefox implements old version of spec.\n",
1335         "                    width = entry.contentBoxSize.inlineSize;\n",
1336         "                    height = entry.contentBoxSize.blockSize;\n",
1337         "                }\n",
1338         "            } else {\n",
1339         "                // Chrome <84 implements even older version of spec.\n",
1340         "                width = entry.contentRect.width;\n",
1341         "                height = entry.contentRect.height;\n",
1342         "            }\n",
1343         "\n",
1344         "            // Keep the size of the canvas and rubber band canvas in sync with\n",
1345         "            // the canvas container.\n",
1346         "            if (entry.devicePixelContentBoxSize) {\n",
1347         "                // Chrome 84 implements new version of spec.\n",
1348         "                canvas.setAttribute(\n",
1349         "                    'width',\n",
1350         "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
1351         "                );\n",
1352         "                canvas.setAttribute(\n",
1353         "                    'height',\n",
1354         "                    entry.devicePixelContentBoxSize[0].blockSize\n",
1355         "                );\n",
1356         "            } else {\n",
1357         "                canvas.setAttribute('width', width * fig.ratio);\n",
1358         "                canvas.setAttribute('height', height * fig.ratio);\n",
1359         "            }\n",
1360         "            canvas.setAttribute(\n",
1361         "                'style',\n",
1362         "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
1363         "            );\n",
1364         "\n",
1365         "            rubberband_canvas.setAttribute('width', width);\n",
1366         "            rubberband_canvas.setAttribute('height', height);\n",
1367         "\n",
1368         "            // And update the size in Python. We ignore the initial 0/0 size\n",
1369         "            // that occurs as the element is placed into the DOM, which should\n",
1370         "            // otherwise not happen due to the minimum size styling.\n",
1371         "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
1372         "                fig.request_resize(width, height);\n",
1373         "            }\n",
1374         "        }\n",
1375         "    });\n",
1376         "    this.resizeObserverInstance.observe(canvas_div);\n",
1377         "\n",
1378         "    function on_mouse_event_closure(name) {\n",
1379         "        return function (event) {\n",
1380         "            return fig.mouse_event(event, name);\n",
1381         "        };\n",
1382         "    }\n",
1383         "\n",
1384         "    rubberband_canvas.addEventListener(\n",
1385         "        'mousedown',\n",
1386         "        on_mouse_event_closure('button_press')\n",
1387         "    );\n",
1388         "    rubberband_canvas.addEventListener(\n",
1389         "        'mouseup',\n",
1390         "        on_mouse_event_closure('button_release')\n",
1391         "    );\n",
1392         "    // Throttle sequential mouse events to 1 every 20ms.\n",
1393         "    rubberband_canvas.addEventListener(\n",
1394         "        'mousemove',\n",
1395         "        on_mouse_event_closure('motion_notify')\n",
1396         "    );\n",
1397         "\n",
1398         "    rubberband_canvas.addEventListener(\n",
1399         "        'mouseenter',\n",
1400         "        on_mouse_event_closure('figure_enter')\n",
1401         "    );\n",
1402         "    rubberband_canvas.addEventListener(\n",
1403         "        'mouseleave',\n",
1404         "        on_mouse_event_closure('figure_leave')\n",
1405         "    );\n",
1406         "\n",
1407         "    canvas_div.addEventListener('wheel', function (event) {\n",
1408         "        if (event.deltaY < 0) {\n",
1409         "            event.step = 1;\n",
1410         "        } else {\n",
1411         "            event.step = -1;\n",
1412         "        }\n",
1413         "        on_mouse_event_closure('scroll')(event);\n",
1414         "    });\n",
1415         "\n",
1416         "    canvas_div.appendChild(canvas);\n",
1417         "    canvas_div.appendChild(rubberband_canvas);\n",
1418         "\n",
1419         "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
1420         "    this.rubberband_context.strokeStyle = '#000000';\n",
1421         "\n",
1422         "    this._resize_canvas = function (width, height, forward) {\n",
1423         "        if (forward) {\n",
1424         "            canvas_div.style.width = width + 'px';\n",
1425         "            canvas_div.style.height = height + 'px';\n",
1426         "        }\n",
1427         "    };\n",
1428         "\n",
1429         "    // Disable right mouse context menu.\n",
1430         "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
1431         "        event.preventDefault();\n",
1432         "        return false;\n",
1433         "    });\n",
1434         "\n",
1435         "    function set_focus() {\n",
1436         "        canvas.focus();\n",
1437         "        canvas_div.focus();\n",
1438         "    }\n",
1439         "\n",
1440         "    window.setTimeout(set_focus, 100);\n",
1441         "};\n",
1442         "\n",
1443         "mpl.figure.prototype._init_toolbar = function () {\n",
1444         "    var fig = this;\n",
1445         "\n",
1446         "    var toolbar = document.createElement('div');\n",
1447         "    toolbar.classList = 'mpl-toolbar';\n",
1448         "    this.root.appendChild(toolbar);\n",
1449         "\n",
1450         "    function on_click_closure(name) {\n",
1451         "        return function (_event) {\n",
1452         "            return fig.toolbar_button_onclick(name);\n",
1453         "        };\n",
1454         "    }\n",
1455         "\n",
1456         "    function on_mouseover_closure(tooltip) {\n",
1457         "        return function (event) {\n",
1458         "            if (!event.currentTarget.disabled) {\n",
1459         "                return fig.toolbar_button_onmouseover(tooltip);\n",
1460         "            }\n",
1461         "        };\n",
1462         "    }\n",
1463         "\n",
1464         "    fig.buttons = {};\n",
1465         "    var buttonGroup = document.createElement('div');\n",
1466         "    buttonGroup.classList = 'mpl-button-group';\n",
1467         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
1468         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
1469         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
1470         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
1471         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
1472         "\n",
1473         "        if (!name) {\n",
1474         "            /* Instead of a spacer, we start a new button group. */\n",
1475         "            if (buttonGroup.hasChildNodes()) {\n",
1476         "                toolbar.appendChild(buttonGroup);\n",
1477         "            }\n",
1478         "            buttonGroup = document.createElement('div');\n",
1479         "            buttonGroup.classList = 'mpl-button-group';\n",
1480         "            continue;\n",
1481         "        }\n",
1482         "\n",
1483         "        var button = (fig.buttons[name] = document.createElement('button'));\n",
1484         "        button.classList = 'mpl-widget';\n",
1485         "        button.setAttribute('role', 'button');\n",
1486         "        button.setAttribute('aria-disabled', 'false');\n",
1487         "        button.addEventListener('click', on_click_closure(method_name));\n",
1488         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
1489         "\n",
1490         "        var icon_img = document.createElement('img');\n",
1491         "        icon_img.src = '_images/' + image + '.png';\n",
1492         "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
1493         "        icon_img.alt = tooltip;\n",
1494         "        button.appendChild(icon_img);\n",
1495         "\n",
1496         "        buttonGroup.appendChild(button);\n",
1497         "    }\n",
1498         "\n",
1499         "    if (buttonGroup.hasChildNodes()) {\n",
1500         "        toolbar.appendChild(buttonGroup);\n",
1501         "    }\n",
1502         "\n",
1503         "    var fmt_picker = document.createElement('select');\n",
1504         "    fmt_picker.classList = 'mpl-widget';\n",
1505         "    toolbar.appendChild(fmt_picker);\n",
1506         "    this.format_dropdown = fmt_picker;\n",
1507         "\n",
1508         "    for (var ind in mpl.extensions) {\n",
1509         "        var fmt = mpl.extensions[ind];\n",
1510         "        var option = document.createElement('option');\n",
1511         "        option.selected = fmt === mpl.default_extension;\n",
1512         "        option.innerHTML = fmt;\n",
1513         "        fmt_picker.appendChild(option);\n",
1514         "    }\n",
1515         "\n",
1516         "    var status_bar = document.createElement('span');\n",
1517         "    status_bar.classList = 'mpl-message';\n",
1518         "    toolbar.appendChild(status_bar);\n",
1519         "    this.message = status_bar;\n",
1520         "};\n",
1521         "\n",
1522         "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
1523         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
1524         "    // which will in turn request a refresh of the image.\n",
1525         "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
1526         "};\n",
1527         "\n",
1528         "mpl.figure.prototype.send_message = function (type, properties) {\n",
1529         "    properties['type'] = type;\n",
1530         "    properties['figure_id'] = this.id;\n",
1531         "    this.ws.send(JSON.stringify(properties));\n",
1532         "};\n",
1533         "\n",
1534         "mpl.figure.prototype.send_draw_message = function () {\n",
1535         "    if (!this.waiting) {\n",
1536         "        this.waiting = true;\n",
1537         "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
1538         "    }\n",
1539         "};\n",
1540         "\n",
1541         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
1542         "    var format_dropdown = fig.format_dropdown;\n",
1543         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
1544         "    fig.ondownload(fig, format);\n",
1545         "};\n",
1546         "\n",
1547         "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
1548         "    var size = msg['size'];\n",
1549         "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
1550         "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
1551         "        fig.send_message('refresh', {});\n",
1552         "    }\n",
1553         "};\n",
1554         "\n",
1555         "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
1556         "    var x0 = msg['x0'] / fig.ratio;\n",
1557         "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
1558         "    var x1 = msg['x1'] / fig.ratio;\n",
1559         "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
1560         "    x0 = Math.floor(x0) + 0.5;\n",
1561         "    y0 = Math.floor(y0) + 0.5;\n",
1562         "    x1 = Math.floor(x1) + 0.5;\n",
1563         "    y1 = Math.floor(y1) + 0.5;\n",
1564         "    var min_x = Math.min(x0, x1);\n",
1565         "    var min_y = Math.min(y0, y1);\n",
1566         "    var width = Math.abs(x1 - x0);\n",
1567         "    var height = Math.abs(y1 - y0);\n",
1568         "\n",
1569         "    fig.rubberband_context.clearRect(\n",
1570         "        0,\n",
1571         "        0,\n",
1572         "        fig.canvas.width / fig.ratio,\n",
1573         "        fig.canvas.height / fig.ratio\n",
1574         "    );\n",
1575         "\n",
1576         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
1577         "};\n",
1578         "\n",
1579         "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
1580         "    // Updates the figure title.\n",
1581         "    fig.header.textContent = msg['label'];\n",
1582         "};\n",
1583         "\n",
1584         "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
1585         "    var cursor = msg['cursor'];\n",
1586         "    switch (cursor) {\n",
1587         "        case 0:\n",
1588         "            cursor = 'pointer';\n",
1589         "            break;\n",
1590         "        case 1:\n",
1591         "            cursor = 'default';\n",
1592         "            break;\n",
1593         "        case 2:\n",
1594         "            cursor = 'crosshair';\n",
1595         "            break;\n",
1596         "        case 3:\n",
1597         "            cursor = 'move';\n",
1598         "            break;\n",
1599         "    }\n",
1600         "    fig.rubberband_canvas.style.cursor = cursor;\n",
1601         "};\n",
1602         "\n",
1603         "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
1604         "    fig.message.textContent = msg['message'];\n",
1605         "};\n",
1606         "\n",
1607         "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
1608         "    // Request the server to send over a new figure.\n",
1609         "    fig.send_draw_message();\n",
1610         "};\n",
1611         "\n",
1612         "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
1613         "    fig.image_mode = msg['mode'];\n",
1614         "};\n",
1615         "\n",
1616         "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
1617         "    for (var key in msg) {\n",
1618         "        if (!(key in fig.buttons)) {\n",
1619         "            continue;\n",
1620         "        }\n",
1621         "        fig.buttons[key].disabled = !msg[key];\n",
1622         "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
1623         "    }\n",
1624         "};\n",
1625         "\n",
1626         "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
1627         "    if (msg['mode'] === 'PAN') {\n",
1628         "        fig.buttons['Pan'].classList.add('active');\n",
1629         "        fig.buttons['Zoom'].classList.remove('active');\n",
1630         "    } else if (msg['mode'] === 'ZOOM') {\n",
1631         "        fig.buttons['Pan'].classList.remove('active');\n",
1632         "        fig.buttons['Zoom'].classList.add('active');\n",
1633         "    } else {\n",
1634         "        fig.buttons['Pan'].classList.remove('active');\n",
1635         "        fig.buttons['Zoom'].classList.remove('active');\n",
1636         "    }\n",
1637         "};\n",
1638         "\n",
1639         "mpl.figure.prototype.updated_canvas_event = function () {\n",
1640         "    // Called whenever the canvas gets updated.\n",
1641         "    this.send_message('ack', {});\n",
1642         "};\n",
1643         "\n",
1644         "// A function to construct a web socket function for onmessage handling.\n",
1645         "// Called in the figure constructor.\n",
1646         "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
1647         "    return function socket_on_message(evt) {\n",
1648         "        if (evt.data instanceof Blob) {\n",
1649         "            /* FIXME: We get \"Resource interpreted as Image but\n",
1650         "             * transferred with MIME type text/plain:\" errors on\n",
1651         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
1652         "             * to be part of the websocket stream */\n",
1653         "            evt.data.type = 'image/png';\n",
1654         "\n",
1655         "            /* Free the memory for the previous frames */\n",
1656         "            if (fig.imageObj.src) {\n",
1657         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
1658         "                    fig.imageObj.src\n",
1659         "                );\n",
1660         "            }\n",
1661         "\n",
1662         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
1663         "                evt.data\n",
1664         "            );\n",
1665         "            fig.updated_canvas_event();\n",
1666         "            fig.waiting = false;\n",
1667         "            return;\n",
1668         "        } else if (\n",
1669         "            typeof evt.data === 'string' &&\n",
1670         "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
1671         "        ) {\n",
1672         "            fig.imageObj.src = evt.data;\n",
1673         "            fig.updated_canvas_event();\n",
1674         "            fig.waiting = false;\n",
1675         "            return;\n",
1676         "        }\n",
1677         "\n",
1678         "        var msg = JSON.parse(evt.data);\n",
1679         "        var msg_type = msg['type'];\n",
1680         "\n",
1681         "        // Call the  \"handle_{type}\" callback, which takes\n",
1682         "        // the figure and JSON message as its only arguments.\n",
1683         "        try {\n",
1684         "            var callback = fig['handle_' + msg_type];\n",
1685         "        } catch (e) {\n",
1686         "            console.log(\n",
1687         "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
1688         "                msg\n",
1689         "            );\n",
1690         "            return;\n",
1691         "        }\n",
1692         "\n",
1693         "        if (callback) {\n",
1694         "            try {\n",
1695         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
1696         "                callback(fig, msg);\n",
1697         "            } catch (e) {\n",
1698         "                console.log(\n",
1699         "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
1700         "                    e,\n",
1701         "                    e.stack,\n",
1702         "                    msg\n",
1703         "                );\n",
1704         "            }\n",
1705         "        }\n",
1706         "    };\n",
1707         "};\n",
1708         "\n",
1709         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
1710         "mpl.findpos = function (e) {\n",
1711         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
1712         "    var targ;\n",
1713         "    if (!e) {\n",
1714         "        e = window.event;\n",
1715         "    }\n",
1716         "    if (e.target) {\n",
1717         "        targ = e.target;\n",
1718         "    } else if (e.srcElement) {\n",
1719         "        targ = e.srcElement;\n",
1720         "    }\n",
1721         "    if (targ.nodeType === 3) {\n",
1722         "        // defeat Safari bug\n",
1723         "        targ = targ.parentNode;\n",
1724         "    }\n",
1725         "\n",
1726         "    // pageX,Y are the mouse positions relative to the document\n",
1727         "    var boundingRect = targ.getBoundingClientRect();\n",
1728         "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
1729         "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
1730         "\n",
1731         "    return { x: x, y: y };\n",
1732         "};\n",
1733         "\n",
1734         "/*\n",
1735         " * return a copy of an object with only non-object keys\n",
1736         " * we need this to avoid circular references\n",
1737         " * http://stackoverflow.com/a/24161582/3208463\n",
1738         " */\n",
1739         "function simpleKeys(original) {\n",
1740         "    return Object.keys(original).reduce(function (obj, key) {\n",
1741         "        if (typeof original[key] !== 'object') {\n",
1742         "            obj[key] = original[key];\n",
1743         "        }\n",
1744         "        return obj;\n",
1745         "    }, {});\n",
1746         "}\n",
1747         "\n",
1748         "mpl.figure.prototype.mouse_event = function (event, name) {\n",
1749         "    var canvas_pos = mpl.findpos(event);\n",
1750         "\n",
1751         "    if (name === 'button_press') {\n",
1752         "        this.canvas.focus();\n",
1753         "        this.canvas_div.focus();\n",
1754         "    }\n",
1755         "\n",
1756         "    var x = canvas_pos.x * this.ratio;\n",
1757         "    var y = canvas_pos.y * this.ratio;\n",
1758         "\n",
1759         "    this.send_message(name, {\n",
1760         "        x: x,\n",
1761         "        y: y,\n",
1762         "        button: event.button,\n",
1763         "        step: event.step,\n",
1764         "        guiEvent: simpleKeys(event),\n",
1765         "    });\n",
1766         "\n",
1767         "    /* This prevents the web browser from automatically changing to\n",
1768         "     * the text insertion cursor when the button is pressed.  We want\n",
1769         "     * to control all of the cursor setting manually through the\n",
1770         "     * 'cursor' event from matplotlib */\n",
1771         "    event.preventDefault();\n",
1772         "    return false;\n",
1773         "};\n",
1774         "\n",
1775         "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
1776         "    // Handle any extra behaviour associated with a key event\n",
1777         "};\n",
1778         "\n",
1779         "mpl.figure.prototype.key_event = function (event, name) {\n",
1780         "    // Prevent repeat events\n",
1781         "    if (name === 'key_press') {\n",
1782         "        if (event.which === this._key) {\n",
1783         "            return;\n",
1784         "        } else {\n",
1785         "            this._key = event.which;\n",
1786         "        }\n",
1787         "    }\n",
1788         "    if (name === 'key_release') {\n",
1789         "        this._key = null;\n",
1790         "    }\n",
1791         "\n",
1792         "    var value = '';\n",
1793         "    if (event.ctrlKey && event.which !== 17) {\n",
1794         "        value += 'ctrl+';\n",
1795         "    }\n",
1796         "    if (event.altKey && event.which !== 18) {\n",
1797         "        value += 'alt+';\n",
1798         "    }\n",
1799         "    if (event.shiftKey && event.which !== 16) {\n",
1800         "        value += 'shift+';\n",
1801         "    }\n",
1802         "\n",
1803         "    value += 'k';\n",
1804         "    value += event.which.toString();\n",
1805         "\n",
1806         "    this._key_event_extra(event, name);\n",
1807         "\n",
1808         "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
1809         "    return false;\n",
1810         "};\n",
1811         "\n",
1812         "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
1813         "    if (name === 'download') {\n",
1814         "        this.handle_save(this, null);\n",
1815         "    } else {\n",
1816         "        this.send_message('toolbar_button', { name: name });\n",
1817         "    }\n",
1818         "};\n",
1819         "\n",
1820         "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
1821         "    this.message.textContent = tooltip;\n",
1822         "};\n",
1823         "\n",
1824         "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
1825         "// prettier-ignore\n",
1826         "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
1827         "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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
1828         "\n",
1829         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
1830         "\n",
1831         "mpl.default_extension = \"png\";/* global mpl */\n",
1832         "\n",
1833         "var comm_websocket_adapter = function (comm) {\n",
1834         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
1835         "    // object with the appropriate methods. Currently this is a non binary\n",
1836         "    // socket, so there is still some room for performance tuning.\n",
1837         "    var ws = {};\n",
1838         "\n",
1839         "    ws.close = function () {\n",
1840         "        comm.close();\n",
1841         "    };\n",
1842         "    ws.send = function (m) {\n",
1843         "        //console.log('sending', m);\n",
1844         "        comm.send(m);\n",
1845         "    };\n",
1846         "    // Register the callback with on_msg.\n",
1847         "    comm.on_msg(function (msg) {\n",
1848         "        //console.log('receiving', msg['content']['data'], msg);\n",
1849         "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
1850         "        ws.onmessage(msg['content']['data']);\n",
1851         "    });\n",
1852         "    return ws;\n",
1853         "};\n",
1854         "\n",
1855         "mpl.mpl_figure_comm = function (comm, msg) {\n",
1856         "    // This is the function which gets called when the mpl process\n",
1857         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
1858         "\n",
1859         "    var id = msg.content.data.id;\n",
1860         "    // Get hold of the div created by the display call when the Comm\n",
1861         "    // socket was opened in Python.\n",
1862         "    var element = document.getElementById(id);\n",
1863         "    var ws_proxy = comm_websocket_adapter(comm);\n",
1864         "\n",
1865         "    function ondownload(figure, _format) {\n",
1866         "        window.open(figure.canvas.toDataURL());\n",
1867         "    }\n",
1868         "\n",
1869         "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
1870         "\n",
1871         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
1872         "    // web socket which is closed, not our websocket->open comm proxy.\n",
1873         "    ws_proxy.onopen();\n",
1874         "\n",
1875         "    fig.parent_element = element;\n",
1876         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
1877         "    if (!fig.cell_info) {\n",
1878         "        console.error('Failed to find cell for figure', id, fig);\n",
1879         "        return;\n",
1880         "    }\n",
1881         "    fig.cell_info[0].output_area.element.on(\n",
1882         "        'cleared',\n",
1883         "        { fig: fig },\n",
1884         "        fig._remove_fig_handler\n",
1885         "    );\n",
1886         "};\n",
1887         "\n",
1888         "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
1889         "    var width = fig.canvas.width / fig.ratio;\n",
1890         "    fig.cell_info[0].output_area.element.off(\n",
1891         "        'cleared',\n",
1892         "        fig._remove_fig_handler\n",
1893         "    );\n",
1894         "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
1895         "\n",
1896         "    // Update the output cell to use the data from the current canvas.\n",
1897         "    fig.push_to_output();\n",
1898         "    var dataURL = fig.canvas.toDataURL();\n",
1899         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
1900         "    // the notebook keyboard shortcuts fail.\n",
1901         "    IPython.keyboard_manager.enable();\n",
1902         "    fig.parent_element.innerHTML =\n",
1903         "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
1904         "    fig.close_ws(fig, msg);\n",
1905         "};\n",
1906         "\n",
1907         "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
1908         "    fig.send_message('closing', msg);\n",
1909         "    // fig.ws.close()\n",
1910         "};\n",
1911         "\n",
1912         "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
1913         "    // Turn the data on the canvas into data in the output cell.\n",
1914         "    var width = this.canvas.width / this.ratio;\n",
1915         "    var dataURL = this.canvas.toDataURL();\n",
1916         "    this.cell_info[1]['text/html'] =\n",
1917         "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
1918         "};\n",
1919         "\n",
1920         "mpl.figure.prototype.updated_canvas_event = function () {\n",
1921         "    // Tell IPython that the notebook contents must change.\n",
1922         "    IPython.notebook.set_dirty(true);\n",
1923         "    this.send_message('ack', {});\n",
1924         "    var fig = this;\n",
1925         "    // Wait a second, then push the new image to the DOM so\n",
1926         "    // that it is saved nicely (might be nice to debounce this).\n",
1927         "    setTimeout(function () {\n",
1928         "        fig.push_to_output();\n",
1929         "    }, 1000);\n",
1930         "};\n",
1931         "\n",
1932         "mpl.figure.prototype._init_toolbar = function () {\n",
1933         "    var fig = this;\n",
1934         "\n",
1935         "    var toolbar = document.createElement('div');\n",
1936         "    toolbar.classList = 'btn-toolbar';\n",
1937         "    this.root.appendChild(toolbar);\n",
1938         "\n",
1939         "    function on_click_closure(name) {\n",
1940         "        return function (_event) {\n",
1941         "            return fig.toolbar_button_onclick(name);\n",
1942         "        };\n",
1943         "    }\n",
1944         "\n",
1945         "    function on_mouseover_closure(tooltip) {\n",
1946         "        return function (event) {\n",
1947         "            if (!event.currentTarget.disabled) {\n",
1948         "                return fig.toolbar_button_onmouseover(tooltip);\n",
1949         "            }\n",
1950         "        };\n",
1951         "    }\n",
1952         "\n",
1953         "    fig.buttons = {};\n",
1954         "    var buttonGroup = document.createElement('div');\n",
1955         "    buttonGroup.classList = 'btn-group';\n",
1956         "    var button;\n",
1957         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
1958         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
1959         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
1960         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
1961         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
1962         "\n",
1963         "        if (!name) {\n",
1964         "            /* Instead of a spacer, we start a new button group. */\n",
1965         "            if (buttonGroup.hasChildNodes()) {\n",
1966         "                toolbar.appendChild(buttonGroup);\n",
1967         "            }\n",
1968         "            buttonGroup = document.createElement('div');\n",
1969         "            buttonGroup.classList = 'btn-group';\n",
1970         "            continue;\n",
1971         "        }\n",
1972         "\n",
1973         "        button = fig.buttons[name] = document.createElement('button');\n",
1974         "        button.classList = 'btn btn-default';\n",
1975         "        button.href = '#';\n",
1976         "        button.title = name;\n",
1977         "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
1978         "        button.addEventListener('click', on_click_closure(method_name));\n",
1979         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
1980         "        buttonGroup.appendChild(button);\n",
1981         "    }\n",
1982         "\n",
1983         "    if (buttonGroup.hasChildNodes()) {\n",
1984         "        toolbar.appendChild(buttonGroup);\n",
1985         "    }\n",
1986         "\n",
1987         "    // Add the status bar.\n",
1988         "    var status_bar = document.createElement('span');\n",
1989         "    status_bar.classList = 'mpl-message pull-right';\n",
1990         "    toolbar.appendChild(status_bar);\n",
1991         "    this.message = status_bar;\n",
1992         "\n",
1993         "    // Add the close button to the window.\n",
1994         "    var buttongrp = document.createElement('div');\n",
1995         "    buttongrp.classList = 'btn-group inline pull-right';\n",
1996         "    button = document.createElement('button');\n",
1997         "    button.classList = 'btn btn-mini btn-primary';\n",
1998         "    button.href = '#';\n",
1999         "    button.title = 'Stop Interaction';\n",
2000         "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
2001         "    button.addEventListener('click', function (_evt) {\n",
2002         "        fig.handle_close(fig, {});\n",
2003         "    });\n",
2004         "    button.addEventListener(\n",
2005         "        'mouseover',\n",
2006         "        on_mouseover_closure('Stop Interaction')\n",
2007         "    );\n",
2008         "    buttongrp.appendChild(button);\n",
2009         "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
2010         "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
2011         "};\n",
2012         "\n",
2013         "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
2014         "    var fig = event.data.fig;\n",
2015         "    if (event.target !== this) {\n",
2016         "        // Ignore bubbled events from children.\n",
2017         "        return;\n",
2018         "    }\n",
2019         "    fig.close_ws(fig, {});\n",
2020         "};\n",
2021         "\n",
2022         "mpl.figure.prototype._root_extra_style = function (el) {\n",
2023         "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
2024         "};\n",
2025         "\n",
2026         "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
2027         "    // this is important to make the div 'focusable\n",
2028         "    el.setAttribute('tabindex', 0);\n",
2029         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
2030         "    // off when our div gets focus\n",
2031         "\n",
2032         "    // location in version 3\n",
2033         "    if (IPython.notebook.keyboard_manager) {\n",
2034         "        IPython.notebook.keyboard_manager.register_events(el);\n",
2035         "    } else {\n",
2036         "        // location in version 2\n",
2037         "        IPython.keyboard_manager.register_events(el);\n",
2038         "    }\n",
2039         "};\n",
2040         "\n",
2041         "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
2042         "    var manager = IPython.notebook.keyboard_manager;\n",
2043         "    if (!manager) {\n",
2044         "        manager = IPython.keyboard_manager;\n",
2045         "    }\n",
2046         "\n",
2047         "    // Check for shift+enter\n",
2048         "    if (event.shiftKey && event.which === 13) {\n",
2049         "        this.canvas_div.blur();\n",
2050         "        // select the cell after this one\n",
2051         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
2052         "        IPython.notebook.select(index + 1);\n",
2053         "    }\n",
2054         "};\n",
2055         "\n",
2056         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
2057         "    fig.ondownload(fig, null);\n",
2058         "};\n",
2059         "\n",
2060         "mpl.find_output_cell = function (html_output) {\n",
2061         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
2062         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
2063         "    // IPython event is triggered only after the cells have been serialised, which for\n",
2064         "    // our purposes (turning an active figure into a static one), is too late.\n",
2065         "    var cells = IPython.notebook.get_cells();\n",
2066         "    var ncells = cells.length;\n",
2067         "    for (var i = 0; i < ncells; i++) {\n",
2068         "        var cell = cells[i];\n",
2069         "        if (cell.cell_type === 'code') {\n",
2070         "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
2071         "                var data = cell.output_area.outputs[j];\n",
2072         "                if (data.data) {\n",
2073         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
2074         "                    data = data.data;\n",
2075         "                }\n",
2076         "                if (data['text/html'] === html_output) {\n",
2077         "                    return [cell, data, j];\n",
2078         "                }\n",
2079         "            }\n",
2080         "        }\n",
2081         "    }\n",
2082         "};\n",
2083         "\n",
2084         "// Register the function which deals with the matplotlib target/channel.\n",
2085         "// The kernel may be null if the page has been refreshed.\n",
2086         "if (IPython.notebook.kernel !== null) {\n",
2087         "    IPython.notebook.kernel.comm_manager.register_target(\n",
2088         "        'matplotlib',\n",
2089         "        mpl.mpl_figure_comm\n",
2090         "    );\n",
2091         "}\n"
2092        ],
2093        "text/plain": [
2094         "<IPython.core.display.Javascript object>"
2095        ]
2096       },
2097       "metadata": {},
2098       "output_type": "display_data"
2099      },
2100      {
2101       "data": {
2102        "text/html": [
2103         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xu2dCdxdRXn/nzcBwhaIsRD2EBDQJG1lKzuIZYm1SgSLtI2AmgCiVPCvUElJgRAQsbhVWUQBwYViIWgtYalCwmYBxQIJKLKILAEUUhAJhbz/z+/Aebm5773vPec+Z5lzzvd8Pnxs887MmfnOM/P85pmZcwcGBwcHjQcCEIAABCAAAQhAoDEEBhCAjelrGgoBCEAAAhCAAAQiAghADAECEIAABCAAAQg0jAACsGEdTnMhAAEIQAACEIAAAhAbgAAEIAABCEAAAg0jgABsWIfTXAhAAAIQgAAEIIAAxAYgAAEIQAACEIBAwwggABvW4TQXAhCAAAQgAAEIIACxAQhAAAIQgAAEINAwAgjAhnU4zYUABCAAAQhAAAIIQGwAAhCAAAQgAAEINIwAArBhHU5zIQABCEAAAhCAAAIQG4AABCAAAQhAAAINI4AAbFiH01wIQAACEIAABCCAAMQGIAABCEAAAhCAQMMIIAAb1uE0FwIQgAAEIAABCCAAsQEIQAACEIAABCDQMAIIwIZ1OM2FAAQgAAEIQAACCEBsAAIQgAAEIAABCDSMAAKwYR1OcyEAAQhAAAIQgAACEBuAAAQgAAEIQAACDSOAAGxYh9NcCEAAAhCAAAQggADEBiAAAQhAAAIQgEDDCCAAG9bhNBcCEIAABCAAAQggALEBCEAAAhCAAAQg0DACCMCGdTjNhQAEIAABCEAAAghAbAACEIAABCAAAQg0jAACsGEdTnMhAAEIQAACEIAAAhAbgAAEIAABCEAAAg0jgABsWIfTXAhAAAIQgAAEIIAAxAYgAAEIQAACEIBAwwggABvW4TQXAhCAAAQgAAEIIACxAQhAAAIQgAAEINAwAgjAhnU4zYUABCAAAQhAAAIIQGwAAhCAAAQgAAEINIwAArBhHU5zIQABCEAAAhCAAAIQG4AABCAAAQhAAAINI4AArHiH/8///I994QtfsBtuuMGeeOIJW2WVVWzrrbe2Qw45xGbOnGnjx48PtoXveMc7orqp7jz5ErjooovsQx/6kD300EO2+eab5/uyEks//PDD7fvf/7698MILPWshDrJBsany0z6OXnzxRfvc5z4XtS3+W9y+k08+2U455RR7+umn7U/+5E+q3Oyo7nF7BgcHg2jL448/bueff75Nnz7d3v72twdRp7gSmmf33ntv+8lPfjLMLnpVNJ4/br/9dtthhx1GTK4xqHc9/PDDvYrl7yUTQACW3AGe13/961+3o48+2rbZZpvofydPnmz/93//Z3fccYfpb3/+539uV155pecVueZFAOaKd6XC5fB//etf27bbbmtjxowp7sUFv6mJAnDx4sURZY1/Pc8884ytt9569s///M+RQGp96iYAf/vb35r+23nnnQu2tM6v09y744472oUXXmiyxZCe//3f/zXZiuxknXXWSVU1BGAqXJVJjACsTFetXNFbb73V9thjD9t3331t/vz5w5z6yy+/bAsWLLD3vve9wbYwFAGo6MFLL71ka6yxRiGsFKFZc801C3lX1V+iBc3AwEAU2U7yNFEAtnNpkgBMYhNFpglRAKYdQ514IQCLtKLi3oUALI51pm96z3veEwm8Bx980DbddNOeZa9YscI+//nP2ze/+c1oG3Dddde1adOm2emnn26bbLLJUH6JMjkQRRD/3//7f/bzn//cJkyYEEUTtIX4ox/9yE466SS77777bMstt7SzzjorKid+4gjDz372M5s7d65df/31kQNXfbVVrchE/HQSgBKu2r669NJLo3pqpfrXf/3X0b/FeT/72c/aiSeeaFdddVVUbvzI+f/bv/2b/fSnP7U//dM/7cpE9fnYxz5mU6dOtS996UtRZOzLX/6yHXXUUfarX/0qaqvqvWzZMttiiy3s4x//eJS+9bn33nvtuOOOs5tuusnWWmstO/jgg+2v/uqvorq2brHEPL/2ta/ZP/7jP9pdd90VifLvfe97phX5qaeeav/+7/9ujz32WNS+v/mbv7F58+ZFZcbP5ZdfHvWdmGsy32CDDaItHPWlHvWt+vGSSy6x3/zmN9FiYLPNNrOPfOQj9olPfCJK020LWGWIwf333x+J0r322isq621ve9tKXLWtqrr/wz/8gy1cuNDe9KY3RW1W2l4RRW21irXqI7a//OUvbaONNrJjjz02Ki9+4i2qb33rW9G7xEjHGhS1eOtb3xq1N2ldZQMq+7bbbova9YEPfCCyoVbh3WkLOGmfxDa0/fbbm+xR3KdMmWL/+q//ajvttFPUX+pzRV7/4i/+ItoWfMtb3tLVJmVPYiT7lQ3oufPOO6PtNkVs9Pf4kf3IXvR3Pa3jSNtukyZNGvae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YJ4pzp6FwbsnoswTwDw7pAjA7FimKgkjToUrk8QwzwRj4kLgnRhVZglhnhnKRAXBOxGmTBPBPDucCMDsWKYqafny5XbGGWfYZz7zGRszZkyqvCTujwDM++PWby5490uu/3ww759dPznh3Q81Xx6Y+/i15kYAZseSkiAAAQhAAAIQgEAlCCAAK9FNVBICEIAABCAAAQhkRwABmB1LSoIABCAAAQhAAAKVIIAArEQ3UUkIQAACEIAABCCQHQEEYHYsKQkCEIAABCAAAQhUggACMMdu+trXvmZnnXWWPfHEEzZlyhT74he/aHvssUfXN9544432yU9+0u69997o6+THH3+8HXXUUTnWsH5Fp2F+xRVX2DnnnGN33XWX6WaZ+ujkk0+2/fffv35gcmpRGt6tVbj55pttr732sqlTp0b8eZITSMtctn3qqafapZdeak8++WT0s1ezZ8+2D3/4w8lf2uCUaXl/+9vfts997nP2q1/9KvqN2WnTptnnP/95e/Ob39xgismavnDhwshn3nnnnZHfvPLKK2369OkjZsZvJmPbKRUCsH92I+a87LLL7IMf/KBp8thtt93svPPOswsuuMAWL15sm2222bC8Dz30UOQMZ82aZUceeaTJQR599NH23e9+1w466KCcalmvYtMyP/bYYyOhvffee9u4cePswgsvjCbqn/70p7btttvWC04OrUnLO67CsmXLbLvttrO3vOUttnTpUgRgir7ph/kBBxwQcT7ttNMi5k899ZS98sortuuuu6Z4czOTpuV90003RQubL3zhC/ae97zHHnvssWgRv9VWW0VihmdkAldffXXk+zQ/yO/1EoD4TZ9FIQB9/Lrm3mmnnSIjVoQpft72trdFqxl9/6/9OeGEE+wHP/iBLVmyZOhPmjh+8Ytf2K233ppTLetVbFrmnVqvKOAHPvABmzNnTr3g5NCafnkfcsghkUMcPXq0zZ8/HwGYom/SMl+wYIGJ94MPPmjjx49P8SaSikBa3lpAas7/9a9/PQTwK1/5ShQR1O++8yQnMDAw0FMA4jeT8+yUEgHo49cx98svv2xrrrmmXX755fa+971vKM0nPvGJyNkpZN3+7LnnnlHU6Utf+tLQn7T6Ofjgg+3FF1+0VVddNYea1qfIfpi3t37FihW2+eabR1vvH//4x+sDJ4eW9MtbUVZFxbWoUUQKAZi8c/phrl2EX/7yl7bDDjvYJZdcYmuttZa9973vtblz59oaa6yR/OUNTNkP71tuuSXaUdDc/a53vSuKtmoO1+L/3HPPbSDF/pucRADiN/vnq5wIQB+/jrkff/xx23jjjaNQdus2y+mnn24XX3yx3X///cPybb311nb44YfbiSeeOPQ3TSbaPlZ5G264YQ41rU+R/TBvb73Onnz2s5+NorDrr79+feDk0JJ+eOtM1O67726LFi0y2bvOWyIAk3dOP8x1/uyGG26wffbZJ4pqP/PMM9HRkne+8532zW9+M/nLG5iyH97C9P3vf98+9KEP2UsvvRRttUtw699YxKczoiQCEL+Zjml7agSgj9+IAlACbpdddhlKM2/evGgVft9993UUgJo09NNw8SMBKYepw7AbbLBBDjWtT5HxZJ2GeWvrddZy5syZdtVVV0XOkmdkAml5v/rqq7bZgjReAAAE9ElEQVTzzjvbRz7ykaGLTQjAdFaWlrlK32+//SLBrcsfupCgR5ef3v/+99sf/vAHooAjdEE/vHXGW/PHcccdF10m09z96U9/2nbccUf7xje+ka7DG546qQDEb/ZvKAjA/tl1zdnP1gGhbF9H9MM8fqMOemsS0Zb9u9/9bl9FGpI7Le/nnnvO3vSmN0Xn/uJHW+6Dg4PRv1177bVRVIqnO4G0zFXSYYcdFu1EPPDAA0MFK8I9efLkaGtYZzF5OhPoh7cu/inyp7kkfnQxRF9/YCcnnaUlEYD4zXRM21MjAH38uubW4eHtt98+Ou8UP5p0dSOv2yWQH/7wh9Et4fj56Ec/Gp0Z5BJIsk5Ky1ylKvKnz2Hof3t9biBZLZqTKg1vib1W2xYljY0f//jH0fbYpEmTovNpPCMTSMNcJZ1//vmm2+46i7b22mtHhSvKfeCBB9oLL7xABLCHwaXlrZurq6yyimlRGT+av3UUSDeC9dUBnmQEkghAXQLBbybj2SkVArB/diPmjD8foIO/2gbWRPz1r389+sbfxIkTo61eTQjf+ta3onLi6+z6BIw+BaNJQ7eA+QxM8g5Ky1xsDz300OjijRxi/OhwfLxdlvztzUuZlnc7IbaA09tMWuYSebqAoO33U045JToDqKMO+lSJ5iOekQmk5X3RRRdF8/eXv/zloS1gCfBRo0ZFn5fiGZmA7DWOVutS5Nlnnx1dqtENdn0+Db+ZrQUhALPluVJpinDo+r/Ogegbf/o2lELWenTh4+GHH44OaMePbgfr7Ej8IWitbvgQdLoOSsP8He94R8cb2do200TO05tAGt4IwN48k6RIy1xnjo855phoK1gfI9atVN3A5hZwEtqvRarTzOP67IsW/lrU6/uiOtpw5plnRhcDeUYmIH8owdf+xHMyfjNbC0IAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEkAAZsuT0iAAAQhAAAIQgEDwBBCAwXcRFYQABCAAAQhAAALZEvj/NlkGiUjl9IAAAAAASUVORK5CYII=\" width=\"640\">"
2104        ],
2105        "text/plain": [
2106         "<IPython.core.display.HTML object>"
2107        ]
2108       },
2109       "metadata": {},
2110       "output_type": "display_data"
2111      }
2112     ],
2113     "source": [
2114      "from sklearn.datasets import make_friedman1\n",
2115      "plt.figure()\n",
2116      "plt.title('Complex regression problem with one input variable')\n",
2117      "X_F1, y_F1 = make_friedman1(n_samples = 100,\n",
2118      "                           n_features = 8, random_state=0)\n",
2119      "\n",
2120      "plt.scatter(X_F1[:,2], y_F1, marker= 'o', s=50)\n",
2121      "plt.show()"
2122     ]
2123    },
2124    {
2125     "cell_type": "code",
2126     "execution_count": 13,
2127     "id": "b1615c05",
2128     "metadata": {},
2129     "outputs": [
2130      {
2131       "data": {
2132        "application/javascript": [
2133         "/* Put everything inside the global mpl namespace */\n",
2134         "/* global mpl */\n",
2135         "window.mpl = {};\n",
2136         "\n",
2137         "mpl.get_websocket_type = function () {\n",
2138         "    if (typeof WebSocket !== 'undefined') {\n",
2139         "        return WebSocket;\n",
2140         "    } else if (typeof MozWebSocket !== 'undefined') {\n",
2141         "        return MozWebSocket;\n",
2142         "    } else {\n",
2143         "        alert(\n",
2144         "            'Your browser does not have WebSocket support. ' +\n",
2145         "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
2146         "                'Firefox 4 and 5 are also supported but you ' +\n",
2147         "                'have to enable WebSockets in about:config.'\n",
2148         "        );\n",
2149         "    }\n",
2150         "};\n",
2151         "\n",
2152         "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
2153         "    this.id = figure_id;\n",
2154         "\n",
2155         "    this.ws = websocket;\n",
2156         "\n",
2157         "    this.supports_binary = this.ws.binaryType !== undefined;\n",
2158         "\n",
2159         "    if (!this.supports_binary) {\n",
2160         "        var warnings = document.getElementById('mpl-warnings');\n",
2161         "        if (warnings) {\n",
2162         "            warnings.style.display = 'block';\n",
2163         "            warnings.textContent =\n",
2164         "                'This browser does not support binary websocket messages. ' +\n",
2165         "                'Performance may be slow.';\n",
2166         "        }\n",
2167         "    }\n",
2168         "\n",
2169         "    this.imageObj = new Image();\n",
2170         "\n",
2171         "    this.context = undefined;\n",
2172         "    this.message = undefined;\n",
2173         "    this.canvas = undefined;\n",
2174         "    this.rubberband_canvas = undefined;\n",
2175         "    this.rubberband_context = undefined;\n",
2176         "    this.format_dropdown = undefined;\n",
2177         "\n",
2178         "    this.image_mode = 'full';\n",
2179         "\n",
2180         "    this.root = document.createElement('div');\n",
2181         "    this.root.setAttribute('style', 'display: inline-block');\n",
2182         "    this._root_extra_style(this.root);\n",
2183         "\n",
2184         "    parent_element.appendChild(this.root);\n",
2185         "\n",
2186         "    this._init_header(this);\n",
2187         "    this._init_canvas(this);\n",
2188         "    this._init_toolbar(this);\n",
2189         "\n",
2190         "    var fig = this;\n",
2191         "\n",
2192         "    this.waiting = false;\n",
2193         "\n",
2194         "    this.ws.onopen = function () {\n",
2195         "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
2196         "        fig.send_message('send_image_mode', {});\n",
2197         "        if (fig.ratio !== 1) {\n",
2198         "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
2199         "        }\n",
2200         "        fig.send_message('refresh', {});\n",
2201         "    };\n",
2202         "\n",
2203         "    this.imageObj.onload = function () {\n",
2204         "        if (fig.image_mode === 'full') {\n",
2205         "            // Full images could contain transparency (where diff images\n",
2206         "            // almost always do), so we need to clear the canvas so that\n",
2207         "            // there is no ghosting.\n",
2208         "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
2209         "        }\n",
2210         "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
2211         "    };\n",
2212         "\n",
2213         "    this.imageObj.onunload = function () {\n",
2214         "        fig.ws.close();\n",
2215         "    };\n",
2216         "\n",
2217         "    this.ws.onmessage = this._make_on_message_function(this);\n",
2218         "\n",
2219         "    this.ondownload = ondownload;\n",
2220         "};\n",
2221         "\n",
2222         "mpl.figure.prototype._init_header = function () {\n",
2223         "    var titlebar = document.createElement('div');\n",
2224         "    titlebar.classList =\n",
2225         "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
2226         "    var titletext = document.createElement('div');\n",
2227         "    titletext.classList = 'ui-dialog-title';\n",
2228         "    titletext.setAttribute(\n",
2229         "        'style',\n",
2230         "        'width: 100%; text-align: center; padding: 3px;'\n",
2231         "    );\n",
2232         "    titlebar.appendChild(titletext);\n",
2233         "    this.root.appendChild(titlebar);\n",
2234         "    this.header = titletext;\n",
2235         "};\n",
2236         "\n",
2237         "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
2238         "\n",
2239         "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
2240         "\n",
2241         "mpl.figure.prototype._init_canvas = function () {\n",
2242         "    var fig = this;\n",
2243         "\n",
2244         "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
2245         "    canvas_div.setAttribute(\n",
2246         "        'style',\n",
2247         "        'border: 1px solid #ddd;' +\n",
2248         "            'box-sizing: content-box;' +\n",
2249         "            'clear: both;' +\n",
2250         "            'min-height: 1px;' +\n",
2251         "            'min-width: 1px;' +\n",
2252         "            'outline: 0;' +\n",
2253         "            'overflow: hidden;' +\n",
2254         "            'position: relative;' +\n",
2255         "            'resize: both;'\n",
2256         "    );\n",
2257         "\n",
2258         "    function on_keyboard_event_closure(name) {\n",
2259         "        return function (event) {\n",
2260         "            return fig.key_event(event, name);\n",
2261         "        };\n",
2262         "    }\n",
2263         "\n",
2264         "    canvas_div.addEventListener(\n",
2265         "        'keydown',\n",
2266         "        on_keyboard_event_closure('key_press')\n",
2267         "    );\n",
2268         "    canvas_div.addEventListener(\n",
2269         "        'keyup',\n",
2270         "        on_keyboard_event_closure('key_release')\n",
2271         "    );\n",
2272         "\n",
2273         "    this._canvas_extra_style(canvas_div);\n",
2274         "    this.root.appendChild(canvas_div);\n",
2275         "\n",
2276         "    var canvas = (this.canvas = document.createElement('canvas'));\n",
2277         "    canvas.classList.add('mpl-canvas');\n",
2278         "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
2279         "\n",
2280         "    this.context = canvas.getContext('2d');\n",
2281         "\n",
2282         "    var backingStore =\n",
2283         "        this.context.backingStorePixelRatio ||\n",
2284         "        this.context.webkitBackingStorePixelRatio ||\n",
2285         "        this.context.mozBackingStorePixelRatio ||\n",
2286         "        this.context.msBackingStorePixelRatio ||\n",
2287         "        this.context.oBackingStorePixelRatio ||\n",
2288         "        this.context.backingStorePixelRatio ||\n",
2289         "        1;\n",
2290         "\n",
2291         "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
2292         "\n",
2293         "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
2294         "        'canvas'\n",
2295         "    ));\n",
2296         "    rubberband_canvas.setAttribute(\n",
2297         "        'style',\n",
2298         "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
2299         "    );\n",
2300         "\n",
2301         "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
2302         "    if (this.ResizeObserver === undefined) {\n",
2303         "        if (window.ResizeObserver !== undefined) {\n",
2304         "            this.ResizeObserver = window.ResizeObserver;\n",
2305         "        } else {\n",
2306         "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
2307         "            this.ResizeObserver = obs.ResizeObserver;\n",
2308         "        }\n",
2309         "    }\n",
2310         "\n",
2311         "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
2312         "        var nentries = entries.length;\n",
2313         "        for (var i = 0; i < nentries; i++) {\n",
2314         "            var entry = entries[i];\n",
2315         "            var width, height;\n",
2316         "            if (entry.contentBoxSize) {\n",
2317         "                if (entry.contentBoxSize instanceof Array) {\n",
2318         "                    // Chrome 84 implements new version of spec.\n",
2319         "                    width = entry.contentBoxSize[0].inlineSize;\n",
2320         "                    height = entry.contentBoxSize[0].blockSize;\n",
2321         "                } else {\n",
2322         "                    // Firefox implements old version of spec.\n",
2323         "                    width = entry.contentBoxSize.inlineSize;\n",
2324         "                    height = entry.contentBoxSize.blockSize;\n",
2325         "                }\n",
2326         "            } else {\n",
2327         "                // Chrome <84 implements even older version of spec.\n",
2328         "                width = entry.contentRect.width;\n",
2329         "                height = entry.contentRect.height;\n",
2330         "            }\n",
2331         "\n",
2332         "            // Keep the size of the canvas and rubber band canvas in sync with\n",
2333         "            // the canvas container.\n",
2334         "            if (entry.devicePixelContentBoxSize) {\n",
2335         "                // Chrome 84 implements new version of spec.\n",
2336         "                canvas.setAttribute(\n",
2337         "                    'width',\n",
2338         "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
2339         "                );\n",
2340         "                canvas.setAttribute(\n",
2341         "                    'height',\n",
2342         "                    entry.devicePixelContentBoxSize[0].blockSize\n",
2343         "                );\n",
2344         "            } else {\n",
2345         "                canvas.setAttribute('width', width * fig.ratio);\n",
2346         "                canvas.setAttribute('height', height * fig.ratio);\n",
2347         "            }\n",
2348         "            canvas.setAttribute(\n",
2349         "                'style',\n",
2350         "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
2351         "            );\n",
2352         "\n",
2353         "            rubberband_canvas.setAttribute('width', width);\n",
2354         "            rubberband_canvas.setAttribute('height', height);\n",
2355         "\n",
2356         "            // And update the size in Python. We ignore the initial 0/0 size\n",
2357         "            // that occurs as the element is placed into the DOM, which should\n",
2358         "            // otherwise not happen due to the minimum size styling.\n",
2359         "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
2360         "                fig.request_resize(width, height);\n",
2361         "            }\n",
2362         "        }\n",
2363         "    });\n",
2364         "    this.resizeObserverInstance.observe(canvas_div);\n",
2365         "\n",
2366         "    function on_mouse_event_closure(name) {\n",
2367         "        return function (event) {\n",
2368         "            return fig.mouse_event(event, name);\n",
2369         "        };\n",
2370         "    }\n",
2371         "\n",
2372         "    rubberband_canvas.addEventListener(\n",
2373         "        'mousedown',\n",
2374         "        on_mouse_event_closure('button_press')\n",
2375         "    );\n",
2376         "    rubberband_canvas.addEventListener(\n",
2377         "        'mouseup',\n",
2378         "        on_mouse_event_closure('button_release')\n",
2379         "    );\n",
2380         "    // Throttle sequential mouse events to 1 every 20ms.\n",
2381         "    rubberband_canvas.addEventListener(\n",
2382         "        'mousemove',\n",
2383         "        on_mouse_event_closure('motion_notify')\n",
2384         "    );\n",
2385         "\n",
2386         "    rubberband_canvas.addEventListener(\n",
2387         "        'mouseenter',\n",
2388         "        on_mouse_event_closure('figure_enter')\n",
2389         "    );\n",
2390         "    rubberband_canvas.addEventListener(\n",
2391         "        'mouseleave',\n",
2392         "        on_mouse_event_closure('figure_leave')\n",
2393         "    );\n",
2394         "\n",
2395         "    canvas_div.addEventListener('wheel', function (event) {\n",
2396         "        if (event.deltaY < 0) {\n",
2397         "            event.step = 1;\n",
2398         "        } else {\n",
2399         "            event.step = -1;\n",
2400         "        }\n",
2401         "        on_mouse_event_closure('scroll')(event);\n",
2402         "    });\n",
2403         "\n",
2404         "    canvas_div.appendChild(canvas);\n",
2405         "    canvas_div.appendChild(rubberband_canvas);\n",
2406         "\n",
2407         "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
2408         "    this.rubberband_context.strokeStyle = '#000000';\n",
2409         "\n",
2410         "    this._resize_canvas = function (width, height, forward) {\n",
2411         "        if (forward) {\n",
2412         "            canvas_div.style.width = width + 'px';\n",
2413         "            canvas_div.style.height = height + 'px';\n",
2414         "        }\n",
2415         "    };\n",
2416         "\n",
2417         "    // Disable right mouse context menu.\n",
2418         "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
2419         "        event.preventDefault();\n",
2420         "        return false;\n",
2421         "    });\n",
2422         "\n",
2423         "    function set_focus() {\n",
2424         "        canvas.focus();\n",
2425         "        canvas_div.focus();\n",
2426         "    }\n",
2427         "\n",
2428         "    window.setTimeout(set_focus, 100);\n",
2429         "};\n",
2430         "\n",
2431         "mpl.figure.prototype._init_toolbar = function () {\n",
2432         "    var fig = this;\n",
2433         "\n",
2434         "    var toolbar = document.createElement('div');\n",
2435         "    toolbar.classList = 'mpl-toolbar';\n",
2436         "    this.root.appendChild(toolbar);\n",
2437         "\n",
2438         "    function on_click_closure(name) {\n",
2439         "        return function (_event) {\n",
2440         "            return fig.toolbar_button_onclick(name);\n",
2441         "        };\n",
2442         "    }\n",
2443         "\n",
2444         "    function on_mouseover_closure(tooltip) {\n",
2445         "        return function (event) {\n",
2446         "            if (!event.currentTarget.disabled) {\n",
2447         "                return fig.toolbar_button_onmouseover(tooltip);\n",
2448         "            }\n",
2449         "        };\n",
2450         "    }\n",
2451         "\n",
2452         "    fig.buttons = {};\n",
2453         "    var buttonGroup = document.createElement('div');\n",
2454         "    buttonGroup.classList = 'mpl-button-group';\n",
2455         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
2456         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
2457         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
2458         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
2459         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
2460         "\n",
2461         "        if (!name) {\n",
2462         "            /* Instead of a spacer, we start a new button group. */\n",
2463         "            if (buttonGroup.hasChildNodes()) {\n",
2464         "                toolbar.appendChild(buttonGroup);\n",
2465         "            }\n",
2466         "            buttonGroup = document.createElement('div');\n",
2467         "            buttonGroup.classList = 'mpl-button-group';\n",
2468         "            continue;\n",
2469         "        }\n",
2470         "\n",
2471         "        var button = (fig.buttons[name] = document.createElement('button'));\n",
2472         "        button.classList = 'mpl-widget';\n",
2473         "        button.setAttribute('role', 'button');\n",
2474         "        button.setAttribute('aria-disabled', 'false');\n",
2475         "        button.addEventListener('click', on_click_closure(method_name));\n",
2476         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
2477         "\n",
2478         "        var icon_img = document.createElement('img');\n",
2479         "        icon_img.src = '_images/' + image + '.png';\n",
2480         "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
2481         "        icon_img.alt = tooltip;\n",
2482         "        button.appendChild(icon_img);\n",
2483         "\n",
2484         "        buttonGroup.appendChild(button);\n",
2485         "    }\n",
2486         "\n",
2487         "    if (buttonGroup.hasChildNodes()) {\n",
2488         "        toolbar.appendChild(buttonGroup);\n",
2489         "    }\n",
2490         "\n",
2491         "    var fmt_picker = document.createElement('select');\n",
2492         "    fmt_picker.classList = 'mpl-widget';\n",
2493         "    toolbar.appendChild(fmt_picker);\n",
2494         "    this.format_dropdown = fmt_picker;\n",
2495         "\n",
2496         "    for (var ind in mpl.extensions) {\n",
2497         "        var fmt = mpl.extensions[ind];\n",
2498         "        var option = document.createElement('option');\n",
2499         "        option.selected = fmt === mpl.default_extension;\n",
2500         "        option.innerHTML = fmt;\n",
2501         "        fmt_picker.appendChild(option);\n",
2502         "    }\n",
2503         "\n",
2504         "    var status_bar = document.createElement('span');\n",
2505         "    status_bar.classList = 'mpl-message';\n",
2506         "    toolbar.appendChild(status_bar);\n",
2507         "    this.message = status_bar;\n",
2508         "};\n",
2509         "\n",
2510         "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
2511         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
2512         "    // which will in turn request a refresh of the image.\n",
2513         "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
2514         "};\n",
2515         "\n",
2516         "mpl.figure.prototype.send_message = function (type, properties) {\n",
2517         "    properties['type'] = type;\n",
2518         "    properties['figure_id'] = this.id;\n",
2519         "    this.ws.send(JSON.stringify(properties));\n",
2520         "};\n",
2521         "\n",
2522         "mpl.figure.prototype.send_draw_message = function () {\n",
2523         "    if (!this.waiting) {\n",
2524         "        this.waiting = true;\n",
2525         "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
2526         "    }\n",
2527         "};\n",
2528         "\n",
2529         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
2530         "    var format_dropdown = fig.format_dropdown;\n",
2531         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
2532         "    fig.ondownload(fig, format);\n",
2533         "};\n",
2534         "\n",
2535         "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
2536         "    var size = msg['size'];\n",
2537         "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
2538         "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
2539         "        fig.send_message('refresh', {});\n",
2540         "    }\n",
2541         "};\n",
2542         "\n",
2543         "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
2544         "    var x0 = msg['x0'] / fig.ratio;\n",
2545         "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
2546         "    var x1 = msg['x1'] / fig.ratio;\n",
2547         "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
2548         "    x0 = Math.floor(x0) + 0.5;\n",
2549         "    y0 = Math.floor(y0) + 0.5;\n",
2550         "    x1 = Math.floor(x1) + 0.5;\n",
2551         "    y1 = Math.floor(y1) + 0.5;\n",
2552         "    var min_x = Math.min(x0, x1);\n",
2553         "    var min_y = Math.min(y0, y1);\n",
2554         "    var width = Math.abs(x1 - x0);\n",
2555         "    var height = Math.abs(y1 - y0);\n",
2556         "\n",
2557         "    fig.rubberband_context.clearRect(\n",
2558         "        0,\n",
2559         "        0,\n",
2560         "        fig.canvas.width / fig.ratio,\n",
2561         "        fig.canvas.height / fig.ratio\n",
2562         "    );\n",
2563         "\n",
2564         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
2565         "};\n",
2566         "\n",
2567         "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
2568         "    // Updates the figure title.\n",
2569         "    fig.header.textContent = msg['label'];\n",
2570         "};\n",
2571         "\n",
2572         "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
2573         "    var cursor = msg['cursor'];\n",
2574         "    switch (cursor) {\n",
2575         "        case 0:\n",
2576         "            cursor = 'pointer';\n",
2577         "            break;\n",
2578         "        case 1:\n",
2579         "            cursor = 'default';\n",
2580         "            break;\n",
2581         "        case 2:\n",
2582         "            cursor = 'crosshair';\n",
2583         "            break;\n",
2584         "        case 3:\n",
2585         "            cursor = 'move';\n",
2586         "            break;\n",
2587         "    }\n",
2588         "    fig.rubberband_canvas.style.cursor = cursor;\n",
2589         "};\n",
2590         "\n",
2591         "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
2592         "    fig.message.textContent = msg['message'];\n",
2593         "};\n",
2594         "\n",
2595         "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
2596         "    // Request the server to send over a new figure.\n",
2597         "    fig.send_draw_message();\n",
2598         "};\n",
2599         "\n",
2600         "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
2601         "    fig.image_mode = msg['mode'];\n",
2602         "};\n",
2603         "\n",
2604         "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
2605         "    for (var key in msg) {\n",
2606         "        if (!(key in fig.buttons)) {\n",
2607         "            continue;\n",
2608         "        }\n",
2609         "        fig.buttons[key].disabled = !msg[key];\n",
2610         "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
2611         "    }\n",
2612         "};\n",
2613         "\n",
2614         "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
2615         "    if (msg['mode'] === 'PAN') {\n",
2616         "        fig.buttons['Pan'].classList.add('active');\n",
2617         "        fig.buttons['Zoom'].classList.remove('active');\n",
2618         "    } else if (msg['mode'] === 'ZOOM') {\n",
2619         "        fig.buttons['Pan'].classList.remove('active');\n",
2620         "        fig.buttons['Zoom'].classList.add('active');\n",
2621         "    } else {\n",
2622         "        fig.buttons['Pan'].classList.remove('active');\n",
2623         "        fig.buttons['Zoom'].classList.remove('active');\n",
2624         "    }\n",
2625         "};\n",
2626         "\n",
2627         "mpl.figure.prototype.updated_canvas_event = function () {\n",
2628         "    // Called whenever the canvas gets updated.\n",
2629         "    this.send_message('ack', {});\n",
2630         "};\n",
2631         "\n",
2632         "// A function to construct a web socket function for onmessage handling.\n",
2633         "// Called in the figure constructor.\n",
2634         "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
2635         "    return function socket_on_message(evt) {\n",
2636         "        if (evt.data instanceof Blob) {\n",
2637         "            /* FIXME: We get \"Resource interpreted as Image but\n",
2638         "             * transferred with MIME type text/plain:\" errors on\n",
2639         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
2640         "             * to be part of the websocket stream */\n",
2641         "            evt.data.type = 'image/png';\n",
2642         "\n",
2643         "            /* Free the memory for the previous frames */\n",
2644         "            if (fig.imageObj.src) {\n",
2645         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
2646         "                    fig.imageObj.src\n",
2647         "                );\n",
2648         "            }\n",
2649         "\n",
2650         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
2651         "                evt.data\n",
2652         "            );\n",
2653         "            fig.updated_canvas_event();\n",
2654         "            fig.waiting = false;\n",
2655         "            return;\n",
2656         "        } else if (\n",
2657         "            typeof evt.data === 'string' &&\n",
2658         "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
2659         "        ) {\n",
2660         "            fig.imageObj.src = evt.data;\n",
2661         "            fig.updated_canvas_event();\n",
2662         "            fig.waiting = false;\n",
2663         "            return;\n",
2664         "        }\n",
2665         "\n",
2666         "        var msg = JSON.parse(evt.data);\n",
2667         "        var msg_type = msg['type'];\n",
2668         "\n",
2669         "        // Call the  \"handle_{type}\" callback, which takes\n",
2670         "        // the figure and JSON message as its only arguments.\n",
2671         "        try {\n",
2672         "            var callback = fig['handle_' + msg_type];\n",
2673         "        } catch (e) {\n",
2674         "            console.log(\n",
2675         "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
2676         "                msg\n",
2677         "            );\n",
2678         "            return;\n",
2679         "        }\n",
2680         "\n",
2681         "        if (callback) {\n",
2682         "            try {\n",
2683         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
2684         "                callback(fig, msg);\n",
2685         "            } catch (e) {\n",
2686         "                console.log(\n",
2687         "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
2688         "                    e,\n",
2689         "                    e.stack,\n",
2690         "                    msg\n",
2691         "                );\n",
2692         "            }\n",
2693         "        }\n",
2694         "    };\n",
2695         "};\n",
2696         "\n",
2697         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
2698         "mpl.findpos = function (e) {\n",
2699         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
2700         "    var targ;\n",
2701         "    if (!e) {\n",
2702         "        e = window.event;\n",
2703         "    }\n",
2704         "    if (e.target) {\n",
2705         "        targ = e.target;\n",
2706         "    } else if (e.srcElement) {\n",
2707         "        targ = e.srcElement;\n",
2708         "    }\n",
2709         "    if (targ.nodeType === 3) {\n",
2710         "        // defeat Safari bug\n",
2711         "        targ = targ.parentNode;\n",
2712         "    }\n",
2713         "\n",
2714         "    // pageX,Y are the mouse positions relative to the document\n",
2715         "    var boundingRect = targ.getBoundingClientRect();\n",
2716         "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
2717         "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
2718         "\n",
2719         "    return { x: x, y: y };\n",
2720         "};\n",
2721         "\n",
2722         "/*\n",
2723         " * return a copy of an object with only non-object keys\n",
2724         " * we need this to avoid circular references\n",
2725         " * http://stackoverflow.com/a/24161582/3208463\n",
2726         " */\n",
2727         "function simpleKeys(original) {\n",
2728         "    return Object.keys(original).reduce(function (obj, key) {\n",
2729         "        if (typeof original[key] !== 'object') {\n",
2730         "            obj[key] = original[key];\n",
2731         "        }\n",
2732         "        return obj;\n",
2733         "    }, {});\n",
2734         "}\n",
2735         "\n",
2736         "mpl.figure.prototype.mouse_event = function (event, name) {\n",
2737         "    var canvas_pos = mpl.findpos(event);\n",
2738         "\n",
2739         "    if (name === 'button_press') {\n",
2740         "        this.canvas.focus();\n",
2741         "        this.canvas_div.focus();\n",
2742         "    }\n",
2743         "\n",
2744         "    var x = canvas_pos.x * this.ratio;\n",
2745         "    var y = canvas_pos.y * this.ratio;\n",
2746         "\n",
2747         "    this.send_message(name, {\n",
2748         "        x: x,\n",
2749         "        y: y,\n",
2750         "        button: event.button,\n",
2751         "        step: event.step,\n",
2752         "        guiEvent: simpleKeys(event),\n",
2753         "    });\n",
2754         "\n",
2755         "    /* This prevents the web browser from automatically changing to\n",
2756         "     * the text insertion cursor when the button is pressed.  We want\n",
2757         "     * to control all of the cursor setting manually through the\n",
2758         "     * 'cursor' event from matplotlib */\n",
2759         "    event.preventDefault();\n",
2760         "    return false;\n",
2761         "};\n",
2762         "\n",
2763         "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
2764         "    // Handle any extra behaviour associated with a key event\n",
2765         "};\n",
2766         "\n",
2767         "mpl.figure.prototype.key_event = function (event, name) {\n",
2768         "    // Prevent repeat events\n",
2769         "    if (name === 'key_press') {\n",
2770         "        if (event.which === this._key) {\n",
2771         "            return;\n",
2772         "        } else {\n",
2773         "            this._key = event.which;\n",
2774         "        }\n",
2775         "    }\n",
2776         "    if (name === 'key_release') {\n",
2777         "        this._key = null;\n",
2778         "    }\n",
2779         "\n",
2780         "    var value = '';\n",
2781         "    if (event.ctrlKey && event.which !== 17) {\n",
2782         "        value += 'ctrl+';\n",
2783         "    }\n",
2784         "    if (event.altKey && event.which !== 18) {\n",
2785         "        value += 'alt+';\n",
2786         "    }\n",
2787         "    if (event.shiftKey && event.which !== 16) {\n",
2788         "        value += 'shift+';\n",
2789         "    }\n",
2790         "\n",
2791         "    value += 'k';\n",
2792         "    value += event.which.toString();\n",
2793         "\n",
2794         "    this._key_event_extra(event, name);\n",
2795         "\n",
2796         "    this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n",
2797         "    return false;\n",
2798         "};\n",
2799         "\n",
2800         "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n",
2801         "    if (name === 'download') {\n",
2802         "        this.handle_save(this, null);\n",
2803         "    } else {\n",
2804         "        this.send_message('toolbar_button', { name: name });\n",
2805         "    }\n",
2806         "};\n",
2807         "\n",
2808         "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n",
2809         "    this.message.textContent = tooltip;\n",
2810         "};\n",
2811         "\n",
2812         "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
2813         "// prettier-ignore\n",
2814         "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n",
2815         "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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
2816         "\n",
2817         "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
2818         "\n",
2819         "mpl.default_extension = \"png\";/* global mpl */\n",
2820         "\n",
2821         "var comm_websocket_adapter = function (comm) {\n",
2822         "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
2823         "    // object with the appropriate methods. Currently this is a non binary\n",
2824         "    // socket, so there is still some room for performance tuning.\n",
2825         "    var ws = {};\n",
2826         "\n",
2827         "    ws.close = function () {\n",
2828         "        comm.close();\n",
2829         "    };\n",
2830         "    ws.send = function (m) {\n",
2831         "        //console.log('sending', m);\n",
2832         "        comm.send(m);\n",
2833         "    };\n",
2834         "    // Register the callback with on_msg.\n",
2835         "    comm.on_msg(function (msg) {\n",
2836         "        //console.log('receiving', msg['content']['data'], msg);\n",
2837         "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
2838         "        ws.onmessage(msg['content']['data']);\n",
2839         "    });\n",
2840         "    return ws;\n",
2841         "};\n",
2842         "\n",
2843         "mpl.mpl_figure_comm = function (comm, msg) {\n",
2844         "    // This is the function which gets called when the mpl process\n",
2845         "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
2846         "\n",
2847         "    var id = msg.content.data.id;\n",
2848         "    // Get hold of the div created by the display call when the Comm\n",
2849         "    // socket was opened in Python.\n",
2850         "    var element = document.getElementById(id);\n",
2851         "    var ws_proxy = comm_websocket_adapter(comm);\n",
2852         "\n",
2853         "    function ondownload(figure, _format) {\n",
2854         "        window.open(figure.canvas.toDataURL());\n",
2855         "    }\n",
2856         "\n",
2857         "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\n",
2858         "\n",
2859         "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
2860         "    // web socket which is closed, not our websocket->open comm proxy.\n",
2861         "    ws_proxy.onopen();\n",
2862         "\n",
2863         "    fig.parent_element = element;\n",
2864         "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
2865         "    if (!fig.cell_info) {\n",
2866         "        console.error('Failed to find cell for figure', id, fig);\n",
2867         "        return;\n",
2868         "    }\n",
2869         "    fig.cell_info[0].output_area.element.on(\n",
2870         "        'cleared',\n",
2871         "        { fig: fig },\n",
2872         "        fig._remove_fig_handler\n",
2873         "    );\n",
2874         "};\n",
2875         "\n",
2876         "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
2877         "    var width = fig.canvas.width / fig.ratio;\n",
2878         "    fig.cell_info[0].output_area.element.off(\n",
2879         "        'cleared',\n",
2880         "        fig._remove_fig_handler\n",
2881         "    );\n",
2882         "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\n",
2883         "\n",
2884         "    // Update the output cell to use the data from the current canvas.\n",
2885         "    fig.push_to_output();\n",
2886         "    var dataURL = fig.canvas.toDataURL();\n",
2887         "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
2888         "    // the notebook keyboard shortcuts fail.\n",
2889         "    IPython.keyboard_manager.enable();\n",
2890         "    fig.parent_element.innerHTML =\n",
2891         "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
2892         "    fig.close_ws(fig, msg);\n",
2893         "};\n",
2894         "\n",
2895         "mpl.figure.prototype.close_ws = function (fig, msg) {\n",
2896         "    fig.send_message('closing', msg);\n",
2897         "    // fig.ws.close()\n",
2898         "};\n",
2899         "\n",
2900         "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n",
2901         "    // Turn the data on the canvas into data in the output cell.\n",
2902         "    var width = this.canvas.width / this.ratio;\n",
2903         "    var dataURL = this.canvas.toDataURL();\n",
2904         "    this.cell_info[1]['text/html'] =\n",
2905         "        '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
2906         "};\n",
2907         "\n",
2908         "mpl.figure.prototype.updated_canvas_event = function () {\n",
2909         "    // Tell IPython that the notebook contents must change.\n",
2910         "    IPython.notebook.set_dirty(true);\n",
2911         "    this.send_message('ack', {});\n",
2912         "    var fig = this;\n",
2913         "    // Wait a second, then push the new image to the DOM so\n",
2914         "    // that it is saved nicely (might be nice to debounce this).\n",
2915         "    setTimeout(function () {\n",
2916         "        fig.push_to_output();\n",
2917         "    }, 1000);\n",
2918         "};\n",
2919         "\n",
2920         "mpl.figure.prototype._init_toolbar = function () {\n",
2921         "    var fig = this;\n",
2922         "\n",
2923         "    var toolbar = document.createElement('div');\n",
2924         "    toolbar.classList = 'btn-toolbar';\n",
2925         "    this.root.appendChild(toolbar);\n",
2926         "\n",
2927         "    function on_click_closure(name) {\n",
2928         "        return function (_event) {\n",
2929         "            return fig.toolbar_button_onclick(name);\n",
2930         "        };\n",
2931         "    }\n",
2932         "\n",
2933         "    function on_mouseover_closure(tooltip) {\n",
2934         "        return function (event) {\n",
2935         "            if (!event.currentTarget.disabled) {\n",
2936         "                return fig.toolbar_button_onmouseover(tooltip);\n",
2937         "            }\n",
2938         "        };\n",
2939         "    }\n",
2940         "\n",
2941         "    fig.buttons = {};\n",
2942         "    var buttonGroup = document.createElement('div');\n",
2943         "    buttonGroup.classList = 'btn-group';\n",
2944         "    var button;\n",
2945         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
2946         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
2947         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
2948         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
2949         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
2950         "\n",
2951         "        if (!name) {\n",
2952         "            /* Instead of a spacer, we start a new button group. */\n",
2953         "            if (buttonGroup.hasChildNodes()) {\n",
2954         "                toolbar.appendChild(buttonGroup);\n",
2955         "            }\n",
2956         "            buttonGroup = document.createElement('div');\n",
2957         "            buttonGroup.classList = 'btn-group';\n",
2958         "            continue;\n",
2959         "        }\n",
2960         "\n",
2961         "        button = fig.buttons[name] = document.createElement('button');\n",
2962         "        button.classList = 'btn btn-default';\n",
2963         "        button.href = '#';\n",
2964         "        button.title = name;\n",
2965         "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
2966         "        button.addEventListener('click', on_click_closure(method_name));\n",
2967         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
2968         "        buttonGroup.appendChild(button);\n",
2969         "    }\n",
2970         "\n",
2971         "    if (buttonGroup.hasChildNodes()) {\n",
2972         "        toolbar.appendChild(buttonGroup);\n",
2973         "    }\n",
2974         "\n",
2975         "    // Add the status bar.\n",
2976         "    var status_bar = document.createElement('span');\n",
2977         "    status_bar.classList = 'mpl-message pull-right';\n",
2978         "    toolbar.appendChild(status_bar);\n",
2979         "    this.message = status_bar;\n",
2980         "\n",
2981         "    // Add the close button to the window.\n",
2982         "    var buttongrp = document.createElement('div');\n",
2983         "    buttongrp.classList = 'btn-group inline pull-right';\n",
2984         "    button = document.createElement('button');\n",
2985         "    button.classList = 'btn btn-mini btn-primary';\n",
2986         "    button.href = '#';\n",
2987         "    button.title = 'Stop Interaction';\n",
2988         "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
2989         "    button.addEventListener('click', function (_evt) {\n",
2990         "        fig.handle_close(fig, {});\n",
2991         "    });\n",
2992         "    button.addEventListener(\n",
2993         "        'mouseover',\n",
2994         "        on_mouseover_closure('Stop Interaction')\n",
2995         "    );\n",
2996         "    buttongrp.appendChild(button);\n",
2997         "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
2998         "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
2999         "};\n",
3000         "\n",
3001         "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
3002         "    var fig = event.data.fig;\n",
3003         "    if (event.target !== this) {\n",
3004         "        // Ignore bubbled events from children.\n",
3005         "        return;\n",
3006         "    }\n",
3007         "    fig.close_ws(fig, {});\n",
3008         "};\n",
3009         "\n",
3010         "mpl.figure.prototype._root_extra_style = function (el) {\n",
3011         "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
3012         "};\n",
3013         "\n",
3014         "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
3015         "    // this is important to make the div 'focusable\n",
3016         "    el.setAttribute('tabindex', 0);\n",
3017         "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
3018         "    // off when our div gets focus\n",
3019         "\n",
3020         "    // location in version 3\n",
3021         "    if (IPython.notebook.keyboard_manager) {\n",
3022         "        IPython.notebook.keyboard_manager.register_events(el);\n",
3023         "    } else {\n",
3024         "        // location in version 2\n",
3025         "        IPython.keyboard_manager.register_events(el);\n",
3026         "    }\n",
3027         "};\n",
3028         "\n",
3029         "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
3030         "    var manager = IPython.notebook.keyboard_manager;\n",
3031         "    if (!manager) {\n",
3032         "        manager = IPython.keyboard_manager;\n",
3033         "    }\n",
3034         "\n",
3035         "    // Check for shift+enter\n",
3036         "    if (event.shiftKey && event.which === 13) {\n",
3037         "        this.canvas_div.blur();\n",
3038         "        // select the cell after this one\n",
3039         "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
3040         "        IPython.notebook.select(index + 1);\n",
3041         "    }\n",
3042         "};\n",
3043         "\n",
3044         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
3045         "    fig.ondownload(fig, null);\n",
3046         "};\n",
3047         "\n",
3048         "mpl.find_output_cell = function (html_output) {\n",
3049         "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
3050         "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
3051         "    // IPython event is triggered only after the cells have been serialised, which for\n",
3052         "    // our purposes (turning an active figure into a static one), is too late.\n",
3053         "    var cells = IPython.notebook.get_cells();\n",
3054         "    var ncells = cells.length;\n",
3055         "    for (var i = 0; i < ncells; i++) {\n",
3056         "        var cell = cells[i];\n",
3057         "        if (cell.cell_type === 'code') {\n",
3058         "            for (var j = 0; j < cell.output_area.outputs.length; j++) {\n",
3059         "                var data = cell.output_area.outputs[j];\n",
3060         "                if (data.data) {\n",
3061         "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
3062         "                    data = data.data;\n",
3063         "                }\n",
3064         "                if (data['text/html'] === html_output) {\n",
3065         "                    return [cell, data, j];\n",
3066         "                }\n",
3067         "            }\n",
3068         "        }\n",
3069         "    }\n",
3070         "};\n",
3071         "\n",
3072         "// Register the function which deals with the matplotlib target/channel.\n",
3073         "// The kernel may be null if the page has been refreshed.\n",
3074         "if (IPython.notebook.kernel !== null) {\n",
3075         "    IPython.notebook.kernel.comm_manager.register_target(\n",
3076         "        'matplotlib',\n",
3077         "        mpl.mpl_figure_comm\n",
3078         "    );\n",
3079         "}\n"
3080        ],
3081        "text/plain": [
3082         "<IPython.core.display.Javascript object>"
3083        ]
3084       },
3085       "metadata": {},
3086       "output_type": "display_data"
3087      },
3088      {
3089       "data": {
3090        "text/html": [
3091         "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydBbhVxfrGX0IURUAUFBUVscEOTDBQMK7FNVHswI6reC3ALuyOi0mY2HFNDLy2ogh2IWLzxwSE//NbrIWbzY6199rnnB3vPM95xHNm1pr5rW/NvOubmW8azZw5c6acTMAETMAETMAETMAEaoZAIwvAmnnWbqgJmIAJmIAJmIAJBAQsAG0IJmACJmACJmACJlBjBCwAa+yBu7kmYAImYAImYAImYAFoGzABEzABEzABEzCBGiNgAVhjD9zNNQETMAETMAETMAELQNuACZiACZiACZiACdQYAQvAGnvgbq4JmIAJmIAJmIAJWADaBkzABEzABEzABEygxghYANbYA3dzTcAETMAETMAETMAC0DZgAiZgAiZgAiZgAjVGwAKwxh64m2sCJmACJmACJmACFoC2ARMwARMwARMwAROoMQIWgDX2wN1cEzABEzABEzABE7AAtA2YgAmYgAmYgAmYQI0RsACssQfu5pqACZiACZiACZiABaBtwARMwARMwARMwARqjIAFYI09cDfXBEzABEzABEzABCwAbQMmYAImYAImYAImUGMELABr7IG7uSZgAiZgAiZgAiZgAWgbMAETMAETMAETMIEaI2ABWGMP3M01ARMwARMwARMwAQtA24AJmIAJmIAJmIAJ1BgBC8Aae+BurgmYgAmYgAmYgAlYANoGTMAETMAETMAETKDGCFgA1tgDd3NNwARMwARMwARMwALQNmACJmACJmACJmACNUbAArDGHribawImYAImYAImYAIWgLYBEzABEzABEzABE6gxAhaANfbA3VwTMAETMAETMAETsAC0DZiACZiACZiACZhAjRGwAKyxB+7mmoAJmIAJmIAJmIAFoG3ABEzABEzABEzABGqMgAVgjT1wN9cETMAETMAETMAELABtAyZgAiZgAiZgAiZQYwQsAGvsgbu5JmACJmACJmACJmABaBswARMwARMwARMwgRojUDUC8H//+5/OO+88vf7665o0aZJat26tZZddVhtuuKEGDx5c1o9133331bPPPqvPPvusJPUcOHCgBg0apO+++06LLLJIzmtuuummwd+5fzUmmHbs2FFDhgwRnBsiZXq+P/74ow477DA9/fTTwXPaYYcdNHLkSDVq1EgDBgwQz7Au0jnnnKNVVllFO+644xyX5/lvttlmeuaZZxTZRF3cv6GvWYvvRib7y2YHN998s/bbbz+9+uqrWmeddQp+XI888oheeeWVOrPfQiu0zDLLBPZMu4pJp556qm699VZ9/fXXatGihX7++ediLtNgZXI9j6Rsim3U1KlTddRRR+n+++/Xt99+q1VXXVVvvfVWsZfLWu6ll17SE088oWOOOSbQA05zE6gKAfjwww9r++23D170gw46SO3bt9fEiRP12muvafjw4frqq6/K+tk3pAAcO3ZswAZRUI2pHATgxx9/rP/7v//TmmuuORvxscceq6uvvlr/+c9/1KlTJ7Vp00YrrLCCXn75ZS255JLBT10kBrF//vOfcw2I1A9bwA5atmxZF7cui2vWogDMZH/Z7CCpADziiCN01VVXaebMmWXxvN98883AnnnHCk0IFD6UTjnlFG299daad955ixLFhd63lPlzPY8kbJLU8bLLLgtE2RVXXKG11147ENaIwFKniy66SCeccII+/fRTIXadqlQAdu/eXRMmTNC4cePUtGnTOVo5Y8YMNW7cuKyffUMKwIYC8/vvv2u++eYLPF51mcpBAGZq35ZbbhnYbCTA65JB6rWzDfz1df9S3+evv/7S9OnTg8E5TqpFAZiJS60IwDg2kS3P2WefLTyAzCi1a9cuyaVml/3tt980//zzl+RacS5SboKcOuOkueOOOwSLukx1JQDra+yqSzbRtavCA9ilS5fgKwLvSb40YsQI3XTTTRozZkzgzufLgOm30047TQsssMDs4oiyu+++O/AiHn300XrhhReCL0n+fdJJJwX3+te//iW+opZYYongK3GfffaZXT76ksYFPXTo0MDd/eeff2rzzTcXX0BMT0cpkwDkC/qaa67R9ddfr/HjxwdiaYstttAFF1wwR9lM7Y0GuTfeeENnnnmmnnzyyUBo/eMf/9All1yitm3bzi6WPgUcCaYLL7wwEM58pTFFyRcaZddff/3ZZWHDSwYLOslFF11UG2ywQTAVv/TSS8/F4vHHHw88sg8++KC+//57jRo1St26dQv47LHHHnM0hWkXeDKdtO6662Z9rIgoprsfffTRoA5MeTPtjxeC+mQSgB999JHo3HmmlF9ooYW01lpriWmx1C9RPh743W233aYvvvgiEBlLLbWUDjjggMAOSLDh2XN/pjOw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8ZKuCkUg3hvWchEIemlJbP5Yr2xr74rVPYE333xTa621Vt4bMR283Xbb6b777sub1xlMoD4JePy2AExkbzagRPhcuOwJTAxDwnAUHMGf8eLw4+m8sn90dVzB4cOHa4899oh1lxVWWEHjx4+PldeZTKC+CHj8tgBMZGs2oET4XNgETKBCCbC5o3fv3rFq36VLF40ZMyZWXmcygfoi4PHbAjCRrdmAEuFzYRMwgQolMGnSJC255JLBbt9ciY0gRx99tAYPHlyhLXW1q5WAx28LwES2bQNKhM+FTcAEKpjA7rvvrnvuuSenCCQO4AcffKDllnO4oAp+1FVZdY/fFoCJDNsGlAifC5uACVQwga+//lrrrbee8AZm8wSef/75OvHEEyu4la56tRLw+G0BmMi2bUCJ8LmwCZhAhROYMGGC+vXrp4ceeiiIBYjHj/+2b99eZ511lvbfn5BCTiZQfgQ8flsAJrJKG1AifC5sAiZQJQQ+//xzPfXUU/rjjz+07LLLqkePHsGJIE4mUK4EPH5bACayTRtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAImYAIm0CAEPH5bACYyPBtQInwubAImYAImYAINQsDjtwVgIsOzASXC58ImYAIVQOC7777TiBEjNGHCBC244ILaYYcd1Llz5wqouatoAtkJePy2AEz0ftiAEuFzYRMwgTImMHXqVB1//PG69tprNWPGDDVp0iT4719//aVNN91Ut99+u5ZYYokyboGrZgIWgLlsoNHMmTNn2kiKI2ABWBw3lzIBEyhvAgi9XXbZRffdd58yDRFNmzZV+/bt9dprr6ldu3bl3RjXzgQyEPD4bQ9gohfDBpQIXx0Vnibpv5I+l7SApK0kLVZH9/JlTaA6CTz44IPafvvtczYOj+Chhx6qK6+8sjohuFVVTcDjtwVgIgO3ASXCV+LCOLKvljRI0neSGknid00k7SLpCkmLlPievpwJVCeBnj176qmnngqme3Ol+eefX5MmTVKLFi2qE4RbVbUEPH5bACYybhtQInwlLnyqpLOzXBMRuKyklyW1KfF9fTkTqD4CbPb45ZdfYjXsf//7n9Zbb71YeZ3JBMqFgMdvC8BEtmgDSoSvhIXfkLR2nushAg+RdFUJ7+tLmUB1EsCj9+uvv8Zq3OjRo7X++uvHyutMJlAuBDx+WwAmskUbUCJ8JSx8gKRbJU3Pc83mkr6R1LKE9/alTKD6CGy44YbCs8dmkFxpnnnm0TfffKM2bexZrz4rqO4Wefy2AExk4TagRPhKWLiDpK9iXu8pSZvHzOtsJlCbBIYOHao+ffrkbDw7gffYYw/deisfX04mUFkEPH5bACayWBtQInwlLLyopG9jXu9RSb1i5nU2E6hNAtOmTVP37t31yiuvZNwIwg5g1gkSBqZTp061CcmtrmgCHr8tABMZsA0oEb4SFu4u6UVJuXcszrrhR5I8YJUQvi9VpQQmT56sPffcU4888ojw9jEd3LhxY02fPl0dO3bUyJEjtdpqq1Vp692saifg8dsCMJGN24AS4Sth4WGS9sxzPTaBbCLpmRLe15cygeon8M477wTTvNFRcDvuuKMIE4MX0MkEKpWAx28LwES2awNKhK+EhadKYhfiO1m8gMQEZLB6VtJGJbyvL2UCJmACJlCJBDx+WwAmslsbUCJ8JS5M8OdtJb0qqWnKjmDEH7t/R0jarsT39OVMwARMwAQqkYDHbwvARHZrA0qErw4KE7KCXb43SfpU0oKSOM6qr6TWdXA/X9IETMAETKASCXj8tgBMZLc2oET4XNgETMAETMAEGoSAx28LwESGZwNKhM+FTcAETMAETKBBCHj8tgBMZHg2oET4XNgETMAETMAEGoSAx28LwESGV9sGxEHxnBW6kKRmiTi6sAmYgAmYgAnUJ4HaHr9nkW40c+bMmfUJvVzude655+ree+/VuHHj1Lx5c3H25fnnn68VV1wxdhVrz4AwlfskXSrp+ZDTfJL2lnScpJVis3PGQgn8IOn1cHfzKpKWKfQCzm8CJmACJhASqL3xe+5HX7MCsFevXtp999217rrrBpHtTznlFI0ZM0Zjx47VAgssEOslqS0DQvwdLemKMKZe6qkbhF3h50FJPWKxc6a4BL6W9G9JBLuellJoK0nnSFo77oWczwRMwARMwAJwtg3UrABMfwu+++47tWvXTs8995y6desW6yWpLQF4g6SDc3CJ4u19KGnxWPycKR+BL8MA15xzPD0tM4GtEd2PSdo034X8dxMwARMwgRQCtTV+Z370FoAhl48++kjLL7984AXs0qVLrBeldgwI79/ykj6RlGvFAKLkNEkDYvFzpnwEtpA0KoP4i8o1DuMbTpDEVHy29LakoZIQkqzZ3CUUloh2JxMwAROoPQK1M35nf7YWgEiamTO1ww476KefftLzz0dr2+aG9ueff4qfKGFAHTp0EIemt2zZsorfoLckrRmzfZ0kfRQzr7NlJzBO0soxAd0arsNMz866wd0lPRl6C6O/401k6vheSUvFvIezmYAJmED1ELAArOFNIKlmfPjhh+vhhx/WCy+8oCWXXDKrhQ8cOFCDBg2a6+/VLwAREFvGfPM5ceOnmHmdLTsBNtocL4nTTXIlvIB49IanZfpN0oaS3s1yPjLTx0zVvyapbQEPgmlpni9l2hdQzllNwARMoHwIWABaAOrII4/UyJEjNWrUKHXs2DGnddauB/BNSWvFfHPtAYwJKk+2syUNzDH9m1r8H5IeSLvelZKOijFlf4Kkc/PUhWn/OyVdIOmNlLysPTxJUs/SNNlXMQETMIF6ImABWMMCkGlfxN99992nZ599Nlj/V2iqHQPyGsBCbSN5/tuzTOumXxlP3iGSEHypiXBGbMjJF+UJj+2kHLEcKd9f0oWS8DameiRZ88lu8MtCsZm81b6CCZiACdQHgdoZv7PTrNk1gIcddpiGDh2q+++/f47Yf61atQriAsZJtWVA14dCIxsZ7wKOYzPx8xBkezFJBNzOl4gPmOqhnSpp3nyFUv7O5p5s3u+7wynmfJd7SdIG+TL571VOgGgKN998s9588001atRI6623nvr27auFFmLzkZMJlA+B2hq/M3OvWQFI55QpDRkyRPvuu28sK60tA8ITxJQinqbI8xNhchzAWAZTcKazwl3V2QryHIgH+EhahkIF4Kc5Aksj6l7JsxaR5//PMFZhwY10gSogwIwKgfRPO+00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\" width=\"640\">"
3092        ],
3093        "text/plain": [
3094         "<IPython.core.display.HTML object>"
3095        ]
3096       },
3097       "metadata": {},
3098       "output_type": "display_data"
3099      }
3100     ],
3101     "source": [
3102      "plt.figure()\n",
3103      "plt.title('Sample binary classification problem with two informative features')\n",
3104      "X_C2, y_C2 = make_classification(n_samples = 100, n_features=2,\n",
3105      "                                n_redundant=0, n_informative=2,\n",
3106      "                                n_clusters_per_class=1, flip_y = 0.1,\n",
3107      "                                class_sep = 0.5, random_state=0)\n",
3108      "plt.scatter(X_C2[:, 0], X_C2[:, 1], c=y_C2,\n",
3109      "           marker= 'o', s=50, cmap=cmap_bold)\n",
3110      "plt.show()"
3111     ]
3112    },
3113    {
3114     "cell_type": "code",
3115     "execution_count": 14,
3116     "id": "67caf379",
3117     "metadata": {},
3118     "outputs": [
3119      {
3120       "data": {
3121        "application/javascript": [
3122         "/* Put everything inside the global mpl namespace */\n",
3123         "/* global mpl */\n",
3124         "window.mpl = {};\n",
3125         "\n",
3126         "mpl.get_websocket_type = function () {\n",
3127         "    if (typeof WebSocket !== 'undefined') {\n",
3128         "        return WebSocket;\n",
3129         "    } else if (typeof MozWebSocket !== 'undefined') {\n",
3130         "        return MozWebSocket;\n",
3131         "    } else {\n",
3132         "        alert(\n",
3133         "            'Your browser does not have WebSocket support. ' +\n",
3134         "                'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
3135         "                'Firefox 4 and 5 are also supported but you ' +\n",
3136         "                'have to enable WebSockets in about:config.'\n",
3137         "        );\n",
3138         "    }\n",
3139         "};\n",
3140         "\n",
3141         "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n",
3142         "    this.id = figure_id;\n",
3143         "\n",
3144         "    this.ws = websocket;\n",
3145         "\n",
3146         "    this.supports_binary = this.ws.binaryType !== undefined;\n",
3147         "\n",
3148         "    if (!this.supports_binary) {\n",
3149         "        var warnings = document.getElementById('mpl-warnings');\n",
3150         "        if (warnings) {\n",
3151         "            warnings.style.display = 'block';\n",
3152         "            warnings.textContent =\n",
3153         "                'This browser does not support binary websocket messages. ' +\n",
3154         "                'Performance may be slow.';\n",
3155         "        }\n",
3156         "    }\n",
3157         "\n",
3158         "    this.imageObj = new Image();\n",
3159         "\n",
3160         "    this.context = undefined;\n",
3161         "    this.message = undefined;\n",
3162         "    this.canvas = undefined;\n",
3163         "    this.rubberband_canvas = undefined;\n",
3164         "    this.rubberband_context = undefined;\n",
3165         "    this.format_dropdown = undefined;\n",
3166         "\n",
3167         "    this.image_mode = 'full';\n",
3168         "\n",
3169         "    this.root = document.createElement('div');\n",
3170         "    this.root.setAttribute('style', 'display: inline-block');\n",
3171         "    this._root_extra_style(this.root);\n",
3172         "\n",
3173         "    parent_element.appendChild(this.root);\n",
3174         "\n",
3175         "    this._init_header(this);\n",
3176         "    this._init_canvas(this);\n",
3177         "    this._init_toolbar(this);\n",
3178         "\n",
3179         "    var fig = this;\n",
3180         "\n",
3181         "    this.waiting = false;\n",
3182         "\n",
3183         "    this.ws.onopen = function () {\n",
3184         "        fig.send_message('supports_binary', { value: fig.supports_binary });\n",
3185         "        fig.send_message('send_image_mode', {});\n",
3186         "        if (fig.ratio !== 1) {\n",
3187         "            fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n",
3188         "        }\n",
3189         "        fig.send_message('refresh', {});\n",
3190         "    };\n",
3191         "\n",
3192         "    this.imageObj.onload = function () {\n",
3193         "        if (fig.image_mode === 'full') {\n",
3194         "            // Full images could contain transparency (where diff images\n",
3195         "            // almost always do), so we need to clear the canvas so that\n",
3196         "            // there is no ghosting.\n",
3197         "            fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
3198         "        }\n",
3199         "        fig.context.drawImage(fig.imageObj, 0, 0);\n",
3200         "    };\n",
3201         "\n",
3202         "    this.imageObj.onunload = function () {\n",
3203         "        fig.ws.close();\n",
3204         "    };\n",
3205         "\n",
3206         "    this.ws.onmessage = this._make_on_message_function(this);\n",
3207         "\n",
3208         "    this.ondownload = ondownload;\n",
3209         "};\n",
3210         "\n",
3211         "mpl.figure.prototype._init_header = function () {\n",
3212         "    var titlebar = document.createElement('div');\n",
3213         "    titlebar.classList =\n",
3214         "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
3215         "    var titletext = document.createElement('div');\n",
3216         "    titletext.classList = 'ui-dialog-title';\n",
3217         "    titletext.setAttribute(\n",
3218         "        'style',\n",
3219         "        'width: 100%; text-align: center; padding: 3px;'\n",
3220         "    );\n",
3221         "    titlebar.appendChild(titletext);\n",
3222         "    this.root.appendChild(titlebar);\n",
3223         "    this.header = titletext;\n",
3224         "};\n",
3225         "\n",
3226         "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
3227         "\n",
3228         "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
3229         "\n",
3230         "mpl.figure.prototype._init_canvas = function () {\n",
3231         "    var fig = this;\n",
3232         "\n",
3233         "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
3234         "    canvas_div.setAttribute(\n",
3235         "        'style',\n",
3236         "        'border: 1px solid #ddd;' +\n",
3237         "            'box-sizing: content-box;' +\n",
3238         "            'clear: both;' +\n",
3239         "            'min-height: 1px;' +\n",
3240         "            'min-width: 1px;' +\n",
3241         "            'outline: 0;' +\n",
3242         "            'overflow: hidden;' +\n",
3243         "            'position: relative;' +\n",
3244         "            'resize: both;'\n",
3245         "    );\n",
3246         "\n",
3247         "    function on_keyboard_event_closure(name) {\n",
3248         "        return function (event) {\n",
3249         "            return fig.key_event(event, name);\n",
3250         "        };\n",
3251         "    }\n",
3252         "\n",
3253         "    canvas_div.addEventListener(\n",
3254         "        'keydown',\n",
3255         "        on_keyboard_event_closure('key_press')\n",
3256         "    );\n",
3257         "    canvas_div.addEventListener(\n",
3258         "        'keyup',\n",
3259         "        on_keyboard_event_closure('key_release')\n",
3260         "    );\n",
3261         "\n",
3262         "    this._canvas_extra_style(canvas_div);\n",
3263         "    this.root.appendChild(canvas_div);\n",
3264         "\n",
3265         "    var canvas = (this.canvas = document.createElement('canvas'));\n",
3266         "    canvas.classList.add('mpl-canvas');\n",
3267         "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
3268         "\n",
3269         "    this.context = canvas.getContext('2d');\n",
3270         "\n",
3271         "    var backingStore =\n",
3272         "        this.context.backingStorePixelRatio ||\n",
3273         "        this.context.webkitBackingStorePixelRatio ||\n",
3274         "        this.context.mozBackingStorePixelRatio ||\n",
3275         "        this.context.msBackingStorePixelRatio ||\n",
3276         "        this.context.oBackingStorePixelRatio ||\n",
3277         "        this.context.backingStorePixelRatio ||\n",
3278         "        1;\n",
3279         "\n",
3280         "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
3281         "\n",
3282         "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
3283         "        'canvas'\n",
3284         "    ));\n",
3285         "    rubberband_canvas.setAttribute(\n",
3286         "        'style',\n",
3287         "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
3288         "    );\n",
3289         "\n",
3290         "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
3291         "    if (this.ResizeObserver === undefined) {\n",
3292         "        if (window.ResizeObserver !== undefined) {\n",
3293         "            this.ResizeObserver = window.ResizeObserver;\n",
3294         "        } else {\n",
3295         "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
3296         "            this.ResizeObserver = obs.ResizeObserver;\n",
3297         "        }\n",
3298         "    }\n",
3299         "\n",
3300         "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
3301         "        var nentries = entries.length;\n",
3302         "        for (var i = 0; i < nentries; i++) {\n",
3303         "            var entry = entries[i];\n",
3304         "            var width, height;\n",
3305         "            if (entry.contentBoxSize) {\n",
3306         "                if (entry.contentBoxSize instanceof Array) {\n",
3307         "                    // Chrome 84 implements new version of spec.\n",
3308         "                    width = entry.contentBoxSize[0].inlineSize;\n",
3309         "                    height = entry.contentBoxSize[0].blockSize;\n",
3310         "                } else {\n",
3311         "                    // Firefox implements old version of spec.\n",
3312         "                    width = entry.contentBoxSize.inlineSize;\n",
3313         "                    height = entry.contentBoxSize.blockSize;\n",
3314         "                }\n",
3315         "            } else {\n",
3316         "                // Chrome <84 implements even older version of spec.\n",
3317         "                width = entry.contentRect.width;\n",
3318         "                height = entry.contentRect.height;\n",
3319         "            }\n",
3320         "\n",
3321         "            // Keep the size of the canvas and rubber band canvas in sync with\n",
3322         "            // the canvas container.\n",
3323         "            if (entry.devicePixelContentBoxSize) {\n",
3324         "                // Chrome 84 implements new version of spec.\n",
3325         "                canvas.setAttribute(\n",
3326         "                    'width',\n",
3327         "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
3328         "                );\n",
3329         "                canvas.setAttribute(\n",
3330         "                    'height',\n",
3331         "                    entry.devicePixelContentBoxSize[0].blockSize\n",
3332         "                );\n",
3333         "            } else {\n",
3334         "                canvas.setAttribute('width', width * fig.ratio);\n",
3335         "                canvas.setAttribute('height', height * fig.ratio);\n",
3336         "            }\n",
3337         "            canvas.setAttribute(\n",
3338         "                'style',\n",
3339         "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
3340         "            );\n",
3341         "\n",
3342         "            rubberband_canvas.setAttribute('width', width);\n",
3343         "            rubberband_canvas.setAttribute('height', height);\n",
3344         "\n",
3345         "            // And update the size in Python. We ignore the initial 0/0 size\n",
3346         "            // that occurs as the element is placed into the DOM, which should\n",
3347         "            // otherwise not happen due to the minimum size styling.\n",
3348         "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
3349         "                fig.request_resize(width, height);\n",
3350         "            }\n",
3351         "        }\n",
3352         "    });\n",
3353         "    this.resizeObserverInstance.observe(canvas_div);\n",
3354         "\n",
3355         "    function on_mouse_event_closure(name) {\n",
3356         "        return function (event) {\n",
3357         "            return fig.mouse_event(event, name);\n",
3358         "        };\n",
3359         "    }\n",
3360         "\n",
3361         "    rubberband_canvas.addEventListener(\n",
3362         "        'mousedown',\n",
3363         "        on_mouse_event_closure('button_press')\n",
3364         "    );\n",
3365         "    rubberband_canvas.addEventListener(\n",
3366         "        'mouseup',\n",
3367         "        on_mouse_event_closure('button_release')\n",
3368         "    );\n",
3369         "    // Throttle sequential mouse events to 1 every 20ms.\n",
3370         "    rubberband_canvas.addEventListener(\n",
3371         "        'mousemove',\n",
3372         "        on_mouse_event_closure('motion_notify')\n",
3373         "    );\n",
3374         "\n",
3375         "    rubberband_canvas.addEventListener(\n",
3376         "        'mouseenter',\n",
3377         "        on_mouse_event_closure('figure_enter')\n",
3378         "    );\n",
3379         "    rubberband_canvas.addEventListener(\n",
3380         "        'mouseleave',\n",
3381         "        on_mouse_event_closure('figure_leave')\n",
3382         "    );\n",
3383         "\n",
3384         "    canvas_div.addEventListener('wheel', function (event) {\n",
3385         "        if (event.deltaY < 0) {\n",
3386         "            event.step = 1;\n",
3387         "        } else {\n",
3388         "            event.step = -1;\n",
3389         "        }\n",
3390         "        on_mouse_event_closure('scroll')(event);\n",
3391         "    });\n",
3392         "\n",
3393         "    canvas_div.appendChild(canvas);\n",
3394         "    canvas_div.appendChild(rubberband_canvas);\n",
3395         "\n",
3396         "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
3397         "    this.rubberband_context.strokeStyle = '#000000';\n",
3398         "\n",
3399         "    this._resize_canvas = function (width, height, forward) {\n",
3400         "        if (forward) {\n",
3401         "            canvas_div.style.width = width + 'px';\n",
3402         "            canvas_div.style.height = height + 'px';\n",
3403         "        }\n",
3404         "    };\n",
3405         "\n",
3406         "    // Disable right mouse context menu.\n",
3407         "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
3408         "        event.preventDefault();\n",
3409         "        return false;\n",
3410         "    });\n",
3411         "\n",
3412         "    function set_focus() {\n",
3413         "        canvas.focus();\n",
3414         "        canvas_div.focus();\n",
3415         "    }\n",
3416         "\n",
3417         "    window.setTimeout(set_focus, 100);\n",
3418         "};\n",
3419         "\n",
3420         "mpl.figure.prototype._init_toolbar = function () {\n",
3421         "    var fig = this;\n",
3422         "\n",
3423         "    var toolbar = document.createElement('div');\n",
3424         "    toolbar.classList = 'mpl-toolbar';\n",
3425         "    this.root.appendChild(toolbar);\n",
3426         "\n",
3427         "    function on_click_closure(name) {\n",
3428         "        return function (_event) {\n",
3429         "            return fig.toolbar_button_onclick(name);\n",
3430         "        };\n",
3431         "    }\n",
3432         "\n",
3433         "    function on_mouseover_closure(tooltip) {\n",
3434         "        return function (event) {\n",
3435         "            if (!event.currentTarget.disabled) {\n",
3436         "                return fig.toolbar_button_onmouseover(tooltip);\n",
3437         "            }\n",
3438         "        };\n",
3439         "    }\n",
3440         "\n",
3441         "    fig.buttons = {};\n",
3442         "    var buttonGroup = document.createElement('div');\n",
3443         "    buttonGroup.classList = 'mpl-button-group';\n",
3444         "    for (var toolbar_ind in mpl.toolbar_items) {\n",
3445         "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
3446         "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
3447         "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
3448         "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
3449         "\n",
3450         "        if (!name) {\n",
3451         "            /* Instead of a spacer, we start a new button group. */\n",
3452         "            if (buttonGroup.hasChildNodes()) {\n",
3453         "                toolbar.appendChild(buttonGroup);\n",
3454         "            }\n",
3455         "            buttonGroup = document.createElement('div');\n",
3456         "            buttonGroup.classList = 'mpl-button-group';\n",
3457         "            continue;\n",
3458         "        }\n",
3459         "\n",
3460         "        var button = (fig.buttons[name] = document.createElement('button'));\n",
3461         "        button.classList = 'mpl-widget';\n",
3462         "        button.setAttribute('role', 'button');\n",
3463         "        button.setAttribute('aria-disabled', 'false');\n",
3464         "        button.addEventListener('click', on_click_closure(method_name));\n",
3465         "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
3466         "\n",
3467         "        var icon_img = document.createElement('img');\n",
3468         "        icon_img.src = '_images/' + image + '.png';\n",
3469         "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
3470         "        icon_img.alt = tooltip;\n",
3471         "        button.appendChild(icon_img);\n",
3472         "\n",
3473         "        buttonGroup.appendChild(button);\n",
3474         "    }\n",
3475         "\n",
3476         "    if (buttonGroup.hasChildNodes()) {\n",
3477         "        toolbar.appendChild(buttonGroup);\n",
3478         "    }\n",
3479         "\n",
3480         "    var fmt_picker = document.createElement('select');\n",
3481         "    fmt_picker.classList = 'mpl-widget';\n",
3482         "    toolbar.appendChild(fmt_picker);\n",
3483         "    this.format_dropdown = fmt_picker;\n",
3484         "\n",
3485         "    for (var ind in mpl.extensions) {\n",
3486         "        var fmt = mpl.extensions[ind];\n",
3487         "        var option = document.createElement('option');\n",
3488         "        option.selected = fmt === mpl.default_extension;\n",
3489         "        option.innerHTML = fmt;\n",
3490         "        fmt_picker.appendChild(option);\n",
3491         "    }\n",
3492         "\n",
3493         "    var status_bar = document.createElement('span');\n",
3494         "    status_bar.classList = 'mpl-message';\n",
3495         "    toolbar.appendChild(status_bar);\n",
3496         "    this.message = status_bar;\n",
3497         "};\n",
3498         "\n",
3499         "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n",
3500         "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
3501         "    // which will in turn request a refresh of the image.\n",
3502         "    this.send_message('resize', { width: x_pixels, height: y_pixels });\n",
3503         "};\n",
3504         "\n",
3505         "mpl.figure.prototype.send_message = function (type, properties) {\n",
3506         "    properties['type'] = type;\n",
3507         "    properties['figure_id'] = this.id;\n",
3508         "    this.ws.send(JSON.stringify(properties));\n",
3509         "};\n",
3510         "\n",
3511         "mpl.figure.prototype.send_draw_message = function () {\n",
3512         "    if (!this.waiting) {\n",
3513         "        this.waiting = true;\n",
3514         "        this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n",
3515         "    }\n",
3516         "};\n",
3517         "\n",
3518         "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
3519         "    var format_dropdown = fig.format_dropdown;\n",
3520         "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
3521         "    fig.ondownload(fig, format);\n",
3522         "};\n",
3523         "\n",
3524         "mpl.figure.prototype.handle_resize = function (fig, msg) {\n",
3525         "    var size = msg['size'];\n",
3526         "    if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n",
3527         "        fig._resize_canvas(size[0], size[1], msg['forward']);\n",
3528         "        fig.send_message('refresh', {});\n",
3529         "    }\n",
3530         "};\n",
3531         "\n",
3532         "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
3533         "    var x0 = msg['x0'] / fig.ratio;\n",
3534         "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
3535         "    var x1 = msg['x1'] / fig.ratio;\n",
3536         "    var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n",
3537         "    x0 = Math.floor(x0) + 0.5;\n",
3538         "    y0 = Math.floor(y0) + 0.5;\n",
3539         "    x1 = Math.floor(x1) + 0.5;\n",
3540         "    y1 = Math.floor(y1) + 0.5;\n",
3541         "    var min_x = Math.min(x0, x1);\n",
3542         "    var min_y = Math.min(y0, y1);\n",
3543         "    var width = Math.abs(x1 - x0);\n",
3544         "    var height = Math.abs(y1 - y0);\n",
3545         "\n",
3546         "    fig.rubberband_context.clearRect(\n",
3547         "        0,\n",
3548         "        0,\n",
3549         "        fig.canvas.width / fig.ratio,\n",
3550         "        fig.canvas.height / fig.ratio\n",
3551         "    );\n",
3552         "\n",
3553         "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
3554         "};\n",
3555         "\n",
3556         "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n",
3557         "    // Updates the figure title.\n",
3558         "    fig.header.textContent = msg['label'];\n",
3559         "};\n",
3560         "\n",
3561         "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n",
3562         "    var cursor = msg['cursor'];\n",
3563         "    switch (cursor) {\n",
3564         "        case 0:\n",
3565         "            cursor = 'pointer';\n",
3566         "            break;\n",
3567         "        case 1:\n",
3568         "            cursor = 'default';\n",
3569         "            break;\n",
3570         "        case 2:\n",
3571         "            cursor = 'crosshair';\n",
3572         "            break;\n",
3573         "        case 3:\n",
3574         "            cursor = 'move';\n",
3575         "            break;\n",
3576         "    }\n",
3577         "    fig.rubberband_canvas.style.cursor = cursor;\n",
3578         "};\n",
3579         "\n",
3580         "mpl.figure.prototype.handle_message = function (fig, msg) {\n",
3581         "    fig.message.textContent = msg['message'];\n",
3582         "};\n",
3583         "\n",
3584         "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n",
3585         "    // Request the server to send over a new figure.\n",
3586         "    fig.send_draw_message();\n",
3587         "};\n",
3588         "\n",
3589         "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n",
3590         "    fig.image_mode = msg['mode'];\n",
3591         "};\n",
3592         "\n",
3593         "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n",
3594         "    for (var key in msg) {\n",
3595         "        if (!(key in fig.buttons)) {\n",
3596         "            continue;\n",
3597         "        }\n",
3598         "        fig.buttons[key].disabled = !msg[key];\n",
3599         "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
3600         "    }\n",
3601         "};\n",
3602         "\n",
3603         "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
3604         "    if (msg['mode'] === 'PAN') {\n",
3605         "        fig.buttons['Pan'].classList.add('active');\n",
3606         "        fig.buttons['Zoom'].classList.remove('active');\n",
3607         "    } else if (msg['mode'] === 'ZOOM') {\n",
3608         "        fig.buttons['Pan'].classList.remove('active');\n",
3609         "        fig.buttons['Zoom'].classList.add('active');\n",
3610         "    } else {\n",
3611         "        fig.buttons['Pan'].classList.remove('active');\n",
3612         "        fig.buttons['Zoom'].classList.remove('active');\n",
3613         "    }\n",
3614         "};\n",
3615         "\n",
3616         "mpl.figure.prototype.updated_canvas_event = function () {\n",
3617         "    // Called whenever the canvas gets updated.\n",
3618         "    this.send_message('ack', {});\n",
3619         "};\n",
3620         "\n",
3621         "// A function to construct a web socket function for onmessage handling.\n",
3622         "// Called in the figure constructor.\n",
3623         "mpl.figure.prototype._make_on_message_function = function (fig) {\n",
3624         "    return function socket_on_message(evt) {\n",
3625         "        if (evt.data instanceof Blob) {\n",
3626         "            /* FIXME: We get \"Resource interpreted as Image but\n",
3627         "             * transferred with MIME type text/plain:\" errors on\n",
3628         "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
3629         "             * to be part of the websocket stream */\n",
3630         "            evt.data.type = 'image/png';\n",
3631         "\n",
3632         "            /* Free the memory for the previous frames */\n",
3633         "            if (fig.imageObj.src) {\n",
3634         "                (window.URL || window.webkitURL).revokeObjectURL(\n",
3635         "                    fig.imageObj.src\n",
3636         "                );\n",
3637         "            }\n",
3638         "\n",
3639         "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
3640         "                evt.data\n",
3641         "            );\n",
3642         "            fig.updated_canvas_event();\n",
3643         "            fig.waiting = false;\n",
3644         "            return;\n",
3645         "        } else if (\n",
3646         "            typeof evt.data === 'string' &&\n",
3647         "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
3648         "        ) {\n",
3649         "            fig.imageObj.src = evt.data;\n",
3650         "            fig.updated_canvas_event();\n",
3651         "            fig.waiting = false;\n",
3652         "            return;\n",
3653         "        }\n",
3654         "\n",
3655         "        var msg = JSON.parse(evt.data);\n",
3656         "        var msg_type = msg['type'];\n",
3657         "\n",
3658         "        // Call the  \"handle_{type}\" callback, which takes\n",
3659         "        // the figure and JSON message as its only arguments.\n",
3660         "        try {\n",
3661         "            var callback = fig['handle_' + msg_type];\n",
3662         "        } catch (e) {\n",
3663         "            console.log(\n",
3664         "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
3665         "                msg\n",
3666         "            );\n",
3667         "            return;\n",
3668         "        }\n",
3669         "\n",
3670         "        if (callback) {\n",
3671         "            try {\n",
3672         "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
3673         "                callback(fig, msg);\n",
3674         "            } catch (e) {\n",
3675         "                console.log(\n",
3676         "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
3677         "                    e,\n",
3678         "                    e.stack,\n",
3679         "                    msg\n",
3680         "                );\n",
3681         "            }\n",
3682         "        }\n",
3683         "    };\n",
3684         "};\n",
3685         "\n",
3686         "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
3687         "mpl.findpos = function (e) {\n",
3688         "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
3689         "    var targ;\n",
3690         "    if (!e) {\n",
3691         "        e = window.event;\n",
3692         "    }\n",
3693         "    if (e.target) {\n",
3694         "        targ = e.target;\n",
3695         "    } else if (e.srcElement) {\n",
3696         "        targ = e.srcElement;\n",
3697         "    }\n",
3698         "    if (targ.nodeType === 3) {\n",
3699         "        // defeat Safari bug\n",
3700         "        targ = targ.parentNode;\n",
3701         "    }\n",
3702         "\n",
3703         "    // pageX,Y are the mouse positions relative to the document\n",
3704         "    var boundingRect = targ.getBoundingClientRect();\n",
3705         "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
3706         "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n",
3707         "\n",
3708         "    return { x: x, y: y };\n",
3709         "};\n",
3710         "\n",
3711         "/*\n",
3712         " * return a copy of an object with only non-object keys\n",
3713         " * we need this to avoid circular references\n",
3714         " * http://stackoverflow.com/a/24161582/3208463\n",
3715         " */\n",
3716         "function simpleKeys(original) {\n",
3717         "    return Object.keys(original).reduce(function (obj, key) {\n",
3718         "        if (typeof original[key] !== 'object') {\n",
3719         "            obj[key] = original[key];\n",
3720         "        }\n",
3721         "        return obj;\n",
3722         "    }, {});\n",
3723         "}\n",
3724         "\n",
3725         "mpl.figure.prototype.mouse_event = function (event, name) {\n",
3726         "    var canvas_pos = mpl.findpos(event);\n",
3727         "\n",
3728         "    if (name === 'button_press') {\n",
3729         "        this.canvas.focus();\n",
3730         "        this.canvas_div.focus();\n",
3731         "    }\n",
3732         "\n",
3733         "    var x = canvas_pos.x * this.ratio;\n",
3734         "    var y = canvas_pos.y * this.ratio;\n",
3735         "\n",
3736         "    this.send_message(name, {\n",
3737         "        x: x,\n",
3738         "        y: y,\n",
3739         "        button: event.button,\n",
3740         "        step: event.step,\n",
3741         "        guiEvent: simpleKeys(event),\n",
3742         "    });\n",
3743         "\n",
3744         "    /* This prevents the web browser from automatically changing to\n",
3745         "     * the text insertion cursor when the button is pressed.  We want\n",
3746         "     * to control all of the cursor setting manually through the\n",
3747         "     * 'cursor' event from matplotlib */\n",
3748         "    event.preventDefault();\n",
3749         "    return false;\n",
3750         "};\n",
3751         "\n",
3752         "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n",
3753         "    // Handle any extra behaviour associated with a key event\n",
3754         "};\n",
3755         "\n",
3756         "mpl.figure.prototype.key_event = function (event, name) {\n",
3757         "