Skip to content

Instantly share code, notes, and snippets.

@tacaswell
Last active January 28, 2016 19:27
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tacaswell/72b0d579aeb54d4fbf87 to your computer and use it in GitHub Desktop.
Save tacaswell/72b0d579aeb54d4fbf87 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#State of the Library: matplotlib\n",
"\n",
"### PyGotham 2015\n",
"\n",
"Thomas A Caswell | @tacaswell | tcaswell@{bnl.gov, gmail.com}\n",
"\n",
"Brookhaven National Labratory | Co-lead developer of matplotlib\n",
"\n",
"This notebook requires current master + 5 open PRs + some bug fixes to run"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib notebook\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from collections import Counter\n",
"import datetime as dt\n",
"import itertools\n",
"import matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## matplotlib is alive and well\n",
"\n",
"Signed FSA with NumFocus"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Have a very broad contributor base"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Extract author + commit date from git from 2013-01-01 till now\n",
"\n",
" echo 'time&name' > commits_time_author.csv; \n",
" git log --no-merges --since=2013-01-01 --pretty=format:'%at&%aN <%aE>' >> commits_time_author.csv"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"commits = pd.read_csv('commits_time_author.csv', sep='&')"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7fe02b2c0208>"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"commiters = Counter(commits['name'])\n",
"commiter_number = list(range(len(commiters) + 1))\n",
"c_count = list(commiters.values())\n",
"cum_commits = np.r_[[0], np.cumsum(sorted(c_count, reverse=True))]\n",
"\n",
"fig, ax = plt.subplots()\n",
"ax.step(commiter_number, cum_commits, where='post', color='k', lw=5)\n",
"ax.tick_params(axis='y', direction='out')\n",
"ax.tick_params(axis='x', direction='out')\n",
"ax.set_xlim([0, max(commiter_number)])\n",
"ax.set_ylim([0, np.sum(c_count)])\n",
"ax.set_ylabel('cumulative commits')\n",
"ax.set_xlabel('commiter #')\n",
"ax.set_title(\"{} unique contributors from 2013-01-01 \".format(max(commiter_number)-1))\n"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xux9CdheRXn2UWK0aIhiFQKJgooRiYjVxqa1KlYNVpHu1rYC+lu1BlFRa6VVQQtWK7RWglpxq3XrZqlVSd1wpa6lGLBxA0kgwRUSSjWy/Pf95T0w3+Gc2c6cZd5zn+t6rvf9vnfWe56Zuc8zM8/cptAjBISAEBACQkAICAEhMCkEbjOp2qqyQkAICAEhIASEgBAQAoUIoJRACAgBISAEhIAQEAITQ0AEcGINruoKASEgBISAEBACQkAEUDogBISAEBACQkAICIGJISACOLEGV3WFgBAQAkJACAgBISACKB0QAkJACAgBISAEhMDEEBABnFiDq7pCQAgIASEgBISAEBABlA4IASEgBISAEBACQmBiCIgATqzBVV0hIASEgBAQAkJACIgASgeEgBAQAkJACAgBITAxBEQAJ9bgqq4QEAJCQAgIASEgBEQApQNCQAgIASEgBISAEJgYAiKAE2twVVcICAEhIASEgBAQAiKA0gEhIASEgBAQAkJACEwMARHAiTW4qisEhIAQEAJCQAgIARFA6YAQEAJCQAgIASEgBCaGgAjgxBpc1RUCQkAICAEhIASEgAigdEAICAEhIASEgBAQAhNDQARwYg2u6goBISAEhIAQEAJCQARQOiAEhIAQEAJCQAgIgYkhIAI4sQZXdYWAEBACQkAICAEhIAIoHRACQkAICAEhIASEwMQQEAGcWIOrukJACAgBISAEhIAQEAGUDggBISAEhIAQEAJCYGIIiABOrMFVXSEgBISAEBACQkAIiABKB4SAEBACQkAICAEhMDEERAAn1uCqrhAQAkJACAgBISAERAClA0JACAgBISAEhIAQmBgCIoATa3BVVwgIASEgBISAEBACIoDSASEgBISAEBACQkAITAwBEcCJNbiqKwSEgBAQAkJACAgBEUDpgBAQAkJACAgBISAEJoaACODEGlzVFQJCQAgIASEgBISACKB0QAgIASEgBISAEBACE0NABHBiDa7qCgEhIASEgBAQAkJABFA6IASEgBAQAkJACAiBiSEgAjixBld1hYAQEAJCQAgIASEgAigdEAJCQAgIASEgBITAxBAQAZxYg6u6QkAICAEhIASEgBAQAZQOCAEhIASEgBAQAkJgYgiIAE6swVVdISAE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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"def stats_plotter(ax, left_edges, unq_by_week, col, ylabel):\n",
" ln, = ax.step(left_edges,\n",
" unq_by_week[col], color='k', where='post', lw=2)\n",
"\n",
" hln = ax.axhline(unq_by_week[col].mean(), color='forestgreen', zorder=0, lw=2)\n",
" ax.set_ylabel(ylabel)\n",
" return ln, hln\n",
"\n",
"\n",
"def by_window_binner(ax1, ax2, commits, start, stop, step, window_name):\n",
" edges = np.arange(start, stop + step, step)\n",
" left_edges = [dt.datetime.fromtimestamp(t) for t in edges[:-1]]\n",
"\n",
" gb = commits.groupby(pd.cut(commits['time'], edges))\n",
" unq_by_bin = gb.agg(lambda x: len(set(x)))\n",
"\n",
"\n",
" \n",
" stats_plotter(ax1, left_edges, unq_by_bin, 'time', 'commits per {}'.format(window_name))\n",
" stats_plotter(ax2, left_edges, unq_by_bin, 'name', 'committers per {}'.format(window_name))\n",
"\n",
"start = dt.datetime(2013, 1, 1).timestamp()\n",
"stop = dt.datetime.now().timestamp()\n",
"\n",
"fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)\n",
"by_window_binner(ax1, ax2, commits, start, stop, 7*24*60*60, 'week')\n",
"ax1.set_xlim((dt.datetime(2013, 1, 1), dt.datetime(2015, 8, 30)))\n",
"fig.autofmt_xdate()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Other stats"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- matplotlib.org\n",
" - 470k sessions/month\n",
" - 1.4m page views/month\n",
" - google thinks 190k users/month\n",
" - cute patterns in time\n",
"- github\n",
" - 40k views/month\n",
" - 14k users/month\n",
" - 3k total / 1.3k unique cloners/month\n",
" - 1.3k forks\n",
"- source forge\n",
" - 60-120k monthly downloads (39-55% windows)\n",
" - 2M total downloads in last 2 years\n",
" - spikes of 100k/month around releases\n",
"- pypi\n",
" - 190k/month\n",
"- Other\n",
" - no data from Cristoph Gohlke, enthought, continuum, any linux packaging"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Have a large mature codebase\n",
"\n",
"\n",
" 11:41 $ cloc lib\n",
" 1100 text files.\n",
" 1090 unique files. \n",
" 834 files ignored.\n",
" \n",
" http://cloc.sourceforge.net v 1.64 T=3.04 s (88.0 files/s, 51432.2 lines/s)\n",
" -----------------------------------------------------------------------------------\n",
" Language files blank comment code\n",
" -----------------------------------------------------------------------------------\n",
" Python 244 27569 34364 87354\n",
" C++ 6 684 460 3770\n",
" C/C++ Header 4 233 371 604\n",
" Javascript 6 137 106 563\n",
" CSS 4 52 33 172\n",
" HTML 3 16 3 88\n",
" Windows Resource File 1 1 0 2\n",
" -----------------------------------------------------------------------------------\n",
" SUM: 268 28692 35337 92553\n",
" -----------------------------------------------------------------------------------\n",
" \n",
"\n",
" \n",
" Author: John Hunter <jdh2358@gmail.com> 2003-05-12 11:20:38\n",
" Committer: John Hunter <jdh2358@gmail.com> 2003-05-12 11:20:38\n",
" Child: 967cb7017afc868557e1c504bc398f54cac08b42 (adding examples)\n",
" Branches: master and many more (445)\n",
" Follows: \n",
" Precedes: v0.91.2\n",
" \n",
" The new matplotlib hierarchy\n",
" \n",
" svn path=/trunk/matplotlib/; revision=7\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Near-term Release Schedule"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" - In Feature freeze for 1.5, RC as soon as we get the blockers merged!\n",
" - Style change only 2.0 in September\n",
" - 2.1 release March/April 2016"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Style change procedure\n",
"\n",
" - Had BOF at SciPy on style changes\n",
" - Put in PRs/issues against master with changes you want to see\n",
" - Have until next week to propose changes and then Mike Droettboom and I will make decisions\n",
" - Please spread the word!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DEMOS\n",
"### In 1.4.3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Notebook AGG (`%matplotlib nbagg` or `%matplotlib notebook`)\n",
"\n",
" - interactive front end for mpl in the notebook\n",
" - needs a live python kernel on the server side\n",
" - only a png in nbviewer\n",
" - Mike Droettboom, Jason Grout, Phil Elson, Steven Silvester \n",
" - full mouse/key events back into python layer"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"11"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"x = np.linspace(0,10,10000)\n",
"y = np.sin(x)\n",
"ln, = ax.plot(x,y, lw=3)\n",
"evt = []\n",
"colors = iter(itertools.cycle(['r', 'g', 'b', 'k', 'purple']))\n",
"def on_event(event):\n",
" if event.name.startswith('key'):\n",
" fig.suptitle('%s: %s' % (event.name, event.key))\n",
" elif event.name == 'scroll_event':\n",
" fig.suptitle('%s: %s' % (event.name, event.step))\n",
" else:\n",
" fig.suptitle('%s: %s' % (event.name, event.button))\n",
" evt.append(event)\n",
" ln.set_color(next(colors))\n",
"\n",
"fig.canvas.mpl_connect('button_press_event', on_event)\n",
"fig.canvas.mpl_connect('button_release_event', on_event)\n",
"fig.canvas.mpl_connect('scroll_event', on_event)\n",
"fig.canvas.mpl_connect('key_press_event', on_event)\n",
"fig.canvas.mpl_connect('key_release_event', on_event)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,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eHbffffuH//xH7vcCpTLfvvt133uc5/rfvazn3UPeMADur333rs74ogj7rS1a/vtt+9++tOfdmeddVa32WabdQcffHD3qle9akrj1W0BnOyxnn766dMa/cVf/EV36623dptuumn38Y9/fPA4lixZ0h100EGrHsd3v/vdweff/OY3By677LLLwHG0Zfbyyy/v9t1338HXN9988+6AAw4YPP+ptgDe85737H75y18O+nNX7l577TWwyy2AqzPJwwXye37zm98MnM8+++zu9a9//WBLYq6fbbfddrCu8zlMXCb+8ZHPO3cBn3TSSd1f//Vfd+edd95g6+po+clPftJtscUWg+sf/ehHd9dcc83AIB9D3v8znvGM7h/+4R+6+93vfqt6bAGc0Y8H3zQHAQFQAJzD2NypRQCsCuqfkcBUAfCDH/zgYMvdaDfcdLtSJ379/PPP73bcccdBwDjkkEO6Zz/72d1jH/vYwW7iXPJ2c8vSd77zncExaLnbNi9/+tOfHoSCv/qrvxr8wn/Pe94zCID5/X/4h3/Y5bGIeUxY7prcddddB1sZM0DmklsA8zFnYBgt+bgyRB533HGD28yg8/jHP37Q89KXvnTwbe9///sHQSkDwr/9278NwmTezytf+crB1zPI5BbNDGlPecpTuk9+8pOD8Pkf//Efd9oqNg4+k13AEx/rdEb5vE455ZRu2bJlg+eYxvlYTzzxxG6PPfborr/++kGwyuPnXvOa13T5i+jFL37xIAzn8XO3335796hHParbYYcdBj3/+Z//2e22226D21ndLuDc9ZvBLX1Hy3QmGb5y9/evf/3rQQDMsJnrIc0zlF1wwQXddttt19397nefVQDMALvNNtsMHs9WW2016M11+7GPfWzwPDLgZzDN9ZnrPp9zzsu11147CPmjRQCc0Y8H3zQHAQFw/QmAR8b6f0VUBrILopZEXTrFTNwrrl8WtVPU7VFnRe0fdePY9+8el/M3YB5tvSLq0KhPTXJ7AuAcXnhaZi+QvySPPvrobpNNNrlT869+9avBcXyzCYCj28ktRbklLbe05Za03OKT4Sm38OXt5S/fDD95osAXv/jFwS/p3MKU4W/x4sWDx3HzzTcPtvJlOMsAeOyxxw5+yWdwGC15m7lFKrce5jLVLuAPfehDg8AwWjK83f/+9x8EqcmW173udd2PfvSjwf3l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wL5Mgue5kAUEwPUjAOYMHhG1X1S+SVqefjh6H8At4nIeeJKnLI7edCvfBzDPGN456o6oDIQZIMc3Aefu4KOjcqvgiqhDok6fZNgdA7iQfwJ47AQIECDQSwEBcP0JgOtqgAXAdSXvfgkQIECAwBwFBEABcI6js6pNAKwK6idAgAABAo0FBEABsDpyAmBVUD8BAgQIEGgsIAAKgNWREwCrgvoJECBAgEBjAQFQAKyOnABYFdRPgAABAgQaCwiAAmB15ATAqqB+AgQIECDQWEAAFACrIycAVgX1EyBAgACBxgICoABYHTkBsCqonwABAgQINBYQAAXA6sgJgFVB/QQIECBAoLGAACgAVkdOAKwK6idAgAABAo0FBEABsDpyAmBVUD8BAgQIEGgsIAAKgNWREwCrgvoJECBAgEBjAQFQAKyOnABYFdRPgAABAgQaCwiAAmB15ATAqqB+AgQIECDQWEAAFACrIycAVgX1EyBAgACBxgICoABYHTkBsCqonwABAgQINBYQAAXA6sgJgFVB/QQIECBAoLGAACgAVkdOAKwK6idAgAABAo0FBEABsDpyAmBVUD8BAgQIEGgsIAAKgNWREwCrgvoJECBAgEBjAQFQAKyOnABYFdRPgAABAgQaCwiAAmB15ATAqqB+AgQIECDQWEAAFACrIycAVgX1EyBAgACBxgICoABYHTkBsCqonwABAgQINBYQAAXA6sgJgFVB/QQIECBAoLGAACgAVkdOAKwK6idAgAABAo0FBEABsDpyAmBVUD8BAgQIEGgsIAAKgNWREwCrgvoJECBAgEBjAQFQAKyOnABYFdRPgAABAgQaCwiAAmB15ATAqqB+AgQIECDQWEAAFACrIycAVgX1EyBAgACBxgICoABYHTkBsCqonwABAgQINBYQAAXA6sgJgFVB/QQIECBAoLGAACgAVkdOAKwK6idAgAABAo0FBEABsDpyAmBVUD8BAgQIEGgsIAAKgNWREwCrgvoJECBAgEBjAQFQAKyOnABYFdRPgAABAgQaCwiAAmB15ATAqqB+AgQIECDQWEAAFACrIycAVgX1EyBAgACBxgICoABYHTkBsCqonwABAgQINBYQAAXA6sgJgFVB/QQIECBAoLGAACgAVkdOAKwK6idAgAABAo0FBEABsDpyAmBVUD8BAgQIEGgsIAAKgNWREwCrgvoJECBA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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"7"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"txt = ax.annotate('.', (.5, .5), xycoords='axes fraction', ha='center')\n",
"\n",
"def echoer(event):\n",
" if len(event.key) == 1:\n",
" txt.set_text(txt.get_text() + event.key)\n",
" elif event.key == 'backspace':\n",
" txt.set_text(txt.get_text()[:-1])\n",
" \n",
"fig.canvas.mpl_connect('key_press_event', echoer)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,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tdVWZocddnDfYUL94x//aPbcc08zb948873vfc9cdtllTuO20kormcMOO8x84xvfMPYh7Q5xxx13GAAH8+vNN99sLrnkEvf/T3ziE+ZXv/qVGT9+vPubbdg2qj3//PPmAx/4QMVr53gvvfSSeeKJJ8zKK69sttxyS3PppZcO7oP2D7nQLwCOttpqq5nvfve7zvTq/5/fp0+f7s6JFvGb3/ym0yr+9re/ded48MEHzVprreWu85ZbbjH0D/ltsskm5qc//alZc801h/SV77/zne+Yv/zlL+bdd991ctpjjz3ML37xi8Hr9s+/3XbbmVtvvdUd4/7773fnv++++1y/P/axj5mTTjrJnUvaoYce6jSbjMMJJ5xg/v73v5sjjzzSHV+bSqDVJKAA2GojWvD1KAAWLHA9XaESSAOAZ555pjnqqKPMpz71KXPwwQebV1991QHNhAkTzMMPP2xGjx7t+gwAovGbOHGi+da3vmWWXXZZB07AEaDy1FNPmf/5n/8x66yzjrn33nvN97//fXPsscc6EKIJAHKcT37yk+a//uu/HHB+9atfNfvvv78599xz3XYcZ+bMmYNywiQK2MyePXsQUOOE+Nprr7n+0A9A6/jjjze/+c1vDP8XwATovvjFLzp4u+666xxMjRgxwsEiWsMf/vCH5vLLL3dwRttggw2clhMAXHHFFc3qq69uvvSlL5kxY8a479gX2Npxxx3d94DdGWecYR544AF3LciJBvwBawDit7/9bfPhD3/YmaCB4QsuuMA8+eSTTnOJZpExoV/jxo1zgPnYY4854Js0aZKDQBrw9/jjjzsgXHfddd3/ANgrrrjCLLXUUuYrX/mK+/+oUaOGQGKhE1BPphLIUQIKgDkKtx0OrQDYDqPcvteYBIDABtACtKGVknb33Xebrbfe2px22mkO4miA25tvvuk0Yssss8zgtsALgIbfGto2aT/60Y8cBL788stm6aWXHgRAtj3nnHMGtwPGCNiYO3du5EBxfuAQgNx4440rDiaaSeAVmPrIRz7itGaAExB4xBFHDO5byQcwzmdSABDNZyWTKjJdsGCBWW655cwPfvADF1BC+8xnPuMCTPDH5LuoFmcC3nfffZ0m8IUXXnAaSNqsWbMcgLMPwCoAeP755zstK5CtTSXQyhJQAGzl0S3g2hQACxCynmLYJJAEgIASWqWzzjrL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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7fe0295bd0b8>"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from mpl_toolkits.mplot3d import Axes3D\n",
"\n",
"\n",
"def lorenz(x, y, z, s=10, r=28, b=2.667):\n",
" x_dot = s*(y - x)\n",
" y_dot = r*x - y - x*z\n",
" z_dot = x*y - b*z\n",
" return x_dot, y_dot, z_dot\n",
"\n",
"\n",
"dt = 0.01\n",
"stepCnt = 10000\n",
"\n",
"# Need one more for the initial values\n",
"xs = np.empty((stepCnt + 1,))\n",
"ys = np.empty((stepCnt + 1,))\n",
"zs = np.empty((stepCnt + 1,))\n",
"\n",
"# Setting initial values\n",
"xs[0], ys[0], zs[0] = (0., 1., 1.05)\n",
"\n",
"# Stepping through \"time\".\n",
"for i in range(stepCnt):\n",
" # Derivatives of the X, Y, Z state\n",
" x_dot, y_dot, z_dot = lorenz(xs[i], ys[i], zs[i])\n",
" xs[i + 1] = xs[i] + (x_dot * dt)\n",
" ys[i + 1] = ys[i] + (y_dot * dt)\n",
" zs[i + 1] = zs[i] + (z_dot * dt)\n",
"\n",
"fig = plt.figure()\n",
"ax = fig.gca(projection='3d')\n",
"\n",
"ax.plot(xs, ys, zs, alpha=.5)\n",
"ax.set_xlabel(\"X Axis\")\n",
"ax.set_ylabel(\"Y Axis\")\n",
"ax.set_zlabel(\"Z Axis\")\n",
"ax.set_title(\"Lorenz Attractor\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rich user interaction"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuxdB5hcVdn+tvdN7xVSSQgp9NBLAgiRpoIgIP6IIIgCoiIiRSz8Kv4qCoKANEVBpQjSQiCUUBICaaT3nk3Z3Wzfmf2/9945mbuTOzN35s5sm/c8z5fMztxyznvOvfe9X80SNiJABIgAESACRIAIEIGMQiAro0bLwRIBIkAEiAARIAJEgAgICSAXAREgAkSACBABIkAEMgwBEsAMm3AOlwgQASJABIgAESACJIBcA0SACBABIkAEiAARyDAESAAzbMI5XCJABIgAESACRIAIkAByDRABIkAEiAARIAJEIMMQIAHMsAnncIkAESACRIAIEAEiQALINUAEiAARIAJEgAgQgQxDgAQwwyacwyUCRIAIEAEiQASIAAkg1wARIAJEgAgQASJABDIMARLADJtwDpcIEAEiQASIABEgAiSAXANEgAgQASJABIgAEcgwBEgAM2zCOVwiQASIABEgAkSACJAAcg0QASJABIgAESACRCDDECABzLAJ53CJABEgAkSACBABIkACyDVABIgAESACRIAIEIEMQ4AEMMMmnMMlAkSACBABIkAEiAAJINcAESACRIAIEAEiQAQyDAESwAybcA6XCBABIkAEiAARIAIkgFwDRIAIEAEiQASIABHIMARIADNswjlcIkAEiAARIAJEgAiQAHINEAEiQASIABEgAkQgwxAgAcywCedwiQARIAJEgAgQASJAAsg1QASIABEgAkSACBCBDEOABDDDJpzDJQJEgAgQASJABIgACSDXABEgAkSACBABIkAEMgwBEsAMm3AOlwgQASJABIgAESACJIBcA0SACBABIkAEiAARyDAESAAzbMI5XCJABIgAESACRIAIkAByDRABIkAEiAARIAJEIMMQIAHMsAnncIkAESACRIAIEAEiQALINUAEiAARIAJEgAgQgQxDgAQwwyacwyUCRIAIEAEiQASIAAkg1wARIAJEgAgQASJABDIMARLADJtwDpcIEAEiQASIABEgAiSAXANEgAgQASJABIgAEcgwBEgAM2zCOVwiQASIABEgAkSACJAAcg0QASJABIgAESACRCDDECABzLAJ53CJABEgAkSACBABIkACyDVABIgAESACRIAIEIEMQ4AEMMMmnMMlAkSACBABIkAEiAAJINcAESACRIAIEAEiQAQyDAESwAybcA6XCBABIkAEiAARIAIkgFwDRIAIEAEiQASIABHIMARIADNswjlcIkAEiAARIAJEgAiQAHINEAEiQASIABEgAkQgwxAgAcywCedwiQARIAJEgAgQASJAAsg1QASIABEgAkSACBCBDEOABDDDJpzDJQJEgAgQASJABIgACSDXABEgAkSACBABIkAEMgwBEsAMm3AOlwgQASJABIgAESACJIBcA0SACBABIkAEiAARyDAESAAzbMI5XCJABIgAESACRIAIkAByDRABIkAEiAARIAJEIMMQIAHMsAnncIkAESACRIAIEAEiQALINUAEiAARIAJEgAgQgQxDgAQwwyacwyUCRIAIEAEiQASIAAkg1wARIAJEgAgQASJABDIMARLADJtwDpcIEAEiQASIABEgAiSAXANEgAgQASJABIgAEcgwBEgAM2zCOVwiQASIABEgAkSACJAAcg0QASJABIgAESACRCDDECABzLAJ53CJABEgAkSACBABIkACyDVABIgAESACRIAIEIEMQ4AEMMMmnMMlAkSACBABIkAEiAAJINcAESACRIAIEAEiQAQyDAESwAybcA6XCBABIkAEiAARIAIkgFwDRIAIEAEiQASIABHIMARIADNswjlcIkAEiAARIAJEgAiQAHINEAEiQASIABEgAkQgwxAgAcywCedwiQARIAJEgAgQASJAAsg1QASIABEgAkSACBCBDEOABDDDJpzDJQJEgAgQASJABIgACSDXABEgAkSACBABIkAEMgwBEsAMm3AOlwgQASJABIgAESACJIBcA0SACBABIkAEiAARyDAESAAzbMI5XCJABIgAESACRIAIkAByDRABIkAEiAARIAJEIMMQIAHMsAnncIkAESACRIAIEAEiQALINUAEiAARIAJEgAgQgQxDgAQwwyacwyUCRIAIEAEiQASIAAkg1wARIAJEgAgQASJABDIMARLADJtwDpcIEAEiQASIABEgAiSAXANEgAgQASJABIgAEcgwBEgAM2zCOVwiQASIABEgAkSACJAAcg0QASJABIgAESACRCDDECABzLAJ53CJABEgAkSACBABIkACyDVABIgAESACRIAIEIEMQ4AEMMMmnMMlAkSACBABIkAEiAAJINcAESACRIAIEAEiQAQyDAESwAybcA6XCBABIkAEiAARIAIkgFwDRIAIEAEiQASIABHIMARIADNswjlcIkAEiAARIAJEgAiQAHINEAEiQASIABEgAkQgwxAgAcywCedwiQARIAJEgAgQASJAAsg1QASIABEgAkSACBCBDEOABDDDJpzDJQJEgAgQASJABIgACSDXABEgAkSACBABIkAEMgwBEsAMm3AOlwgQASJABIgAESACJIBcA0SACBABIkAEiAARyDAESAAzbMI5XCJABIgAESACRIAIkAByDRABIkAEiAARIAJEIMMQIAHMsAnncIkAESACRIAIEAEiQALINUAEiAARIAJEgAgQgQxDgAQwwyacwyUCRIAIEAEiQASIAAkg1wARIAJEgAgQASJABDIMARLADJtwDpcIEAEiQASIABEgAiSAXANEgAgQASJABIgAEcgwBEgAM2zCOVwiQASIABEgAkSACJAAcg0QASJABIgAESACRCDDECABzLAJ53CJABEgAkSACBABIkACyDVABFKDQL4epjE1h+JRiAARIAJEgAikFwESwPTiy6O3HQKn66l+rDIpRMRm6f/fV1mucq/KF1QGqgQdXQJp26byF5XrQ9/31v/vUjlLBZ/XqNyj8qBjv8v08yMqJ6h8S2VaaLspbTdcnokIEAEiQASIQPIIkAAmjx337DgIgPz9R+V1ld+rlKn8RKVcBYRwqMp7KmeqvOzo9vn6+R8qh6p8Etpvrv5foHKnylqV01RuVPm2yh9C+xoCuEH//pvKqyq5of87DirsCREgAkSACBCBKAiQAHJpdAUEQNpA+g5SMRq+4foZ2r/fqXxXZZkKtrvYMeBn9fNIlYND392q/98c+nu1Y7sH9PM5Kv1DxzcEEJpBHJuNCBABIkAEiECnQoAEsFNNFzvrgkCxflet8lMVmICdDWbgUpXDVX6k8gOVfio1Kj1VtqiA9P1vaKd39P8mlVMjjnOu/g1N4SEqi1RAAB9WgQkY+7ARASJABIgAEehUCJAAdqrpYmddEBik38EUe43KfRG/wzx7hMoIleEqq1S+pvKoyjdVoB0cprIptB80htjW7bpo0e9PVnlLxRDA0aFjcmKIABEgAkSACHQqBEgAO9V0sbMuCBgNIAI3bov43akBxE+zVRpUELTxrkqdilPbN0f/bla5LgoJhBkZ2kNDAEfpZ6epmBNEBIgAESACRKBTIEAC2CmmiZ2M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HG0PatujDbx5kAAJkAAJBN/QCcI5AYgiWBOs/HjoCb9BWAKRaw8HLCVI/2H9P167TRvyB2ILaqW2ZOYBhKUGVpzQOqkQsT+OMGY4zcOPKlcbopzh64i8gBCwyTjcjLmvOeP+CPhAsAHGv0fbzdqesgELXRt9xTnSeoRf6yZtH9X2TnDcyAMIa/fFwTUEQYgvNPBhTebhdMywWj6uDX6XiLiHv+ITwXlJ1peXZHLhvUiABEjAFQFaAF1hYycSIAESIAESIAES8C8BCkD/zh1HTgIkQAIkQAIkQAKuCFAAusLGTiRAAiRAAiRAAiTgXwIUgP6dO46cBEiABEiABEiABFwRoAB0hY2dSIAESIAESIAESMC/BCgA/Tt3HDkJkAAJkAAJkAAJuCJAAegKGzuRAAmQAAmQAAmQgH8JUAD6d+44chIgARIgARIgARJwRYAC0BU2diIBEiABEiABEiAB/xKgAPTv3HHkJEACJEACJEACJOCKAAWgK2zsRAIkQAIkQAIkQAL+JUAB6N+548hJgARIgARIgARIwBUBCkBX2NiJBEiABEiABEiABPxLgALQv3PHkZMACZAACZAACZCAKwIUgK6wsRMJkAAJkAAJkAAJ+JcABaB/544jJwESIAESIAESIAFXBCgAXWFjJxIgARIgARIgARLwLwEKQP/OHUdOAiRAAiRAAiRAAq4IUAC6wsZOJEACJEACJEACJOBfAhSA/p07jpwESIAESIAESIAEXBGgAHSFjZ1IgARIgARIgARIwL8EKAD9O3ccOQmQAAmQAAmQAAm4IkAB6AobO5EACZAACZAACZCAfwlQAPp37jhyEiABEiABEiABEnBFgALQFTZ2IgESIAESIAESIAH/EqAA9O/cceQkQAIkQAIkQAIk4IoABaArbOxEAiRAAiRAAiRAAv4lQAHo37njyEmABEiABEiABEjAFQEKQFfY2IkESIAESIAESIAE/EuAAtC/c8eRkwAJkAAJkAAJkIArAhSArrCxEwmQAAmQAAmQAAn4lwAFoH/njiMnARIgARIgARIgAVcEKABdYWMnEiABEiABEiABEvAvAQpA/84dR04CJEACJEACJEACrghQALrCxk4kQAIkQAIkQAIk4F8CFID+nTuOnARIgARIgARIgARcEaAAdIWNnUiABEiABEiABEjAvwQoAP07dxw5CZAACZAACZAACbgiQAHoChs7kQAJkAAJkAAJkIB/CVAA+nfuOHISIAESIAESIAEScEWAAtAVNnYiARIgARIgARIgAf8SoADY0WuMAAAFYUlEQVT079xx5CRAAiRAAiRAAiTgigAFoCts7EQCJEACJEACJEAC/iVAAejfuePISYAESIAESIAESMAVAQpAV9jYiQRIgARIgARIgAT8S4AC0L9zx5GTAAmQAAmQAAmQgCsCFICusLETCZAACZAACZAACfiXAAWgf+eOIycBEiABEiABEiABVwQoAF1hYycSIAESIAESIAES8C8BCkD/zh1HTgIkQAIkQAIkQAKuCFAAusLGTiRAAiRAAiRAAiTgXwIUgP6dO46cBEiABEiABEiABFwRoAB0hY2dSIAESIAESIAESMC/BCgA/Tt3HDkJkAAJkAAJkAAJuCJAAegKGzuRAAmQAAmQAAmQgH8JUAD6d+44chIgARIgARIgARJwRYAC0BU2diIBEiABEiABEiAB/xKgAPTv3HHkJEACJEACJEACJOCKAAWgK2zsRAIkQAIkQAIkQAL+JUAB6N+548hJgARIgARIgARIwBUBCkBX2NiJBEiABEiABEiABPxLgALQv3PHkZMACZAACZAACZCAKwIUgK6wsRMJkAAJkAAJkAAJ+JcABaB/544jJwESIAESIAESIAFXBCgAXWFjJxIgARIgARIgARLwLwEKQP/OHUdOAiRAAiRAAiRAAq4IUAC6wsZOJEACJEACJEACJOBfAhSA/p07jpwESIAESIAESIAEXBGgAHSFjZ1IgARIgARIgARIwL8EKAD9O3ccOQmQAAmQAAmQAAm4IkAB6AobO5EACZAACZAACZCAfwlQAPp37jhyEiABEiABEiABEnBFgALQFTZ2IgESIAESIAESIAH/EqAA9O/cceQkQAIkQAIkQAIk4IoABaArbOxEAiRAAiRAAiRAAv4lQAHo37njyEmABEiABEiABEjAFQEKQFfY2IkESIAESIAESIAE/EuAAtC/c8eRkwAJkAAJkAAJkIArAhSArrCxEwmQAAmQAAmQAAn4lwAFoH/njiMnARIgARIgARIgAVcEKABdYWMnEiABEiABEiABEvAvAQpA/84dR04CJEACJEACJEACrghQALrCxk4kQAIkQAIkQAIk4F8CFID+nTuOnARIgARIgARIgARcEaAAdIWNnUiABEiABEiABEjAvwQoAP07dxw5CZAACZAACZAACbgiQAHoChs7kQAJkAAJkAAJkIB/CVAA+nfuOHISIAESIAESIAEScEWAAtAVNnYiARIgARIgARIgAf8SoAD079xx5CRAAiRAAiRAAiTgigAFoCts7EQCJEACJEACJEAC/iVAAejfuePISYAESIAESIAESMAVAQpAV9jYiQRIgARIgARIgAT8S4AC0L9zx5GTAAmQAAmQAAmQgCsCFICusLETCZAACZAACZAACfiXAAWgf+eOIycBEiABEiABEiABVwQoAF1hYycSIAESIAESIAES8C8BCkD/zh1HTgIkQAIkQAIkQAKuCFAAusLGTiRAAiRAAiRAAiTgXwIUgP6dO46cBEiABEiABEiABFwRoAB0hY2dSIAESIAESIAESMC/BCgA/Tt3HDkJkAAJkAAJkAAJuCJAAegKGzuRAAmQAAmQAAmQgH8JUAD6d+44chIgARIgARIgARJwRYAC0BU2diIBEiABEiABEiAB/xKgAPTv3HHkJEACJEACJEACJOCKAAWgK2zsRAIkQAIkQAIkQAL+JUAB6N+548hJgARIgARIgARIwBUBCkBX2NiJBEiABEiABEiABPxLgALQv3PHkZMACZAACZAACZCAKwIUgK6wsRMJkAAJkAAJkAAJ+JcABaB/544jJwESIAESIAESIAFXBCgAXWFjJxIgARIgARIgARLwL4H/Dx6JA7tWjdYWAAAAAElFTkSuQmCC\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7fe02b939080>"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Creates two identical panels. Zooming in on the right panel will show\n",
"# a rectangle in the first panel, denoting the zoomed region.\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.patches import Rectangle\n",
"\n",
"# We just subclass Rectangle so that it can be called with an Axes\n",
"# instance, causing the rectangle to update its shape to match the\n",
"# bounds of the Axes\n",
"class UpdatingRect(Rectangle):\n",
" def __call__(self, ax):\n",
" self.set_bounds(*ax.viewLim.bounds)\n",
" ax.figure.canvas.draw_idle()\n",
"\n",
"# A class that will regenerate a fractal set as we zoom in, so that you\n",
"# can actually see the increasing detail. A box in the left panel will show\n",
"# the area to which we are zoomed.\n",
"class MandlebrotDisplay(object):\n",
" def __init__(self, h=500, w=500, niter=50, radius=2., power=2):\n",
" self.height = h\n",
" self.width = w\n",
" self.niter = niter\n",
" self.radius = radius\n",
" self.power = power\n",
"\n",
" def __call__(self, xstart, xend, ystart, yend):\n",
" self.x = np.linspace(xstart, xend, self.width)\n",
" self.y = np.linspace(ystart, yend, self.height).reshape(-1,1)\n",
" c = self.x + 1.0j * self.y\n",
" threshold_time = np.zeros((self.height, self.width))\n",
" z = np.zeros(threshold_time.shape, dtype=np.complex)\n",
" mask = np.ones(threshold_time.shape, dtype=np.bool)\n",
" for i in range(self.niter):\n",
" z[mask] = z[mask]**self.power + c[mask]\n",
" mask = (np.abs(z) < self.radius)\n",
" threshold_time += mask\n",
" return threshold_time\n",
"\n",
" def ax_update(self, ax):\n",
" ax.set_autoscale_on(False) # Otherwise, infinite loop\n",
"\n",
" #Get the number of points from the number of pixels in the window\n",
" dims = ax.axesPatch.get_window_extent().bounds\n",
" self.width = int(dims[2] + 0.5)\n",
" self.height = int(dims[2] + 0.5)\n",
"\n",
" #Get the range for the new area\n",
" xstart,ystart,xdelta,ydelta = ax.viewLim.bounds\n",
" xend = xstart + xdelta\n",
" yend = ystart + ydelta\n",
"\n",
" # Update the image object with our new data and extent\n",
" im = ax.images[-1]\n",
" im.set_data(self.__call__(xstart, xend, ystart, yend))\n",
" im.set_extent((xstart, xend, ystart, yend))\n",
" ax.figure.canvas.draw_idle()\n",
"\n",
"md = MandlebrotDisplay()\n",
"Z = md(-2., 0.5, -1.25, 1.25)\n",
"\n",
"fig1, (ax1, ax2) = plt.subplots(1, 2)\n",
"ax1.imshow(Z, origin='lower', extent=(md.x.min(), md.x.max(), md.y.min(), md.y.max()), cmap='YlGnBu')\n",
"ax2.imshow(Z, origin='lower', extent=(md.x.min(), md.x.max(), md.y.min(), md.y.max()), cmap='YlGnBu')\n",
"\n",
"rect = UpdatingRect([0, 0], 0, 0, facecolor='None', edgecolor='black', lw=2)\n",
"rect.set_bounds(*ax2.viewLim.bounds)\n",
"ax1.add_patch(rect)\n",
"\n",
"# Connect for changing the view limits\n",
"ax2.callbacks.connect('xlim_changed', rect)\n",
"ax2.callbacks.connect('ylim_changed', rect)\n",
"\n",
"ax2.callbacks.connect('xlim_changed', md.ax_update)\n",
"ax2.callbacks.connect('ylim_changed', md.ax_update)\n",
"\n",
"ax2.set_title('zoom on me')\n",
"ax1.set_title('over')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### matplotlib.style\n",
" - partially update rcparams (default values)\n",
" - Tony Yu "
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['grayscale',\n",
" 'seaborn-pastel',\n",
" 'seaborn-talk',\n",
" 'seaborn-dark-palette',\n",
" 'seaborn-deep',\n",
" 'seaborn-paper',\n",
" 'dark_background',\n",
" 'seaborn-notebook',\n",
" 'ggplot',\n",
" 'seaborn-muted',\n",
" 'seaborn-bright',\n",
" 'seaborn-poster',\n",
" 'seaborn-dark',\n",
" 'classic',\n",
" 'seaborn-darkgrid',\n",
" 'fivethirtyeight',\n",
" 'seaborn-colorblind',\n",
" 'seaborn-ticks',\n",
" 'seaborn-white',\n",
" 'seaborn-whitegrid',\n",
" 'bmh']"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.style as ms\n",
"ms.available"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAyAAAAKACAYAAABkGxwyAAAgAElEQVR4XuydCbyNVffHf8aLjCEkc5R5SEgyDw2EQohkCAmFXqHU/8VraEBEZIqEyFAazGMyZchYZMiQCpmHa/zvdQ7ve+/Z59x77rXuueec57f7PJ/Xe89z1t77u9Zz9vmd51l7JQEbCZAACZAACZAACZAACZAACQSIQJIA9cNuSIAESIAESIAESIAESIAESAAUIAwCEiABEiABEiABEiABEiCBgBGgAAkYanZEAiRAAiRAAiRAAiRAAiRAAcIYIAESIAESIAESIAESIAESCBgBCpCAoWZHJEACJEACJEACJEACJEACFCCMARIgARIgARIgARIgARIggYARoAAJGGp2RAIkQAIkQAIkQAIkQAIkQAHCGCABEiABEiABEiABEiABEggYAQqQgKFmRyRAAiRAAiRAAiRAAiRAAhQgjAESIAESIAESIAESIAESIIGAEaAACRhqdkQCJEACJEACJEACJEACJEABwhggARIgARIgARIgARIgARIIGAEKkIChZkckQAIkQAIkQAIkQAIkQAIUIIwBEiABEiABEiABEiABEiCBgBGgAAkYanZEAiRAAiRAAiRAAiRAAiRAAcIYIAESIAESIAESIAESIAESCBgBCpCAoWZHJEACJEACJEACJEACJEACFCCMARIgARIgARIgARIgARIggYARoAAJGGp2RAIkQAIkQAIkQAIkQAIkQAHCGCABEiABEiABEiABEiABEggYAQqQgKFmRyRAAiRAAiRAAiRAAiRAAhQgjAESIAESIAESIAESIAESIIGAEaAACRhqdkQCJEACJEACJEACJEACJEABwhggARIgARIgARIgARIgARIIGAEKkIChZkckQAIkQAIkQAIkQAIkQAIUIIwBEiABEiABEiABEiABEiCBgBGgAAkYanZEAiRAAiRAAiRAAiRAAiRAAcIYIAESIAESIAESIAESIAESCBgBCpCAoWZHJEACJEACJEACJEACJEACFCCMARIgARIgARIgARIgARIggYARoAAJGGp2RAIkQAIkQAIkQAIkQAIkQAHCGCABEiABEiABEiABEiABEggYAQqQgKFmRyRAAiRAAiRAAiRAAiRAAhQgjAESIAESIAESIAESIAESIIGAEaAACRhqdkQCJEACJEACJEACJEACJEABwhggARIgARIgARIgARIgARIIGAEKkIChZkckQAIkQAIkQAIkQAIkQAIUIIwBEiABEiABEiABEiABEiCBgBGgAAkYanZEAiRAAiRAAiRAAiRAAiRAAcIYIAESIAESIAESIAESIAESCBgBCpCAoWZHJEACJEACJEACJEACJEACFCCMARIgARIgARIgARIgARIggYARoAAJGGp2RAIkQAIkQAIkQAIkQAIkQAHCGCABEiABEiABEiABEiABEggYAQqQgKFmRyRAAiRAAiRAAiRAAiRAAhQgjAESIAESIAESIAESIAESIIGAEaAACRhqdkQCJEACJEACJEACJEACJEABwhggARIgARIgARIgARIgARIIGAEKkIChZkckQAIkQAIkQAIkQAIkQAIUIIwBEiABEiABEiABEiABEiCBgBGgAAkYanZEAiRAAiRAAiRAAiRAAiRAAcIYIAESIAESIAESIAESIAESCBgBCpCAoWZHJEACJEACJEACJEACJEACFCCMARIgARIgARIgARIgARIggYARoADxjTq5eamMOTqb45I5OsTRK0nN+X3M0dgc/5gjrTkWmGOAOSLjaIunkwAJkAAJkAAJkAAJkEBYEKAAsd2Ywvzpu1ui4xfzv6+b41NztImjxz825z9ljnLm+POWAFll/vcPc9SNoy2eTgIkQAIkQAIkQAIkQAJhQYACJGY35jEvH4iHAHnUvGe1OeTuyegoXdQz//7KHE3NMTMsIoiTIAESIAESIAESIAESIIE4EKAASRgBMt6YbW2OXOaQOx63mzzWde6WOKkdBz/xVBIgARIgARIgARIgARIICwIUIAkjQPYYs/eYI6MX89vM3/KbI505boZFFHESJEACJEACJEACJEACJOAnAQoQfQGSzJi8bA7J+5A7IJ5tjflDBXPkvHWOn67iaSRAAiRAAiRAAiRAAiQQ+gQoQPQFSGZj8rg5JIG9iBfzshNWLXMUN8eu0A8hzoAESIAESIAESIAESIAE/CdAAaIvQOTOxmFzbDWHbOPr2eabPzxpjkrmWBvlxYhbokQe3Tppjut+uFHusrCRAAmQAAmQAAmQAAncOYHsfpiQJ13kx+a/zbHdHCyt4Ac0z1MoQGKGFp9dsO4yJiXR3JcAWW5eq2yOsubYEqV7+f8b4+FDvoUESIAESIAESIAESCDwBB42Xf4U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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"leheny = 'http://tiny.cc/leheny-style/raw'\n",
"th = np.linspace(0, 2*np.pi, 1024)\n",
"\n",
"with ms.context(leheny):\n",
" fig, ax = plt.subplots()\n",
" ln_sin, = ax.plot(th, np.sin(th))\n",
" ln_cos, = ax.plot(th, np.cos(th))\n",
" ax.set_xlim(0, 2*np.pi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Features in next feature release"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### OO auto-redraw\n",
"\n",
"![img](fig_map.png)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ln, = ax.plot(th, np.sin(th), ls='--')"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ln.set_color('red')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### String labels to bar plots"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xu3dCZyl2VnX8QpIM2wzMiAgyUgIsoVNjBgjEQKCTQgRQWPYTKIgIh1AgmxRIWxhjyAMyB5ZFEgkimwtCCFsIjsxICAEmARBJKSTgKGB4HnGupk7leo+1f1/u+vUOd/383k+01N1nlv3/M5z3vO773bvc2BDAAEEEEAAAQQQWIrAfZbqrc4igAACCCCAAAIIHBBARYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAggQQDWAAAIIIIAAAggsRoAALjbguosAAggggAACCBBANYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAggQQDWAAAIIIIAAAggsRoAALjbguosAAggggAACCBBANYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAggQQDWAAAIIIIAAAggsRoAALjbguosAAggggAACCBBANYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAggQQDWAAAIIIIAAAggsRoAALjbguosAAggggAACCBBANYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAggQQDWAAAIIIIAAAggsRoAALjbguosAAggggAACCBBANYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAggQQDWAAAIIIIAAAggsRoAALjbguosAAggggAACCBBANYAAAggggAACCCxGgAAuNuC6iwACCCCAAAIIEEA1gAACCCCAAAIILEaAAC424LqLAAIIIIAAAgisKICPbsN+ocXbtXjNFq/S4mV7pfC27d9f1OJBLV7Y4itafIpSQQABBBBAAAEEZiGwogC+exu821u8eouvPCKAJYS/2OKrW3xqizdr8Z0tPq/FF84y6PqBAAIIIIAAAmsTWFEAdyP+zu0f33tEAB/b/v+zW7xhi91RwY9s//6IFm+6dqno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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[(None, None), (None, None), (None, None)]"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"ax.bar(range(3), [5, 6, 10], tick_label=list('😅😍🚀'), align='center')\n",
"[(t.set_fontname('symbola'), t.set_fontsize(32)) for t in ax.xaxis.get_ticklabels()]\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Cycler"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import cycler as cr"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table><th>'color'</th><th>'lw'</th><tr><td>'r'</td><td>1</td></tr><tr><td>'g'</td><td>2</td></tr><tr><td>'b'</td><td>3</td></tr></table>"
],
"text/plain": [
"(cycler('color', ['r', 'g', 'b']) + cycler('lw', [1, 2, 3]))"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cr.cycler('color', 'rgb')+ cr.cycler('lw', range(1, 4))"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from cycler import cycler\n",
"cmap = cycler('cmap', ['viridis', 'magma','plasma', 'inferno'])\n",
"x_mode = cycler('x', [1, 2])\n",
"y_mode = cycler('y', x_mode)\n",
"\n",
"def demo(ax, x, y, cmap):\n",
" X, Y = np.ogrid[0:2*np.pi:200j, 0:2*np.pi:200j]\n",
" data = np.sin(X*x) * np.cos(Y*y)\n",
" ax.imshow(data, interpolation='none', cmap=cmap)\n",
" ax.set_title(cmap)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" this.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment