Skip to content

Instantly share code, notes, and snippets.

Created September 18, 2015 18:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/e6cb1acd8bfbfda35bf1 to your computer and use it in GitHub Desktop.
Save anonymous/e6cb1acd8bfbfda35bf1 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\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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2TwSgM6oVFACUHNABERABESg0gSMAPwWgNGJSOBK97lLnZMA7BL4KJvVHsAozaZOi4AIiEBtCBgBeCEApidct0lu6trwaDFQCUDNAncCEoDurFRSBERABESg8wQSAnAN0/oQAGsDGNT53lS6RQnASpunYp2TAKyYQdQdERABERCBlQhkCEB+vppZDh4uXCsISABqMrgTkAB0Z6WSIiACIiACnSfQRADajlAI0huoS4mgNQd8CEgA+tBSWREQAREQgU4TaCMAbXeYU5qHktR5WVgewE5PzpjbkwCM2XrquwiIgAj0PgFHAWhB8BhcCsE6XhKAdbR63jFLAOYlp3oiIAIiIAKdIOApAPla47LwWgAGd6J/FWpDArBCxqh8VyQAK28idVAEREAEak3AUwAmWXE5mGlj6nJJANbF0kWMUwKwCIq6hwiIgAiIQFkEAgQguzQUACOF+c9ef+VJAJY1CXvxvr3+NPSizTQmERABEagTgUABaFGtDoD5A5lMulcvCcBetWwZ45IALIOq7ikCIiACIlAUgYIEoO0Ol4WZNoZisNcuCcBes2iZ45EALJOu7i0CIiACIhBKoGABaLszxiwJ91KgiARg6GSrU30JwDpZW2MVAREQgfgIlCQACYJeQKaM4bJwL7wOJQDjm97d63EvzPju0VPLIiACIiACZRMoUQDarlMI8o9NxXxJAMZsvU73XQKw08TVngiIgAiIgA+BDgjAZHfs/sAYTxSRAPSZWHUvKwFY9xmg8YuACIhAtQl0WABaGDxajgmlY9ojKAFY7alcrd5JAFbLHuqNCIiACIjAygS6JADZCS4LUwDyeLkYLgnAGKxUlT5KAFbFEuqHCIiACIhAFoEuCsBkd5hMmn9VviQAq2ydqvVNArBqFlF/REAEREAEkgQqIgBtl7hHkPsDq5hHUAJQj447AQlAd1YqKQIiIAIi0HkCFROABMBlYe4P5MW9glW5JACrYokY+iEBGIOV1EcREAERqC+BCgrApANpz0IAAAf7SURBVDEoBteoyBFzEoD1fUz8Ry4B6M9MNURABERABDpHoOICMAmCp4vw4hJxN9LISAB2blrG35IEYPw21AhEQAREoJcJRCQArRl4ugj3CHY6aEQCsJcfhKLHJgFYNFHdTwREQAREoEgCEQpAO/yh5l/WAmD/vUg06XtJAJZJt9fuLQHYaxbVeERABESgtwhELADThljX/A++est4/UoA9tbUL3c0ZczAcnusu4uACIiACNSJQA8JQGs2egQZPMKl4iIvCcAiafb6vSQAe93CGp8IiIAIxE2gBwUgDcLXr00lU9RJIxKAcU/1zvZeArCzvNWaCIiACIiAH4EmAvBhAFv43Wml0iH1i65rX8X0DDKlTKtrAYDJTQpIAAZMiNpVlQCsnck1YBEQARGIikATAXgdgOkBAwmpX3ZdppDhsHlZL6Ed6lwAR0oABlheVRsEJAA1E0RABERABKpMoIYCMGkO6xHkfkGKQQnAKk/WmPomARiTtdRXERABEagfASMAvwxg9cTobwBwYACNkPrdqMvXNT2DPwVwVJNxvwFgFj/jpsJXAuCoag0ISADWwMgaogiIgAhETGA8gGci7n83ur4hgGe70bDajIeABGA8tlJPRUAERKCOBPie2gDA3+o4+BxjHgFgMYD+HHVVpUYEJABrZGwNVQREQAREQAREQARIQAJQ80AEREAEREAEREAEakZAArBmBtdwRUAEREAEREAEREACUHNABERABESg6gS2AnA+gG0AjAOwF4BbPTr9WwB7AHgJwGjH+mcCOALAWHNmG/fUMQ+LS9vnAZgK4L0Ahpr9eMzj4lL3EADHA9gaADND/zrHuM8BMNMkE5xv7veQBy8VrQEBCcAaGFlDFAEREIHICWwGYGcA9wG4B8DeHgKQIu5oU/8zAL7lWP/9AF4EsD6AXQGwDycD2NOhbeasYbbotwDsbsTg/o51ObYxANYEcJnJ63Kvx7hPBXACALb3BICzjJDdFACPCtElAgMEJAA1EURABERABGIisNzRk8YxMR3KnQB2AbDI1LvFo77lQu8dxePXAXzcJOPzYUZvHs9wOwDAjY4VdzNCkx5Ejtl13AsBfA3AxaadwQCeA3ASgCsd21axGhCQAKyBkTVEERABEeghAq5CiEPm8ukPAXw3IaB8BOBHjGhiYmW2SzHl4gFM4z4NwFc96+YRgEyavQTATgDuTnSCHB4AcEoPzQMNJZCABGAgQFUXAREQARHITWAOgBlmj1zW++h2s3cv2UBSALar/1cA65jKtp4VgJ/2aHttU5YeQO7j86nL8j8BMDzheWzXb46b+/i4z9HHA0iPJz2dmwN4LAHtGnMyyDG5LaWKPUdAArDnTKoBiYAIiEA0BLjPLXm+W7rjSzMSQCcFYLP6EwDcBODDAB5tIgDv8myb70u2zeCKqx3rfhTAD4x45BluNgjEZdzb5hCA8gBGM/W731EJwO7bQD0QAREQARFwJ+CyBEyv4qXG62Xfc/QEvgyA3rw8y7hDAFCQMqjiXIfuHm724R0MgF5Hl34nb5tnCZj1s/YA8mQQBrBoD6CD4epSRAKwLpbWOEVABEQgbgIMxOA7i5GsjHDlMukyAG9nDIteRUbSJi+eJ/wpAFc41Ge9fwLApVNGAvM8Yoq+owAcaoJAmrXNuozCZflpAOZ59Jt1B5llXwrAX5olbIpH7u1rN27W5z4/ts80NBSDp5so4ImKAo77ASi69xKARRPV/URABERABIomwCXdJzPOt+U+OeuNe9CIO+YLTF+s/5TxwiU/a1Wf0bofBMCzdbl/jxeFmL1a1WU5eguZBoa5/Oxl67eqS+8l9wjas3wpCH3aZtmzTfoY9p0ClHkFlQew6FkZ+f0kACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACEROQAIwcgOq+yIgAiIgAiIgAiLgS0AC0JeYyouACIiACIiACIhA5AQkACM3oLovAiIgAiIgAiIgAr4EJAB9iam8CIiACIiACIiACERO4P8DzOXFVpGo8lwAAAAASUVORK5CYII=\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib nbagg\n",
"\n",
"# 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",
" raise RuntimeError\n",
"\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()))\n",
"ax2.imshow(Z, origin='lower', extent=(md.x.min(), md.x.max(), md.y.min(), md.y.max()))\n",
"\n",
"rect = UpdatingRect([0, 0], 0, 0, facecolor='None', edgecolor='black')\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",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment