Skip to content

Instantly share code, notes, and snippets.

@ugis22
Last active August 10, 2018 14:24

Revisions

  1. ugis22 revised this gist Aug 10, 2018. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions roc_curve.ipynb
    Original file line number Diff line number Diff line change
    @@ -11,7 +11,7 @@
    },
    {
    "cell_type": "code",
    "execution_count": 81,
    "execution_count": 17,
    "metadata": {},
    "outputs": [
    {
    @@ -29,7 +29,7 @@
    },
    {
    "cell_type": "code",
    "execution_count": 16,
    "execution_count": 18,
    "metadata": {},
    "outputs": [
    {
  2. ugis22 revised this gist Aug 10, 2018. 1 changed file with 0 additions and 18 deletions.
    18 changes: 0 additions & 18 deletions roc_curve.ipynb
    Original file line number Diff line number Diff line change
    @@ -835,24 +835,6 @@
    "plt.xlabel('False Positive rate')\n",
    "plt.ylabel('True Positive rate');"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {
    "collapsed": true
    },
    "outputs": [],
    "source": []
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {
    "collapsed": true
    },
    "outputs": [],
    "source": []
    }
    ],
    "metadata": {
  3. ugis22 created this gist Aug 10, 2018.
    879 changes: 879 additions & 0 deletions roc_curve.ipynb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,879 @@
    {
    "cells": [
    {
    "cell_type": "code",
    "execution_count": 16,
    "metadata": {},
    "outputs": [],
    "source": [
    "fpr, tpr, _= roc_curve(Y_test, y_predicted_grid)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 81,
    "metadata": {},
    "outputs": [
    {
    "name": "stdout",
    "output_type": "stream",
    "text": [
    "0.60119047619\n"
    ]
    }
    ],
    "source": [
    "auc_random_grid = auc(fpr, tpr)\n",
    "print(auc_random_grid)"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": 16,
    "metadata": {},
    "outputs": [
    {
    "data": {
    "application/javascript": [
    "/* Put everything inside the global mpl namespace */\n",
    "window.mpl = {};\n",
    "\n",
    "\n",
    "mpl.get_websocket_type = function() {\n",
    " if (typeof(WebSocket) !== 'undefined') {\n",
    " return WebSocket;\n",
    " } else if (typeof(MozWebSocket) !== 'undefined') {\n",
    " return MozWebSocket;\n",
    " } else {\n",
    " alert('Your browser does not have WebSocket support.' +\n",
    " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
    " 'Firefox 4 and 5 are also supported but you ' +\n",
    " 'have to enable WebSockets in about:config.');\n",
    " };\n",
    "}\n",
    "\n",
    "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
    " this.id = figure_id;\n",
    "\n",
    " this.ws = websocket;\n",
    "\n",
    " this.supports_binary = (this.ws.binaryType != undefined);\n",
    "\n",
    " if (!this.supports_binary) {\n",
    " var warnings = document.getElementById(\"mpl-warnings\");\n",
    " if (warnings) {\n",
    " warnings.style.display = 'block';\n",
    " warnings.textContent = (\n",
    " \"This browser does not support binary websocket messages. \" +\n",
    " \"Performance may be slow.\");\n",
    " }\n",
    " }\n",
    "\n",
    " this.imageObj = new Image();\n",
    "\n",
    " this.context = undefined;\n",
    " this.message = undefined;\n",
    " this.canvas = undefined;\n",
    " this.rubberband_canvas = undefined;\n",
    " this.rubberband_context = undefined;\n",
    " this.format_dropdown = undefined;\n",
    "\n",
    " this.image_mode = 'full';\n",
    "\n",
    " this.root = $('<div/>');\n",
    " this._root_extra_style(this.root)\n",
    " this.root.attr('style', 'display: inline-block');\n",
    "\n",
    " $(parent_element).append(this.root);\n",
    "\n",
    " this._init_header(this);\n",
    " this._init_canvas(this);\n",
    " this._init_toolbar(this);\n",
    "\n",
    " var fig = this;\n",
    "\n",
    " this.waiting = false;\n",
    "\n",
    " this.ws.onopen = function () {\n",
    " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
    " fig.send_message(\"send_image_mode\", {});\n",
    " if (mpl.ratio != 1) {\n",
    " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
    " }\n",
    " fig.send_message(\"refresh\", {});\n",
    " }\n",
    "\n",
    " this.imageObj.onload = function() {\n",
    " if (fig.image_mode == 'full') {\n",
    " // Full images could contain transparency (where diff images\n",
    " // almost always do), so we need to clear the canvas so that\n",
    " // there is no ghosting.\n",
    " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
    " }\n",
    " fig.context.drawImage(fig.imageObj, 0, 0);\n",
    " };\n",
    "\n",
    " this.imageObj.onunload = function() {\n",
    " fig.ws.close();\n",
    " }\n",
    "\n",
    " this.ws.onmessage = this._make_on_message_function(this);\n",
    "\n",
    " this.ondownload = ondownload;\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._init_header = function() {\n",
    " var titlebar = $(\n",
    " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
    " 'ui-helper-clearfix\"/>');\n",
    " var titletext = $(\n",
    " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
    " 'text-align: center; padding: 3px;\"/>');\n",
    " titlebar.append(titletext)\n",
    " this.root.append(titlebar);\n",
    " this.header = titletext[0];\n",
    "}\n",
    "\n",
    "\n",
    "\n",
    "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
    "\n",
    "}\n",
    "\n",
    "\n",
    "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
    "\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._init_canvas = function() {\n",
    " var fig = this;\n",
    "\n",
    " var canvas_div = $('<div/>');\n",
    "\n",
    " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
    "\n",
    " function canvas_keyboard_event(event) {\n",
    " return fig.key_event(event, event['data']);\n",
    " }\n",
    "\n",
    " canvas_div.keydown('key_press', canvas_keyboard_event);\n",
    " canvas_div.keyup('key_release', canvas_keyboard_event);\n",
    " this.canvas_div = canvas_div\n",
    " this._canvas_extra_style(canvas_div)\n",
    " this.root.append(canvas_div);\n",
    "\n",
    " var canvas = $('<canvas/>');\n",
    " canvas.addClass('mpl-canvas');\n",
    " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
    "\n",
    " this.canvas = canvas[0];\n",
    " this.context = canvas[0].getContext(\"2d\");\n",
    "\n",
    " var backingStore = this.context.backingStorePixelRatio ||\n",
    "\tthis.context.webkitBackingStorePixelRatio ||\n",
    "\tthis.context.mozBackingStorePixelRatio ||\n",
    "\tthis.context.msBackingStorePixelRatio ||\n",
    "\tthis.context.oBackingStorePixelRatio ||\n",
    "\tthis.context.backingStorePixelRatio || 1;\n",
    "\n",
    " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
    "\n",
    " var rubberband = $('<canvas/>');\n",
    " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
    "\n",
    " var pass_mouse_events = true;\n",
    "\n",
    " canvas_div.resizable({\n",
    " start: function(event, ui) {\n",
    " pass_mouse_events = false;\n",
    " },\n",
    " resize: function(event, ui) {\n",
    " fig.request_resize(ui.size.width, ui.size.height);\n",
    " },\n",
    " stop: function(event, ui) {\n",
    " pass_mouse_events = true;\n",
    " fig.request_resize(ui.size.width, ui.size.height);\n",
    " },\n",
    " });\n",
    "\n",
    " function mouse_event_fn(event) {\n",
    " if (pass_mouse_events)\n",
    " return fig.mouse_event(event, event['data']);\n",
    " }\n",
    "\n",
    " rubberband.mousedown('button_press', mouse_event_fn);\n",
    " rubberband.mouseup('button_release', mouse_event_fn);\n",
    " // Throttle sequential mouse events to 1 every 20ms.\n",
    " rubberband.mousemove('motion_notify', mouse_event_fn);\n",
    "\n",
    " rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
    " rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
    "\n",
    " canvas_div.on(\"wheel\", function (event) {\n",
    " event = event.originalEvent;\n",
    " event['data'] = 'scroll'\n",
    " if (event.deltaY < 0) {\n",
    " event.step = 1;\n",
    " } else {\n",
    " event.step = -1;\n",
    " }\n",
    " mouse_event_fn(event);\n",
    " });\n",
    "\n",
    " canvas_div.append(canvas);\n",
    " canvas_div.append(rubberband);\n",
    "\n",
    " this.rubberband = rubberband;\n",
    " this.rubberband_canvas = rubberband[0];\n",
    " this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
    " this.rubberband_context.strokeStyle = \"#000000\";\n",
    "\n",
    " this._resize_canvas = function(width, height) {\n",
    " // Keep the size of the canvas, canvas container, and rubber band\n",
    " // canvas in synch.\n",
    " canvas_div.css('width', width)\n",
    " canvas_div.css('height', height)\n",
    "\n",
    " canvas.attr('width', width * mpl.ratio);\n",
    " canvas.attr('height', height * mpl.ratio);\n",
    " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
    "\n",
    " rubberband.attr('width', width);\n",
    " rubberband.attr('height', height);\n",
    " }\n",
    "\n",
    " // Set the figure to an initial 600x600px, this will subsequently be updated\n",
    " // upon first draw.\n",
    " this._resize_canvas(600, 600);\n",
    "\n",
    " // Disable right mouse context menu.\n",
    " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
    " return false;\n",
    " });\n",
    "\n",
    " function set_focus () {\n",
    " canvas.focus();\n",
    " canvas_div.focus();\n",
    " }\n",
    "\n",
    " window.setTimeout(set_focus, 100);\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._init_toolbar = function() {\n",
    " var fig = this;\n",
    "\n",
    " var nav_element = $('<div/>')\n",
    " nav_element.attr('style', 'width: 100%');\n",
    " this.root.append(nav_element);\n",
    "\n",
    " // Define a callback function for later on.\n",
    " function toolbar_event(event) {\n",
    " return fig.toolbar_button_onclick(event['data']);\n",
    " }\n",
    " function toolbar_mouse_event(event) {\n",
    " return fig.toolbar_button_onmouseover(event['data']);\n",
    " }\n",
    "\n",
    " for(var toolbar_ind in mpl.toolbar_items) {\n",
    " var name = mpl.toolbar_items[toolbar_ind][0];\n",
    " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
    " var image = mpl.toolbar_items[toolbar_ind][2];\n",
    " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
    "\n",
    " if (!name) {\n",
    " // put a spacer in here.\n",
    " continue;\n",
    " }\n",
    " var button = $('<button/>');\n",
    " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
    " 'ui-button-icon-only');\n",
    " button.attr('role', 'button');\n",
    " button.attr('aria-disabled', 'false');\n",
    " button.click(method_name, toolbar_event);\n",
    " button.mouseover(tooltip, toolbar_mouse_event);\n",
    "\n",
    " var icon_img = $('<span/>');\n",
    " icon_img.addClass('ui-button-icon-primary ui-icon');\n",
    " icon_img.addClass(image);\n",
    " icon_img.addClass('ui-corner-all');\n",
    "\n",
    " var tooltip_span = $('<span/>');\n",
    " tooltip_span.addClass('ui-button-text');\n",
    " tooltip_span.html(tooltip);\n",
    "\n",
    " button.append(icon_img);\n",
    " button.append(tooltip_span);\n",
    "\n",
    " nav_element.append(button);\n",
    " }\n",
    "\n",
    " var fmt_picker_span = $('<span/>');\n",
    "\n",
    " var fmt_picker = $('<select/>');\n",
    " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
    " fmt_picker_span.append(fmt_picker);\n",
    " nav_element.append(fmt_picker_span);\n",
    " this.format_dropdown = fmt_picker[0];\n",
    "\n",
    " for (var ind in mpl.extensions) {\n",
    " var fmt = mpl.extensions[ind];\n",
    " var option = $(\n",
    " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
    " fmt_picker.append(option)\n",
    " }\n",
    "\n",
    " // Add hover states to the ui-buttons\n",
    " $( \".ui-button\" ).hover(\n",
    " function() { $(this).addClass(\"ui-state-hover\");},\n",
    " function() { $(this).removeClass(\"ui-state-hover\");}\n",
    " );\n",
    "\n",
    " var status_bar = $('<span class=\"mpl-message\"/>');\n",
    " nav_element.append(status_bar);\n",
    " this.message = status_bar[0];\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
    " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
    " // which will in turn request a refresh of the image.\n",
    " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.send_message = function(type, properties) {\n",
    " properties['type'] = type;\n",
    " properties['figure_id'] = this.id;\n",
    " this.ws.send(JSON.stringify(properties));\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.send_draw_message = function() {\n",
    " if (!this.waiting) {\n",
    " this.waiting = true;\n",
    " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
    " }\n",
    "}\n",
    "\n",
    "\n",
    "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
    " var format_dropdown = fig.format_dropdown;\n",
    " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
    " fig.ondownload(fig, format);\n",
    "}\n",
    "\n",
    "\n",
    "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
    " var size = msg['size'];\n",
    " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
    " fig._resize_canvas(size[0], size[1]);\n",
    " fig.send_message(\"refresh\", {});\n",
    " };\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
    " var x0 = msg['x0'] / mpl.ratio;\n",
    " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
    " var x1 = msg['x1'] / mpl.ratio;\n",
    " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
    " x0 = Math.floor(x0) + 0.5;\n",
    " y0 = Math.floor(y0) + 0.5;\n",
    " x1 = Math.floor(x1) + 0.5;\n",
    " y1 = Math.floor(y1) + 0.5;\n",
    " var min_x = Math.min(x0, x1);\n",
    " var min_y = Math.min(y0, y1);\n",
    " var width = Math.abs(x1 - x0);\n",
    " var height = Math.abs(y1 - y0);\n",
    "\n",
    " fig.rubberband_context.clearRect(\n",
    " 0, 0, fig.canvas.width, fig.canvas.height);\n",
    "\n",
    " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
    " // Updates the figure title.\n",
    " fig.header.textContent = msg['label'];\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
    " var cursor = msg['cursor'];\n",
    " switch(cursor)\n",
    " {\n",
    " case 0:\n",
    " cursor = 'pointer';\n",
    " break;\n",
    " case 1:\n",
    " cursor = 'default';\n",
    " break;\n",
    " case 2:\n",
    " cursor = 'crosshair';\n",
    " break;\n",
    " case 3:\n",
    " cursor = 'move';\n",
    " break;\n",
    " }\n",
    " fig.rubberband_canvas.style.cursor = cursor;\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
    " fig.message.textContent = msg['message'];\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
    " // Request the server to send over a new figure.\n",
    " fig.send_draw_message();\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
    " fig.image_mode = msg['mode'];\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.updated_canvas_event = function() {\n",
    " // Called whenever the canvas gets updated.\n",
    " this.send_message(\"ack\", {});\n",
    "}\n",
    "\n",
    "// A function to construct a web socket function for onmessage handling.\n",
    "// Called in the figure constructor.\n",
    "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
    " return function socket_on_message(evt) {\n",
    " if (evt.data instanceof Blob) {\n",
    " /* FIXME: We get \"Resource interpreted as Image but\n",
    " * transferred with MIME type text/plain:\" errors on\n",
    " * Chrome. But how to set the MIME type? It doesn't seem\n",
    " * to be part of the websocket stream */\n",
    " evt.data.type = \"image/png\";\n",
    "\n",
    " /* Free the memory for the previous frames */\n",
    " if (fig.imageObj.src) {\n",
    " (window.URL || window.webkitURL).revokeObjectURL(\n",
    " fig.imageObj.src);\n",
    " }\n",
    "\n",
    " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
    " evt.data);\n",
    " fig.updated_canvas_event();\n",
    " fig.waiting = false;\n",
    " return;\n",
    " }\n",
    " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
    " fig.imageObj.src = evt.data;\n",
    " fig.updated_canvas_event();\n",
    " fig.waiting = false;\n",
    " return;\n",
    " }\n",
    "\n",
    " var msg = JSON.parse(evt.data);\n",
    " var msg_type = msg['type'];\n",
    "\n",
    " // Call the \"handle_{type}\" callback, which takes\n",
    " // the figure and JSON message as its only arguments.\n",
    " try {\n",
    " var callback = fig[\"handle_\" + msg_type];\n",
    " } catch (e) {\n",
    " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
    " return;\n",
    " }\n",
    "\n",
    " if (callback) {\n",
    " try {\n",
    " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
    " callback(fig, msg);\n",
    " } catch (e) {\n",
    " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
    " }\n",
    " }\n",
    " };\n",
    "}\n",
    "\n",
    "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
    "mpl.findpos = function(e) {\n",
    " //this section is from http://www.quirksmode.org/js/events_properties.html\n",
    " var targ;\n",
    " if (!e)\n",
    " e = window.event;\n",
    " if (e.target)\n",
    " targ = e.target;\n",
    " else if (e.srcElement)\n",
    " targ = e.srcElement;\n",
    " if (targ.nodeType == 3) // defeat Safari bug\n",
    " targ = targ.parentNode;\n",
    "\n",
    " // jQuery normalizes the pageX and pageY\n",
    " // pageX,Y are the mouse positions relative to the document\n",
    " // offset() returns the position of the element relative to the document\n",
    " var x = e.pageX - $(targ).offset().left;\n",
    " var y = e.pageY - $(targ).offset().top;\n",
    "\n",
    " return {\"x\": x, \"y\": y};\n",
    "};\n",
    "\n",
    "/*\n",
    " * return a copy of an object with only non-object keys\n",
    " * we need this to avoid circular references\n",
    " * http://stackoverflow.com/a/24161582/3208463\n",
    " */\n",
    "function simpleKeys (original) {\n",
    " return Object.keys(original).reduce(function (obj, key) {\n",
    " if (typeof original[key] !== 'object')\n",
    " obj[key] = original[key]\n",
    " return obj;\n",
    " }, {});\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.mouse_event = function(event, name) {\n",
    " var canvas_pos = mpl.findpos(event)\n",
    "\n",
    " if (name === 'button_press')\n",
    " {\n",
    " this.canvas.focus();\n",
    " this.canvas_div.focus();\n",
    " }\n",
    "\n",
    " var x = canvas_pos.x * mpl.ratio;\n",
    " var y = canvas_pos.y * mpl.ratio;\n",
    "\n",
    " this.send_message(name, {x: x, y: y, button: event.button,\n",
    " step: event.step,\n",
    " guiEvent: simpleKeys(event)});\n",
    "\n",
    " /* This prevents the web browser from automatically changing to\n",
    " * the text insertion cursor when the button is pressed. We want\n",
    " * to control all of the cursor setting manually through the\n",
    " * 'cursor' event from matplotlib */\n",
    " event.preventDefault();\n",
    " return false;\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
    " // Handle any extra behaviour associated with a key event\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.key_event = function(event, name) {\n",
    "\n",
    " // Prevent repeat events\n",
    " if (name == 'key_press')\n",
    " {\n",
    " if (event.which === this._key)\n",
    " return;\n",
    " else\n",
    " this._key = event.which;\n",
    " }\n",
    " if (name == 'key_release')\n",
    " this._key = null;\n",
    "\n",
    " var value = '';\n",
    " if (event.ctrlKey && event.which != 17)\n",
    " value += \"ctrl+\";\n",
    " if (event.altKey && event.which != 18)\n",
    " value += \"alt+\";\n",
    " if (event.shiftKey && event.which != 16)\n",
    " value += \"shift+\";\n",
    "\n",
    " value += 'k';\n",
    " value += event.which.toString();\n",
    "\n",
    " this._key_event_extra(event, name);\n",
    "\n",
    " this.send_message(name, {key: value,\n",
    " guiEvent: simpleKeys(event)});\n",
    " return false;\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
    " if (name == 'download') {\n",
    " this.handle_save(this, null);\n",
    " } else {\n",
    " this.send_message(\"toolbar_button\", {name: name});\n",
    " }\n",
    "};\n",
    "\n",
    "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
    " this.message.textContent = tooltip;\n",
    "};\n",
    "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
    "\n",
    "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
    "\n",
    "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
    " // Create a \"websocket\"-like object which calls the given IPython comm\n",
    " // object with the appropriate methods. Currently this is a non binary\n",
    " // socket, so there is still some room for performance tuning.\n",
    " var ws = {};\n",
    "\n",
    " ws.close = function() {\n",
    " comm.close()\n",
    " };\n",
    " ws.send = function(m) {\n",
    " //console.log('sending', m);\n",
    " comm.send(m);\n",
    " };\n",
    " // Register the callback with on_msg.\n",
    " comm.on_msg(function(msg) {\n",
    " //console.log('receiving', msg['content']['data'], msg);\n",
    " // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
    " ws.onmessage(msg['content']['data'])\n",
    " });\n",
    " return ws;\n",
    "}\n",
    "\n",
    "mpl.mpl_figure_comm = function(comm, msg) {\n",
    " // This is the function which gets called when the mpl process\n",
    " // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
    "\n",
    " var id = msg.content.data.id;\n",
    " // Get hold of the div created by the display call when the Comm\n",
    " // socket was opened in Python.\n",
    " var element = $(\"#\" + id);\n",
    " var ws_proxy = comm_websocket_adapter(comm)\n",
    "\n",
    " function ondownload(figure, format) {\n",
    " window.open(figure.imageObj.src);\n",
    " }\n",
    "\n",
    " var fig = new mpl.figure(id, ws_proxy,\n",
    " ondownload,\n",
    " element.get(0));\n",
    "\n",
    " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
    " // web socket which is closed, not our websocket->open comm proxy.\n",
    " ws_proxy.onopen();\n",
    "\n",
    " fig.parent_element = element.get(0);\n",
    " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
    " if (!fig.cell_info) {\n",
    " console.error(\"Failed to find cell for figure\", id, fig);\n",
    " return;\n",
    " }\n",
    "\n",
    " var output_index = fig.cell_info[2]\n",
    " var cell = fig.cell_info[0];\n",
    "\n",
    "};\n",
    "\n",
    "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
    " var width = fig.canvas.width/mpl.ratio\n",
    " fig.root.unbind('remove')\n",
    "\n",
    " // Update the output cell to use the data from the current canvas.\n",
    " fig.push_to_output();\n",
    " var dataURL = fig.canvas.toDataURL();\n",
    " // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
    " // the notebook keyboard shortcuts fail.\n",
    " IPython.keyboard_manager.enable()\n",
    " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
    " fig.close_ws(fig, msg);\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.close_ws = function(fig, msg){\n",
    " fig.send_message('closing', msg);\n",
    " // fig.ws.close()\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
    " // Turn the data on the canvas into data in the output cell.\n",
    " var width = this.canvas.width/mpl.ratio\n",
    " var dataURL = this.canvas.toDataURL();\n",
    " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.updated_canvas_event = function() {\n",
    " // Tell IPython that the notebook contents must change.\n",
    " IPython.notebook.set_dirty(true);\n",
    " this.send_message(\"ack\", {});\n",
    " var fig = this;\n",
    " // Wait a second, then push the new image to the DOM so\n",
    " // that it is saved nicely (might be nice to debounce this).\n",
    " setTimeout(function () { fig.push_to_output() }, 1000);\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._init_toolbar = function() {\n",
    " var fig = this;\n",
    "\n",
    " var nav_element = $('<div/>')\n",
    " nav_element.attr('style', 'width: 100%');\n",
    " this.root.append(nav_element);\n",
    "\n",
    " // Define a callback function for later on.\n",
    " function toolbar_event(event) {\n",
    " return fig.toolbar_button_onclick(event['data']);\n",
    " }\n",
    " function toolbar_mouse_event(event) {\n",
    " return fig.toolbar_button_onmouseover(event['data']);\n",
    " }\n",
    "\n",
    " for(var toolbar_ind in mpl.toolbar_items){\n",
    " var name = mpl.toolbar_items[toolbar_ind][0];\n",
    " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
    " var image = mpl.toolbar_items[toolbar_ind][2];\n",
    " var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
    "\n",
    " if (!name) { continue; };\n",
    "\n",
    " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
    " button.click(method_name, toolbar_event);\n",
    " button.mouseover(tooltip, toolbar_mouse_event);\n",
    " nav_element.append(button);\n",
    " }\n",
    "\n",
    " // Add the status bar.\n",
    " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
    " nav_element.append(status_bar);\n",
    " this.message = status_bar[0];\n",
    "\n",
    " // Add the close button to the window.\n",
    " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
    " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
    " button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
    " button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
    " buttongrp.append(button);\n",
    " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
    " titlebar.prepend(buttongrp);\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._root_extra_style = function(el){\n",
    " var fig = this\n",
    " el.on(\"remove\", function(){\n",
    "\tfig.close_ws(fig, {});\n",
    " });\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._canvas_extra_style = function(el){\n",
    " // this is important to make the div 'focusable\n",
    " el.attr('tabindex', 0)\n",
    " // reach out to IPython and tell the keyboard manager to turn it's self\n",
    " // off when our div gets focus\n",
    "\n",
    " // location in version 3\n",
    " if (IPython.notebook.keyboard_manager) {\n",
    " IPython.notebook.keyboard_manager.register_events(el);\n",
    " }\n",
    " else {\n",
    " // location in version 2\n",
    " IPython.keyboard_manager.register_events(el);\n",
    " }\n",
    "\n",
    "}\n",
    "\n",
    "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
    " var manager = IPython.notebook.keyboard_manager;\n",
    " if (!manager)\n",
    " manager = IPython.keyboard_manager;\n",
    "\n",
    " // Check for shift+enter\n",
    " if (event.shiftKey && event.which == 13) {\n",
    " this.canvas_div.blur();\n",
    " event.shiftKey = false;\n",
    " // Send a \"J\" for go to next cell\n",
    " event.which = 74;\n",
    " event.keyCode = 74;\n",
    " manager.command_mode();\n",
    " manager.handle_keydown(event);\n",
    " }\n",
    "}\n",
    "\n",
    "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
    " fig.ondownload(fig, null);\n",
    "}\n",
    "\n",
    "\n",
    "mpl.find_output_cell = function(html_output) {\n",
    " // Return the cell and output element which can be found *uniquely* in the notebook.\n",
    " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
    " // IPython event is triggered only after the cells have been serialised, which for\n",
    " // our purposes (turning an active figure into a static one), is too late.\n",
    " var cells = IPython.notebook.get_cells();\n",
    " var ncells = cells.length;\n",
    " for (var i=0; i<ncells; i++) {\n",
    " var cell = cells[i];\n",
    " if (cell.cell_type === 'code'){\n",
    " for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
    " var data = cell.output_area.outputs[j];\n",
    " if (data.data) {\n",
    " // IPython >= 3 moved mimebundle to data attribute of output\n",
    " data = data.data;\n",
    " }\n",
    " if (data['text/html'] == html_output) {\n",
    " return [cell, data, j];\n",
    " }\n",
    " }\n",
    " }\n",
    " }\n",
    "}\n",
    "\n",
    "// Register the function which deals with the matplotlib target/channel.\n",
    "// The kernel may be null if the page has been refreshed.\n",
    "if (IPython.notebook.kernel != null) {\n",
    " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
    "}\n"
    ],
    "text/plain": [
    "<IPython.core.display.Javascript object>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    },
    {
    "data": {
    "text/html": [
    "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB5QUxdfFL2HJOScByQgoqChgFiQnSUvGAKgoAqIgEkRABBQQREGJEpcgOUkwoQQBUZLkjEgGyWGX79y2x292/7vL7Pb0TM/MrXM86k5X1atfvZm5U1XvVRKoiIAIiIAIiIAIiIAIhBSBJCE1Wg1WBERABERABERABEQAEoByAhEQAREQAREQAREIMQISgCE24RquCIiACIiACIiACEgAygdEQAREQAREQAREIMQISACG2IRruCIgAiIgAiIgAiIgASgfEAEREAEREAEREIEQIyABGGITruGKgAiIgAiIgAiIgASgfEAEREAEREAEREAEQoyABGCITbiGKwIiIAIiIAIiIAISgPIBERABERABERABEQgxAhKAITbhGq4IiIAIiIAIiIAISADKB0RABERABERABEQgxAhIAIbYhGu4IiACIiACIiACIiABKB8QAREQAREQAREQgRAjIAEYYhOu4YqACIiACIiACIiABKB8QAREQAREQAREQARCjIAEYIhNuIYrAiIgAiIgAiIgAhKA8gEREAEREAEREAERCDECEoAhNuEargiIgAiIgAiIgAhIAMoHREAEREAEREAERCDECEgAhtiEa7giIAIiIAIiIAIiIAEoHxABERABERABERCBECMgARhiE67hioAIiIAIiIAIiIAEoHxABERABERABERABEKMgARgiE24hisCIiACIiACIiACEoDyAREQAREQAREQAREIMQISgCE24RquCIiACIiACIiACEgAygdEQAREQAREQAREIMQISACG2IRruCIgAiIgAiIgAiIgASgfEAEREAEREAEREIEQIyABGGITruGKgAiIgAiIgAiIgASgfEAEREAEREAEREAEQoyABGCITbiGKwIiIAIiIAIiIAISgPIBERABERABERABEQgxAhKAITbhGq4IiIAIiIAIiIAISADKB0RABERABERABEQgxAhIAIbYhGu4XiHwAoCJbi1FAjgN4EcAvQHsjaWXMABtAbQGcB+AFAAOAVgA4GMAZ2OpkxRACwBtAJQFkBHAeQC/AvgSwBIAUV4ZUWA0UhDA5wAqAsgMYASAzjaazvkp4Nb+VQC7AUww7bhjY9/xNT0JwNMAyMMJJeb7wd2moQDedoKRsdjw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5neYT+H8hX+Vbc+ePU5/3n33XVauXEmDBg386IbqFAEREAEREAFfCUgAJYBeA8w3AfTasUjLz9s0jw6zO9CsSjNmtZtFwXy/HtVbtmyZc7afjfrNmDGD6667LtImlF8EREAEREAEEoKABFAC6DUQfRPAn376ydlcYWvrihcv7rWfWZaf8fkMus/rzi01bmFa62mcmffXB0+///77XHPNNTRu3JipU6fym9/8xtf+qHIREAEREAER8JOABFAC6DW+fBPAeB0D8+InL3L767fTo3YPXrz5RfLmyfsfJgcPHqRo0aLYAc9z5syhTZs25MmTxyszlRcBERABERCBHCUgAZQAeg3ApBbA0etGc+/Se7nz93cy5sYxzmHPgbR48WJno4ft8L3pppu8clJ5ERABERABEUgYAhJACaDXYExaARy+ejgPr3yYB+o8wNONnnaucLNkdxA/+uijPPPMM474mQCee+65XjmpvAiIgAiIgAgkDAEJoATQazAmnQDadO6jKx/lyTVPMqzBMIY0GPIf+du7d68zzfvhhx8yfPhw7rvvPk35eo0QlRcBERABEUg4AhJACaDXoPRNADdt2uQcuWJHwVSvXt1rP53yJn8Dlg5g9PujGdF4BPfXuf9X9R4+fJh27do517pdffXVMWlTlYiACIiACIhAohGQAEoAvcakbwLotWMZy59KP0W/N/sx8ZOJjLtxHHdecaeT5fjx447w9erVi6pVq8a6WdUnAiIgAiIgAglHQAIoAfQalEkhgCfTT9Jzfk9mfjGTSS0mOTt+LW3fvt25ym39+vVMnjyZTp06eeWh8iIgAiIgAiKQ8AQkgBJAr0HqmwCalNk07Lp16/jd734XdT+PnzpOpzmdWPjVQqa3mU77i9s7dc2dO5fevXtTokQJ0tLSuOKKK6JuQwVFQAREQAREIJkISAAlgF7j1TcBjMU5gEdPHOWWWbewYvsKZrebzc1Vb3aed//+/VSsWJEmTZrw4osvUqzYr+/79QpF5UVABERABEQgkQlIACWAXuMzYQXw4C8HafFqCz7Y/QELOi6gUaVGbN261bnFww53tn+vVKnSf3YAewWh8iIgAiIgAiKQLAQkgBJAr7GakAL487GfuWH6DXz5ry9Z1GURdS+o60zz3nbbbdx+++2MHDnS63OrvAiIgAiIgAgkLQEJoATQa/AmnAD+cOQHmkxtwo4DO1jadSkXF7+YAQMGMGHCBGeTh/3TRgCVREAEREAERCC3EpAASgC9xr5vAnj06FG2bdvmTNMWKlQorH7uObiHRlMbYRK4vNtyLjrnImcjyebNm3n22Wfp06ePpnzDIqlMIiACIiACqUxAAigB9BrfvglgpB3b8fMOGk5pyLGTx1jRfQUXlbzIkT0Tv+uuu45atWpFWqXyi4AIiIAIiEBKEpAASgC9BrZvArhjxw6eeOIJHnvsMSpUqJBlP7fs38L1k68nX558vNH2DUY+NpKaNWs6V7kpiYAIiIAIiIAI/JqABFAC6PUz4ZsAhnsMjG30sGnfYgWK8dyVz9G/V3/ngOfnnnuOHj3+/8BnJREQAREQAREQgf8SkABKAL1+HnJUAD/Z84mz4eP8s8+nN70ZfN9gZ83grFmzqFGjhtdnU3kREAEREAERSEkCEkAJoNfAzjEBXLtzrXPUi631W9R5EV3adKFcuXKMGTOGs846y+tzqbwIiIAIiIAIpCwBCaAE0Gtw54gAvvPPd2g+ozlVT1blybpP0vT6pvzyyy8UKFDA6/OovAiIgAiIgAikPAEJoATQa5D7JoC7d+9m7Nix9O/fn/PPP/8//Vz8zWJap7Wm0rZKbJ+5nfr167N06VKvz6HyIiACIiACIpBrCEgAJYBeg903AQzVsbmb5tJhWgdKv12a3Wt307dvX0aNGhX2OYFeH1blRUAEREAERCAVCEgAJYBe49g3ATx48CAff/wxl19+uXNzx/QN0+kxvwel5pbi8LbDTJw4kQ4dOnjtv8qLgAiIgAiIQK4jIAFMPQG8E3gAKAt8CdwLrM4ism8BngAqA1uBR4B5EXwSfBPA4GNgPkr/iL5z+tLr6l7cVf4uip1djCpVqkTQTWUVAREQAREQAREIEJAAppYA2nDYVMAk8B9AX6APYOehfBsi7K9x5fAxV/paA48DdYH3w/yY+C6Ad427i3HjxlEmvQw7v9hJvrz5wuyasomACIiACIiACIQiIAFMLQE0afsE6Bf0sjcB84HBIQIgDTCBuyHo75YAPwGdwvzI+C6AFIECpwsw7ZVptG3bNsxuKZsIiIAIiIAIiEBmBCSAqSOA+YEjQLsMU7ijgdpAgxBBYKOCo9w/gb8e4E4bZ3b3mp2zEnzWSlFg14EDBzj7bHPB2KTTp09Tp1Md1qWto9RvS7FuxTrngGclERABERABERAB7wQkgKkjgOcBu4FrgfeCQuNhwO5DqxoiXI4DPYEZQX/XGXg5g+QFFx0GDM1YV6wFcP2e9VzW6zIu2HUBq95cle1dwN4/CqpBBERABERABHIPAQlg6glgHWBtUAjbpo5uQLVMBNDkcGbQ33UBXgIKZvIxiMsIoLX99Y9fO7d8KImACIiACIiACMSWgAQwdQQwXlPAGSPQtzWAsQ111SYCIiACIiACIhAgIAFMHQG0d2qbQD52dwEH3vFGYEEWm0BsDd+NQR+JxcDPibAJRB9TERABERABERABfwhIAFNLAAPHwNzhTgPfDtwGXAzsAKa46wQDO4JtuniVe/afSWJL4M+JcgyMPyGvWkVABERABERABCSAqSWAFtF2BuCD7kHQXwC2q9ckz9I7wD/djR+B6LdzVUz6bItt4CDouRF8NDQFHAEsZRUBERABERCBRCAgAUw9AYx3XEkA401c7YmACIiACIiARwISQAmgxxByDpI+EOtjYLx2SuVFQAREQAREQAQyJyABlAB6/XxIAL0SVHkREAEREAERiDMBCaAE0GvISQC9ElR5ERABERABEYgzAQmgBNBryEkAvRJUeREQAREQARGIMwEJoATQa8hJAL0SVHkREAEREAERiDMBCaAE0GvISQC9ElR5ERABERABEYgzAQmgBNBryEkAvRJUeREQAREQARGIMwEJoATQa8hJAL0SVHkREAEREAERiDMBCaAE0GvISQC9ElR5ERABERABEYgzAQmgBNBryDkCuHPnTs4+2/5VSQREQAREQAREINEJmACWL1/eulkM+Hei99eP/p3hR6W5qM7zgV256Hn1qCIgAiIgAiKQSgTKAbtT6YHCfRYJYLikQuczfucBB71VE7J0UVcuLTj9qN+HLidlleIcn9cmzuIcHwLxaUXxnBqc7T1+B5yOz+MkVisSwMR6H8G9caaXc/PwdJxejTjHB7Q4i3N8CMSnFcWzOMeHgI+tSAB9hOuxan3BeAQYZnFxDhOUx2zi7BFgmMXFOUxQHrOJs0eAYRYX5zBBRZNNAhgNtfiUUeCLc3wIxKcVxbM4x4dAfFpRPItzfAj42IoE0Ee4HqsuAAwGhgO/eKxLxTMnIM7xiQ5xFuf4EIhPK4pncY4PAR9bkQD6CFdVi4AIiIAIiIAIiEAiEpAAJuJbUZ9EQAREQAREQAREwEcCEkAf4apqERABERABERABEUhEAhLARHwr6pMIiIAIiIAIiIAI+EhAAugjXFUtAiIgAiIgAiIgAolIQAKYc2/lTuABoCzwJXAvsDqL7twCPAFUBrYCjwDzcq77SdVyJKxvA7oDNd0n/Bh4GPggqZ44ZzobCefgHnYEZgILgFY50/WkajVSzucAfwHaAMWB7cBAYFFSPXX8OxspZ/sO7wdcAPwAzHZPcjgW/64nTYv13Z+Dl7s/C1sD87PpfQPgb8DF7i0ezwDPJ80TJ1BHJYA58zI6AFMB+4L5B9AX6APUAL4N0aVrXDl8zJU++5A8DtQF3s+ZR0iaViNlPd19J+8B9sX9oPuD075scuV9kWG+6Ug5B6qt4PLeBuyXAGZLO1LO+V2+/wKedK+XLO9eL/lZtq3l3gyRcu4CvAT0Buy74yLgFSANGJB7MWb75DcA1wKfAHOA7ASwIvAFMBGY4JYdD3Ryy2fboDL8l4AEMGeiwaTNAt5+WwykTe5vPnb2X8ZkXyJ28Kh9WAJpCfCTG/g58xTJ0WqkrDM+VV6Xc39gSnI8co70MhrOxvZd4GWgHmAjVRoBzAYS+kkAAAw+SURBVPr1Rcr5DneEpRpwIkciIzkbjZTzWKA60DDocf8KXOnGdnJSiG+v7T7e7ATwaaCFyzrQOxv9uxSwgRKlCAhIACOAFaOs9hv5EaBdhinc0UBtwIa3MyYbFRzl/gn8nf1WaVMONoKiFJpANKwz1mSXhdvoib2vNwQ6JIFoOf8JqOV+6dtoiQQw6wCLhrNN89rIqn3ntAS+B2YA9oP0lOI5ZvFsyxhMRJq4y0UqAW8Ck4GnxDksAuEI4CpgPfDHoBpNGmcBZ+mXnLA4/yeTBDAyXrHIfZ47lWjD3jZVEEi2zqwHUDVEI8eBnu4Xd+CvO7sjJ3YivVJoAtGwzljTOKCpuyZQa3lix9ni30a27ZceWy8lAcz+UxxNPG8GfgvY0gabKrsQsJi2XzhtGYnS/xKIhrPVcjdgo372czUf8Jy7zEeMwyMQjgB+7X5X2HKGQKrjLnOw97YnvKaUywhIAOMfB4EvFwvatUHN26aOboBN1WRMJoAmh7ZQPpACa04Kxv8RkqbFaFgHP5yt/3sIuA7YkDRPHf+ORsrZRlWNp62BXex2VwKY/XuLlLPVaD8w7TvC1k4FRvzuC9qAln2ruS9HNJztO+JV4FF3XXYVV7JtrZpt3lPKnkC4AmhLRuyK1ECyXybXuJtI9mbfjHIECEgA4x8L0UzjaAo4uvcUDetAS/e7X+aNgI+iaz7XlIqUs4362TRO8BRkHpdWujsKbjvdlX5NIFLOVtrWWNraP4vjQLK1xDY1bLMH9sulknfOdoLDOlesA7V1BV4AigAW10pZEwhHADUFHMMokgDGEGYEVdkCYztexEZAAmmjewxGZptAbNTkxqD8NnLyszaBZEs9UtZWoR3PY7/J29SvfakrZU8gEs42ImUjJMHpz4DFuK3tsVEriUlo5pFwthpsqsyWi9iatICEGONBgI10KcWGs32fL3e5Bmq0namTXAHUesvsIy0cAbS1qze7J2YEarSpdvulUptAsmf8qxwSwAiBxSh74IgB26Fn08C3A3b+nB01ssPdbWpHjgRk0KaL7Tcfmya2s9JsMbf9wNQxMNm/kEhZ27SvTdnYD007oieQDgH2Ryk0gUg5Z6xFU8DhRVaknO3IF/vl0viOcdcAmpQ8654NGF6ruS9XpJyHATa1bt/lJun2C46JiYmh1aUUmoCNjgZ+GbRZAWP4trtxyWa+bKr3fPdsVqshcAyMHQFj0+smfbb5RsfARBFhEsAooMWoiI3+mWzYQdB2rpHt6jXJs/QO8E9340egubau9Nlv8oGDoOfGqC+pXk0krI17qJ3VtmPVvuSVMicQCWcJYPSRFCln+yFppwjYKIn9Ymnn1WkXcPb8I+Fsmz4C67hNWGy39evu/7OZGqXQBGztpAlfxmS7p23jo/3iYpuYLF8g2UkZFs+Bg6AtlnUQdBQRJgGMApqKiIAIiIAIiIAIiEAyE5AAJvPbU99FQAREQAREQAREIAoCEsAooKmICIiACIiACIiACCQzAQlgMr899V0EREAEREAEREAEoiAgAYwCmoqIgAiIgAiIgAiIQDITkAAm89tT30VABERABERABEQgCgISwCigqYgIiIAIiIAIiIAIJDMBCWAyvz31XQREQAREQAREQASiICABjAKaioiACEREwE76/wa4xD30PKLCCZA53P7bhfR2daDdI60kAiIgAglNQAKY0K9HnROBhCBgp/H3CNGTC4EtYfQwXIEKo6qQWQL1B/7Sbl7Y4N7nvDraSoPK5QVKAT8AJ4FGwDL37uLg6wFLACeAgzFoM9ZV9AGeAs6NdcWqTwREIDkJSACT872p1yIQTwImgKWBXhkateuuwrnkPl4CaNdFfeX21e4QrQfUdO/XjiWvzAQwlm2EW1d+4HgYmSWAYUBSFhHITQQkgLnpbetZRSA6AiaA5wCtMil+E/CwezenCeF7wB+BbW7+jAJoI2VjgcaAXQa/073neoqbvzzwV6CJK5g2incPYJfDh0qhBNPuc7Z7nU187O7bQsAIoIM7cveBe//2x26FWfUpuP5j7nR2cD+sfmsneArY2rI7eOtm6PCXwKvAE+7/t3I2ZWz3nW4H/g7YRfeZJWsj0OeuwKdAQ+ABd5TW7gr/EVgADAIOB41YBtf5mMu8APAXoJP7jj937ygP3EseXcSolAiIQMITkAAm/CtSB0UgxwlkJ4Dt3KlRk4eirlicB1wOpAMZBc0ubv89cIc7rWp/byLypiuEnwErgDGuAA5x1w9e6raTEUgoAfwNsA/o514UPw5o4YraLuAh4AagMnDAzZNZn4Lr3wS0AWa5ZY8A9uffGQSwNvAJYEJmImrJ/t96l8dWt2+PAHe7IncZ8CLQH5ieyVs3ATQOJtAvA/YdbqOeA9y6rS17pueAJa442yih1WltXezWa9PUJodpgL2rwcAeoC0wzM0XEPgcD0B1QAREIPYEJICxZ6oaRSDVCJgA2miTjX4F0mLAxC9UKgt8B1QHNocQwEXAbuC2EIVvd6XFpm4DyeTQJO1GYGWIMhkF0EYVRwE9XVky4bNRsS6uuFkVVqfJ0jNu3qz6lLH+zKaAM24CsdG+aYBNR1uytmxEsI7738bgXuC1oGcy+boeqJ+FAFrfr8gmyGxEzxiUcfOFmgK+CDChNQE0WQ6kdwAbATTxVhIBEUhRAhLAFH2xeiwRiCEBE8Dz3RGrQLU2emQjRpZMkGxK8yp3s4R9rxQGmgJvhRDA5q70mHzYZop57u5Zq8umP2/NIJv2/88C+gITQzxXQNCOuiOOltcE1KZFZwI2smbTpuVc8QxU8br7DCadWfUpWgG0afHO7jpEY2JT2LYRw0YjA5Ic6HOgT/lcWTXeoZJJpo202shmcDIptVG8akAxwDauFHT//OKOfGbcBGKSOMMdCQyuywTTRjhNmJVEQARSlIAEMEVfrB5LBGJIILsp4K/d3cAjXaE6E7Bp3JuBN0IIoHXNpmht7aCJi02pjnanZU3wamSy69g2ndhIYMYUEDQbIbS+/ATsD8pkU9EfuRJrYhhI1jcbhTOxzKpP0QqgreuzaVSb+i0OLHfFz3YTm+DZyGTHoDV9gX7ZOkpbDxgqhTpqpqI7kmdiaeJmz98AeCFop3KoEUATPJtGtmnh0xkas93Ne2MYQ6pKBEQgwQhIABPshag7IpCABLISQNsdbKJg05pr3b7bbty3sxHA4Me8yx1BtI0YNrL1uLt2LtzjVLLbZXx2iClgWxe3A3ja3XiREXtwnzLWb9Oz77qbJoKFNJSc2f/7hyuANtVqI42W7LvXRlBNfANTxOG8+lBt2MaWye5oX6AOm0oeGiSA3d22TEQDyaboN2Z4d+H0QXlEQARSgIAEMAVeoh5BBHwmkJUA2pTlv4CFrsTZqJdJlY26ZTYC+GfAduGafNg0pa2Ns2nLa91NILaz1eTMBMZG6GxH7y3Ak0HTzsGPnJ0AWl7bNNHSnV62kTebLg3eBJJVnzLWH9hhbOsibYrbpnFtxCyUnJnQWls2JW5SaTuAA8k2wdhuZ9uQstRlYRtRTFhtN3CoFKqNwAinbSaxtYx2/I1JpU0z26Yc65tJq63ts/WFX7jTvtZv68+VwEB3I4qdd2i7im2zim0iURIBEUhRAhLAFH2xeiwRiCGB7KaA7bgWG8myqUjb9GE7Um2zRmYCaGJnU58mUiYhNpp2X9BuWRsps/VqJmgmMCZsNn1qa/pCjQqGI4AZj4H50N2AEThSJas+harfRthM4Gwqe1KIY2AC+Eu60mrr8Gy01HYMB6durnzZaJyJmq3vs80bdoxLuAJo+ewoGZM4E2kTPdvda+8tIID2XW/rK2263foUOAbGRkLt301mbVraptntNhPbAGKbWJREQARSlIAEMEVfrB5LBERABERABERABDIjIAFUbIiACIiACIiACIhALiMgAcxlL1yPKwIiIAIiIAIiIAISQMWACIiACIiACIiACOQyAhLAXPbC9bgiIAIiIAIiIAIiIAFUDIiACIiACIiACIhALiMgAcxlL1yPKwIiIAIiIAIiIAISQMWACIiACIiACIiACOQyAhLAXPbC9bgiIAIiIAIiIAIiIAFUDIiACIiACIiACIhALiMgAcxlL1yPKwIiIAIiIAIiIAISQMWACIiACIiACIiACOQyAhLAXPbC9bgiIAIiIAIiIAIi8H+ZpYXtd+nJLAAAAABJRU5ErkJggg==\" width=\"640\">"
    ],
    "text/plain": [
    "<IPython.core.display.HTML object>"
    ]
    },
    "metadata": {},
    "output_type": "display_data"
    }
    ],
    "source": [
    "plt.figure()\n",
    "plt.plot(fpr, tpr, color ='Green', linewidth = 1)\n",
    "plt.title('ROC curve for Random Forest')\n",
    "plt.plot([0,1], [0,1], 'k--', lw = 1)\n",
    "plt.plot([0,0], [1,0], 'k--', lw = 1, color = 'black')\n",
    "plt.plot([1,0], [1,1], 'k--', lw = 1, color = 'black')\n",
    "plt.xlabel('False Positive rate')\n",
    "plt.ylabel('True Positive rate');"
    ]
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {
    "collapsed": true
    },
    "outputs": [],
    "source": []
    },
    {
    "cell_type": "code",
    "execution_count": null,
    "metadata": {
    "collapsed": true
    },
    "outputs": [],
    "source": []
    }
    ],
    "metadata": {
    "kernelspec": {
    "display_name": "Python 3",
    "language": "python",
    "name": "python3"
    },
    "language_info": {
    "codemirror_mode": {
    "name": "ipython",
    "version": 3
    },
    "file_extension": ".py",
    "mimetype": "text/x-python",
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
    "version": "3.6.3"
    }
    },
    "nbformat": 4,
    "nbformat_minor": 2
    }