Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save phobson/0d1db3c982f2c1db77a8 to your computer and use it in GitHub Desktop.
Save phobson/0d1db3c982f2c1db77a8 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",
"### PyData Seattle 2015\n",
"\n",
"Thomas Caswell @tacaswell\n",
"\n",
"Brookhaven National Labratory\n",
"\n",
"Co-lead developer of matplotlib\n",
"\n",
"This requires the commits on https://github.com/matplotlib/matplotlib/pull/4787"
]
},
{
"cell_type": "code",
"execution_count": 13,
"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": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"commits = pd.read_csv('commits_time_author.csv', sep='&')"
]
},
{
"cell_type": "code",
"execution_count": 15,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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 0x7f97f9099da0>"
]
},
"execution_count": 15,
"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": 16,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xux9CdxdRXn+UWJq0RDFigESBRUj8oFYaSz9W7eqiQvSzbUV0VqrDWJFrZVWxQ2rFVoqQa24tNStm6ZWJXVDpVKpUooBG6sGSSARXCChVkOA//t8uSeZTM45M+/MnDNz7n3m93tz75c7Z+adZ96Zec4s79yhYiACRIAIEAEiQASIABGYKQTuMFOlZWGJABEgAkSACBABIkAEKhJAGgERIAJEgAgQASJABGYMARLAGatwFpcIEAEiQASIABEgAiSAtAEiQASIABEgAkSACMwYAiSAM1bhLC4RIAJEgAgQASJABEgAaQNEgAgQASJABIgAEZgxBEgAZ6zCWVwiQASIABEgAkSACJAA0gaIABEgAkSACBABIjBjCJAAzliFs7hEgAgQASJABIgAESABpA0QASJABIgAESACRGDGECABnLEKZ3GJABEgAkSACBABIkACSBsgAkSACBABIkAEiMCMIUACOGMVzuISASJABIgAESACRIAEkDZABIgAESACRIAIEIEZQ4AEcMYqnMUlAkSACBABIkAEiAAJIG2ACBABIkAEiAARIAIzhgAJ4IxVOItLBIgAESACRIAIEAESQNoAESACRIAIEAEiQARmDAESwBmrcBaXCBABIkAEiAARIAIkgLQBIkAEiAARIAJEgAjMGAIkgDNW4SwuESACRIAIEAEiQARIAGkDRIAIEAEiQASIABGYMQRIAGeswllcIkAEiAARIAJEgAiQANIGiAARIAJEgAgQASIwYwiQAM5YhbO4RIAIEAEiQASIABEgAaQNEAEiQASIABEgAkRgxhAgAZyxCmdxiQARIAJEgAgQASJAAkgbIAJEgAgQASJABIjAjCFAAjhjFc7iEgEiQASIABEgAkSABJA2QASIABEgAkSACBCBGUOABHDGKpzFJQJEgAgQASJABIgACSBtgAgQASJABIgAESACM4YACeCMVTiLSwSIABEgAkSACBABEkDaABEgAkSACBABIkAEZgwBEsAZq3AWlwgQASJABIgAESACJIC0ASJABIgAESACRIAIzBgCJIAzVuEsLhEgAkSACBABIkAESABpA0SACBABIkAEiAARmDEESABnrMJZXCJABIgAESACRIAIkADSBogAESACRIAIEAEiMGMI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1yXmavypSjBL+pc4OztL+Key2dTpsA5SI+qf3tixJwH0r+s+Yt6hj0RHnqZ6BhCb4g84AI8NG04//fTqzDPPHDbTxLmNvQzUP7FBKJMj/krAeojOOugBVM8kx449ipmrDJgBnFw1ungyueOJ+vREIwFsrsumPYBbJOpLRcw9gIfK35unxxxYEiJABIgAESACM4UAVv2unakSTwpLAthc69jnh1PATxIBGXyNyG+LLBcxTwEDv0NEts+i8bDMRIAIEAEiQARGjMAi0R0HPG8fcRmCVScBbIfuDPnp90RgIF8VafIDGAw8HyQCRIAIEAEiQASIQC4ESABzIc98iQARIAJEgAgQASKQCQESwEzAM1siQASIABEgAkSACORCgAQwF/LMlwgQASJABIgAESACmRAgAcwEPLMlAkSACBABIkAEiEAuBEgAcyHPfIkAESACRIAIEAEikAkBEsBMwDNbIkAEiAARIAJEgAjkQoAEMBfyzJcIEAEiQASIABEgApkQIAHMBDyzJQJEgAgQASJABIhALgRIAHMhz3yJABEgAkSACBABIpAJARLATMAzWyJABIgAESACRIAI5EKABDAX8syXCBABIkAEiAARIAKZECABzAQ8syUCRIAIEAEiQASIQC4ESABzIc98iQARIAJEgAgQASKQCQESwEzAM1siQASIABEgAkSACORCgAQwF/LMlwgQASJABIgAESACmRAgAcwEPLMlAkSACBABIkAEiEAuBEgAcyHPfIkAESACRIAIEAEikAkBEsBMwDNbIkAEiAARIAJEgAjkQoAEMBfyzJcIEAEiQASIABEgApkQIAHMBDyzJQJEgAgQASJABIhALgRIAHMhz3yJABEgAkSACBABIpAJARLATMAzWyJABIgAESACRIAI5EJgFgngmwXsJ4ncR+RmkS+I/KHIZqMSjpHvbxd5qMiNIu8WeV2uSmK+RIAIEAEiQASIABFIicAsEsA3CYD/IPJ1kf1F3iHyIJGHTIC9q3x+U+S9Iq8XeYDIp0TeJnJOSvCZFhEgAkSACBABIkAEciAwiwTQxvnB8h+XiRwocpPIc0TeInKIyG2TyKfK54tFjshRScyTCBABIkAEiAARIAIpESAB3LX8+0KR+06APVs+jxR5ggH08fL9YpHFIlg2ZiACRIAIEAEiQASIwGgRmHUC+FipuY+K/LrIpye1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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, 7, 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, targetting first RC by end of month\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 August 9 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": 17,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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": [
"10"
]
},
"execution_count": 17,
"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": 18,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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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mAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICcDoBeHXt1kvqjGC7tc6BOrcdZ99+tn79z+r8fJ376txc55V17tji9QVg8wetd0eAAAECBFIBATiNAHxNLcoldZ5T5wt1rqzzojpPqvPdLZZohN7f1PmTOmfUeXuds+v8ogBMP+TMEyBAgACB3RcQgNMIwC/Wql1b57r1lTu9fryzzsE6129aw7Pqv/+nznl1Prf+exfWj++t80gBuPsftG4BAQIECBBIBQTg6gfg+BTtt+o8rc4n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7bYQIECAAIE5BATg6gfg2bUHd9Q5t87nN+zEeE7f3XVeumlPXlj//e46N9cZjwJ+s854/uD4lPH4NPA9m15fAM7xgeZVCBAgQIDAMgkIwNUPwEUfAXxeLejf17mgzj+uL+tD1sPvt+rH8cjhxhcBuEwf0W4LAQIECBCYQ0AArn4AjjXY6jmAX65ff2Wdzc8BPPaI4cYAHM8ZHI8WHjcADxw4MNuzZ8/Rldu/f//R44UAAQIECBBYHoG1tbXZOOPlyJEjs0OHDo2f7l3/f/zy3NCmW3Ja0/vZzXcznuc3vgr4wvUYvKJ+vLjO+JTuVl8F/Lf162fV+Z06d9UZXzU8viJ4fBp5fEuYjS8eAdzNK+t9EyBAgACBbQh4BHAajwCO1biqzsvqjK/y/VSdY98HcF/9/PY64xG/W9Z36FH145/XGY/43Vvnk3VGRI7X2/wiALfxgWeEAAECBAjspoAAnE4A7tSeCcCdkvV2CRAgQIDADgkIQAGYrpYATAXNEyBAgACBZgEBKADTlROAqaB5AgQIECDQLCAABWC6cgIwFTRPgAABAgSaBQSgAExXTgCmguYJECBAgECzgAAUgOnKCcBU0DwBAgQIEGgWEIACMF05AZgKmidAgAABAs0CAlAApisnAFNB8wQIECBAoFlAAArAdOUEYCpongABAgQINAsIQAGYrpwATAXNEyBAgACBZgEBKADTlROAqaB5AgQIECDQLCAABWC6cgIwFTRPgAABAgSaBQSgAExXTgCmguYJECBAgECzgAAUgOnKCcBU0DwBAgQIEGgWEIACMF05AZgKmidAgAABAs0CAlAApisnAFNB8wQIECBAoFlAAArAdOUEYCpongABAgQINAsIQAGYrpwATAXNEyBAgACBZgEBKADTlROAqaB5AgQIECDQLCAABWC6cgIwFTRPgAABAgSaBQSgAExXTgCmguYJECBAgECzgAAUgOnKCcBU0DwBAgQIEGgWEIACMF05AZgKmidAgAABAs0CAlAApisnAFNB8wQIECBAoFlAAArAdOUEYCpongABAgQINAsIQAGYrpwATAXNE1gigTe+8Y2zj33sY7MPfehDS3Sr3BQCBE61gAAUgOlOCcBU0DyBBoGrr7569uEPf3h28803P+C9vetd75pddtlls8OHD891K8bbef3rXz97xCMecfT177///tlpp502++pXvzp7+MMfPtfb8EoECOy+gAAUgOkWCsBU0DyBBoERbjfddNPs4x//+P8XgJdffvnsjjvumOtWHO/tzDXslQgQWBoBASgA02UUgKmgeQINAvMG4PEeKTx2E08WgHfdddfsda973eyDH/zg7Dvf+c7s/PPPn735zW+enXPOOQ330rsgQGBeAQEoAOfdleO9ngBMBc0TaBA4Xri9853vnF1xxRU/fATwZIF3st9/1rOeNdu3b9/R6BufJh5v+33ve9/ss5/97Oz0009vuKfeBQEC8wgIQAE4z56c6HUEYCponkCDwAi3N7zhDbMzzzzzAe/tBz/4weyss85aKACPvZ1jz/+76KKLZm95y1tmn/70p2dPf/rTZ9/4xjd++BzBe++99+j7HM8/HL/nhQCB5RAQgAIw3UQBmAqaJ9AgsMingLd6ruCxm3iiRwDf+973zl7wghfM9u7d+8N7NCLxyJEjs7e//e2zEYpeCBBYDgEBKADTTRSAqaB5Ag0CHQE4vsDkggsumN1zzz0+3dtwTb0LAomAABSAyf6MWQGYCpon0CDQEYD33Xff7KlPfersvPPOm11zzTWzxz72sbNvfvObs49+9KOz5z73ubOHPexhDffUuyBAYB4BASgA59mTE72OAEwFzRPYAYFXvOIVR5/Xd+ONNx596x0BON7P+Crg8YUf73//+2df//rXZ495zGNmz3jGM2ZvfetbZ2ecccYO3FNvkgCB7QgIQAG4nb3ZOCMAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4CpoHkCBAgQINAsIAAFYLpyAjAVNE+AAAECBJoFBKAATFdOAKaC5gkQIECAQLOAABSA6coJwFTQPAECBAgQaBYQgAIwXTkBmAqaJ0CAAAECzQICUACmKycAU0HzBAgQIECgWUAACsB05QRgKmieAAECBAg0CwhAAZiunABMBc0TIECAAIFmAQEoANOVE4Cp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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 18,
"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": 19,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCdxc0/n4z7sFtRUhUbva+rM29thSOykqROxbkdJqi7aW+vWvqvattlbsOymiqC00KGqNnV9QW0iCWIqGvOv/fM943py5770zc2fm3vvOe5/z+Yy8Zu4995znnLnzvc/aZLSpBFQCKgGVgEpAJaASUAnkSgJNuZqtTlYloBJQCagEVAIqAZWASsAoAOomUAmoBFQCKgGVgEpAJZAzCSgA5mzBdboqAZWASkAloBJQCagEFAB1D6gEVAIqAZWASkAloBLImQQUAHO24DpdlYBKQCWgElAJqARUAgqAugdUAioBlYBKQCWgElAJ5EwCCoA5W3CdrkpAJaASUAmoBFQCKgEFQN0DKgGVgEpAJaASUAmoBHImAQXAnC24TlcloBJQCagEVAIqAZWAAqDuAZWASkAloBJQCagEVAI5k4ACYM4WXKerElAJqARUAioBlYBKQAFQ94BKQCWgElAJqARUAiqBnElAATBnC67TVQmoBFQCKgGVgEpAJaAAqHtAJaASUAmoBFQCKgGVQM4koACYswXX6aoEVAIqAZWASkAloBJQANQ9oBJQCagEVAIqAZWASiBnElAAzNmC63RVAioBlYBKQCWgElAJKADqHlAJqARUAioBlYBKQCWQMwkoAOZswXW6KgGVgEpAJaASUAmoBBQAdQ+oBFQCKgGVgEpAJaASyJkEFABztuA6XZWASkAloBJQCagEVAIKgLoHVAIqAZWASkAloBJQCeRMAgqAOVtwna5KQCWgElAJqARUAioBBUDdAyoBlYBKQCWgElAJqARyJgEFwJwtuE5XJaASUAmoBFQCKgGVgAKg7gGVgEpAJaASUAmoBFQCOZOAAmDOFlynqxJQCagEVAIqAZWASkABUPeASkAloBJQCagEVAIqgZxJQAEwZwuu01UJqARUAioBlYBKQCWgAKh7QCWgElAJqARUAioBlUDOJKAAmLMF1+mqBFQCKgGVgEpAJaASUADUPaASUAmoBFQCKgGVgEogZxJQAMzZgut0VQIqAZWASkAloBJQCSgA6h5QCagEVAIqAZWASkAlkDMJKADmbMF1uioBlYBKQCWgElAJqAQUAHUPqARUAioBlYBKQCWgEsiZBBQAc7bgOl2VgEpAJaASUAmoBFQCCoC6B1QCKgGVgEpAJaASUAnkTAIKgDlbcJ2uSkAloBJQCagEVAIqAQVA3QMqAZWASkAloBJQCagEciYBBcCcLbhOVyWgElAJqARUAioBlYACoO4BlYBKQCWgElAJqARUAjmTgAJgzhZcp6sSUAmoBFQCKgGVgEpAAVD3gEpAJaASUAmoBFQCKoGcSUABMGcLrtNVCagEVAIqAZWASkAloACoe0AloBJQCagEVAIqAZVAziSgAJizBdfpqgRUAioBlYBKQCWgElAArHEP9NhWYxd6ukpAJaASUAmoBFQCKUugybaUL9mvLpfryddjJRQA6yFF7UMloBJQCagEVALpSkABMF15D7irKQAOuCXVCakEVAIqAZVADiSgAJiDRU5yigqASUpX+1YJqARUAioBlUAyElAATEauuelVATA3S60TVQmoBFQCKoEBJAEFwAG0mFlMRQEwC6nrNVUCKgGVgEpAJVCbBBQAa5Nf7s9WAMz9FlABqARUAioBlUADSkABsAEXrT8NWQGwP62GjkUloBJQCagEVAKVSUABsDI56VERElAA1K2hElAJqARUAiqBxpOAAmDjrVm/GrECYL9aDh2MSkAloBJQCagEKpKAAmBFYtKDoiSgAKh7QyWgElAJqARUAo0nAQXAxluzfjViBcB+tRw6GJWASkAloBJQCVQkAQXAisSkB6kGUPeASkAloBJQCagEBo4EFAAHzlpmMhPVAGYidr1oShK46qqrzAEHHGDeeOMNs/zyy6d01ewvc/DBB5vLLrvMHHHEEeass87qM6C//e1v5s0333Sf++355583t912m/nFL35hvv3tb6c+Edaru7vbrZk2lYBKoLQEFAB1h9QkAQXAmsSnJ/dzCQAUBx54oHn99ddzA4Bff/21GTp0qOns7DTzzz+/ef/9901zc3PRSgFYDzzwgHn33XeL3s8amH/wgx+Yrq4u8/DDD/fznaXDUwlkLwEFwOzXoKFHoADY0Mungy8jgaQBsKOjw7S1tfWrdbjhhhvM3nvvbf70pz+Zn//85+bOO+8022+/fUUAeOWVV5of//jHFQEzmjp7/zAtLS11m38SANje3m4GDRpUtzFqRyqB/iIBBcD+shINOg4FwAZdOB12RRKoFACvvfZac+aZZ5opU6aY+eabz2y33Xbm9NNPd5o0acstt5zZeOONzeabb+4+w4Q6fvx4s9NOO5mvvvrKnHDCCeavf/2r07gtscQS5qCDDjLHHnussTdp18VDDz1kABzMr/fdd5+58cYb3fvbbrutueCCC8yCCy7o/p9jODasvf3222bppZcuOXf6mzp1qnn55ZfNkksuaTbaaCNz00039Z6D9g+5MC4Ajrbsssua//f//p8zvfrv8/dbb73lrokW8bjjjnNaxYsvvthd4+mnnzarrLKKm+fEiRMN40N+6667rjnjjDPMyiuvXDRWPv/f//1fc//995tPP/3UyWnHHXc055xzTu+8/euPGDHC/OMf/3B9PPnkk+76TzzxhBv3BhtsYE455RR3LWn777+/02yyDkcddZR59tlnzdixY13/2lQCA00CCoADbUVTno8CYMoC18ulKoFKAHDcuHHmJz/5idljjz3MPvvsY6ZNm+aAZqGFFjKTJ0823/rWt9yYAUA0fgsvvLD57W9/axZbbDEHTsARoPJ///d/5ne/+51ZbbXVzOOPP25OPPFE87Of/cyBEE0AkH5++MMfmh122MEB569//WszZswYc8UVV7jj6Ofzzz/vlRMmUcDmyy+/7AXUKCFOnz7djYdxAFpHHnmk+ctf/mJ4XwAToDv88MMdvN1xxx0Opuaaay4Hi2gN//jHP5qbb77ZwRnt+9//vtNyAoDf+c53zHe/+13zy1/+0sw777zuM84FtrbYYgv3OWB30UUXmaeeesrNBTnRgD9gDUA8/vjjzQorrOBM0MDwNddcY1599VWnuUSzyJowrgUWWMAB5gsvvOCAb9VVV3UQSAP+XnrpJQeEq6++unsPgL3lllvMIossYn71q1+59+eZZ54iSEx1A+rFVAIJSkABMEHh5qFrBcA8rHJ+51gOAIENoAVoQysl7dFHHzWbbLKJOe+88xzE0QC3jz76yGnEFl100d5jgRcADb81tG3STj75ZAeB7733nhk8eHAvAHLs5Zdf3nscMEbAxqxZs0IXiusDhwDkOuusU3Ix0UwCr8DUSiut5LRmgBMQeMghh/SeW8oHMMpnUgAQzWcpkyoynT17thkyZIj5wx/+4AJKaPvuu68LMMEfk8/CWpQJeNddd3WawHfeecdpIGlffPGFA3DOAVgFAK+++mqnZQWytakEBrIEFAAH8uqmMDcFwBSErJfITALlABBQQqt06aWXumARvwF8ABfmRAFAtF8+KPI+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SMvUGMevizEBY37KkFLgFRe6otY7rgm4HrtXAbAeUgzvI8wcm9zVCtYBrhn0IwX+JNqbfwHAtME0yXnntW8FwLyufJ3mrQBYH0F+8sknZpFFFjHrrbeeefnll53zNxorzLenn366WXvttc27775rPvroo94LojEcO3asmT59uhk6dGjoQLhZA48cc/zxx7tjVl99dacJkxt6ELp8MKv07/pIIbyXOOBFD8HjmSsaQPyaaD5s1Qu8giPnmqxhf/cBrMe6KQDWQ4r9GwBFAwgYynrz8BjlV5ucRLTnekpAAbCe0sxhXwqA9Vn0p59+2qy77roOTq6++mozZswY89vf/tbB3yWXXGLOOOMMg//cO++803vBu+66y4wcOdI888wzZtiwYb3vc5PG1BrWll9+efPII49UNOhawEvAyu+D95gD76Xpjwf88QOWZgUDAcC0NKyyoKoBrGhrV3VQFqCblQYwuG8FAOeff34HgOxvLBYAYFIPUVUtkp4USwIKgLHEpQcHJaAAWJ898d5775mlllrK+fg99thjvZ0OHjzYrLjiig5gKtUA3n777e58zDRooK699loHfX//+9+LICjtHxfGJJGEaWoOFADrs0ejeskCjLLwAcxinmEBGUmuZtSDC/cfMf1yDOMCBvkea07AJFck2b4VAJOV74DvXQGwfkuMg/k666wTCoCYbS+77LIiH8BRo0aZO++8s6wP4AUXXGDOP/98g5bRbwqA9Vu7YE9ZagCDEZzJzbLQcxZglBUABtOjJC3btDW65QAQrR8+vLiscL8SM7AGgyS9E5LpXwEwGbnmplcFwPotNUEdt912m7nhhhvMrrvuav73f//XnHzyyeaqq64yW2+9tYsCHj58uAv8eOCBB5yZuJIoYDSA+P+9+OKLfQAwbUduNIA4mos/Xv2kF90TGkCuy49VWi3tIBuZV9oao6wAMAvozOKBKSsADPqu8v0hEIQk0Jh8v/jiC+dXq2bgtO4oyVxHATAZueamVwXA+i71dttt51K8EEGKz9pRRx1lTjzxRHeRCRMmmP33399F9HITHjFihAPBcg1fQfIHTpkypejQLLQomJHQMqQJgMgS30MFwHI7pbrPs4KxtB9e0gbAqIjc6lapsrOi8lcGARD44z4EKPJdVjNwZfLtb0cpAPa3FWmw8SgA9v8F+9e//mV22GEH89Zbb/UB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iEDRCEgAFm3G1F8REAEREAEREAERSEhAAjAhQJ0uAiIgAiIgAiIgAkUjIAFYtBlTf0VABERABERABEQgIQEJwITBg4VCAAACjUlEQVQAdboIiIAIiIAIiIAIFI2ABGDRZkz9FQEREAEREAEREIGEBCQAEwLU6SIgAiIgAiIgAiJQNAISgEWbMfVXBERABERABERABBISkABMCFCni4AIiIAIiIAIiEDRCEgAFm3G1F8REAEREAEREAERSEhAAjAhQJ0uAiIgAiIgAiIgAkUjIAFYtBlTf0VABERABERABEQgIQEJwIQAdboIiIAIiIAIiIAIFI2ABGDRZkz9FQEREAEREAEREIGEBCQAEwLU6SIgAiIgAiIgAiJQNAISgEWbMfVXBERABERABERABBISkABMCFCni4AIiIAIiIAIiEDRCEgAFm3G1F8REAEREAEREAERSEhAAjAhQJ0uAiIgAiIgAiIgAkUjIAFYtBlTf0VABERABERABEQgIQEJwIQAdboIiIAIiIAIiIAIFI2ABGDRZkz9FQEREAEREAEREIGEBCQAEwLU6SIgAiIgAiIgAiJQNAISgEWbMfVXBERABERABERABBISkABMCFCni4AIiIAIiIAIiEDRCEgAFm3G1F8REAEREAEREAERSEhAAjAhQJ0uAiIgAiIgAiIgAkUjIAFYtBlTf0VABERABERABEQgIQEJwIQAdboIiIAIiIAIiIAIFI2ABGDRZkz9FQEREAEREAEREIGEBCQAEwLU6SIgAiIgAiIgAiJQNAISgEWbMfVXBERABERABERABBISkABMCFCni4AIiIAIiIAIiEDRCEgAFm3G1F8REAEREAEREAERSEhAAjAhQJ0uAiIgAiIgAiIgAkUjIAFYtBlTf0VABERABERABEQgIQEJwIQAdboIiIAIiIAIiIAIFI2ABGDRZkz9FQEREAEREAEREIGEBP4fZ/Q85ZXQg78AAAAASUVORK5CYII=\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7f97fbd02208>"
]
},
"execution_count": 19,
"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": 20,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuxdB5hU1dn+drZXeq/SRKoiNuwKqL9gTzSaaPSPRqMxUaOJGmOLaRrzJzGxRbEbo7F3RBQVFEFUEOkdlrKU7XVm/++9dw57d5h+Z7bNe5/nY4eZW855z7nnvveracKNCBABIkAEiAARIAJEIKUQSEup3rKzRIAIEAEiQASIABEgAkICyElABIgAESACRIAIEIEUQ4AEMMUGnN0lAkSACBABIkAEiAAJIOcAESACRIAIEAEiQARSDAESwBQbcHaXCBABIkAEiAARIAIkgJwDRIAIEAEiQASIABFIMQRIAFNswNldIkAEiAARIAJEgAiQAHIOEAEiQASIABEgAkQgxRAgAUyxAWd3iQARIAJEgAgQASJAAsg5QASIABEgAkSACBCBFEOABDDFBpzdJQJEgAgQASJABIgACSDnABEgAkSACBABIkAEUgwBEsAUG3B2lwgQASJABIgAESACJICcA0SACBABIkAEiAARSDEESABTbMDZXSJABIgAESACRIAIkAByDhABIkAEiAARIAJEIMUQIAFMsQFnd4kAESACRIAIEAEiQALIOUAEiAARIAJEgAgQgRRDgAQwxQac3SUCRIAIEAEiQASIAAkg5wARIAJEgAgQASJABFIMARLAFBtwdpcIEAEiQASIABEgAiSAnANEgAgQASJABIgAEUgxBEgAU2zA2V0iQASIABEgAkSACJAAcg4QASJABIgAESACRCDFECABTLEBZ3eJABEgAkSACBABIkACyDlABIgAESACRIAIEIEUQ4AEMMUGnN0lAkSACBABIkAEiAAJIOcAESACRIAIEAEiQARSDAESwBQbcHaXCBABIkAEiAARIAIkgJwDRIAIEAEiQASIABFIMQRIAFNswNldIkAEiAARIAJEgAiQAHIOEAEiQASIABEgAkQgxRAgAUyxAWd3iQARIAJEgAgQASJAAsg5QASIABEgAkSACBCBFEOABDDFBpzdJQJEgAgQASJABIgACSDnABEgAkSACBABIkAEUgwBEsAUG3B2lwgQASJABIgAESACJICcA0SACBABIkAEiAARSDEESABTbMDZXSJABIgAESACRIAIkAByDhABIkAEiAARIAJEIMUQIAFMsQFnd4kAESACRIAIEAEiQALIOUAEiAARIAJEgAgQgRRDgAQwxQac3SUCRIAIEAEiQASIAAkg5wARIAJEgAgQASJABFIMARLAFBtwdpcIEAEiQASIABEgAiSAnANEgAgQASJABIgAEUgxBEgAU2zA2V0iQASIABEgAkSACJAAcg4QASJABIgAESACRCDFECABTLEBZ3eJABEgAkSACBABIkACyDlABIgAESACRIAIEIEUQ4AEMMUGnN0lAkSACBABIkAEiAAJIOcAESACRIAIEAEiQARSDAESwBQbcHaXCBABIkAEiAARIAIkgJwDRIAIEAEiQASIABFIMQRIAFNswNldIkAEiAARIAJEgAiQAHIOEAEiQASIABEgAkQgxRAgAUyxAWd3iQARIAJEgAgQASJAAsg5QASIABEgAkSACBCBFEOABDDFBpzdJQJEgAgQASJABIgACSDnABEgAkSACBABIkAEUgwBEsAUG3B2lwgQASJABIgAESACJICcA0SACBABIkAEiAARSDEESABTbMDZXSJABIgAESACRIAIkAByDhABIkAEiAARIAJEIMUQIAFMsQFnd4kAESACRIAIEAEiQALIOUAEiAARIAJEgAgQgRRDgAQwxQac3SUCRIAIEAEiQASIAAkg5wARIAJEgAgQASJABFIMARLAFBtwdpcIEAEiQASIABEgAiSAnANEgAgQASJABIgAEUgxBEgAU2zA2V0iQASIABEgAkSACJAAcg4QASJABIgAESACRCDFECABTLEBZ3eJABEgAkSACBABIkACyDlABIgAESACRIAIEIEUQ4AEMMUGnN0lAkSACBABIkAEiAAJIOcAESACRIAIEAEiQARSDAESwBQbcHaXCBABIkAEiAARIAIkgJwDRIAIEAEiQASIABFIMQRIAFNswNldIkAEiAARIAJEgAiQAHIOEAEiQASIABEgAkQgxRAgAUyxAWd3iQARIAJEgAgQASJAAsg5QASIABEgAkSACBCBFEOABDDFBpzdJQJEgAgQASJABIgACSDnABEgAkSACBABIkAEUgwBEsAUG3B2lwgQASJABIgAESACJICcA0SACBABIkAEiAARSDEESABTbMDZXSJABIgAESACRIAIkAByDhABIkAEiAARIAJEIMUQIAFMsQFnd4kAESACRIAIEAEiQALIOUAEiAARIAJEgAgQgRRDgAQwxQac3SUCRIAIEAEi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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7f97fbc609e8>"
]
},
"execution_count": 20,
"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": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['seaborn-colorblind',\n",
" 'seaborn-dark',\n",
" 'seaborn-ticks',\n",
" 'seaborn-pastel',\n",
" 'ggplot',\n",
" 'seaborn-talk',\n",
" 'fivethirtyeight',\n",
" 'bmh',\n",
" 'seaborn-whitegrid',\n",
" 'seaborn-muted',\n",
" 'seaborn-deep',\n",
" 'dark_background',\n",
" 'seaborn-notebook',\n",
" 'seaborn-white',\n",
" 'seaborn-bright',\n",
" 'seaborn-paper',\n",
" 'seaborn-poster',\n",
" 'grayscale',\n",
" 'seaborn-darkgrid',\n",
" 'seaborn-dark-palette']"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import matplotlib.style as ms\n",
"ms.available"
]
},
{
"cell_type": "code",
"execution_count": 23,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hU1daGv2kpkwSQIiIIiPSa0EIJ0nvovYWmXDoooAIiXEQUKSJNRQQJRXroEHqHQCD0LoIUQQEFMunl32f4c0UMpEw75Tv3yYN3cvbea71rz+SbffZeSwdeJEACJEACJEACJEACmiKg05S3dJYESIAESIAESIAESAAUgJwEJEACJEACJEACJKAxAhSAGgs43SUBEiABEiABEiABCkDOARIgARIgARIgARLQGAEKQI0FnO6SAAmQAAmQAAmQAAUg5wAJkAAJkAAJkAAJaIwABaDGAk53SYAESIAESIAESIACkHOABEiABEiABEiABDRGgAJQYwGnuyRAAiRAAiRAAiRAAcg5QAIkQAIkQAIkQAIaI0ABqLGA010SIAESIAESIAESoADkHCABEiABEiABEiABjRGgANRYwOkuCZAACZAACZAACVAAcg6QAAmQAAmQAAmQgMYIUABqLOB0lwRIgARIgARIgAQoADkHSIAESIAESIAESEBjBCgANRZwuksCJEACJEACJEACFICcAyRAAiRAAiRAAiSgMQIUgBoLON0lARIgARIgARIgAQpAzgESIAESIAESIAES0BgBCkCNBZzukgAJkAAJkAAJkAAFIOcACZAACZAACZAACWiMAAWgxgJOd0mABEiABEiABEiAApBzgARIgARIgARIgAQ0RoACUGMBp7skQAIkQAIkQAIkQAHIOUACJEACJEACJEACGiNAAaixgNNdEiABEiABEiABEqAA5BwgARIgARIgARIgAY0RoADUWMDpLgmQAAmQAAmQAAlQAHIOkAAJkAAJkAAJkIDGCFAAaizgdJcESIAESIAESIAEKAA5B0iABEiABEiABEhAYwQoADUWcLpLAiRAAiRAAiRAAhSAnAMkQAIkQAIkQAIkoDECFIAaCzjdJQESIAESIAESIAEKQM4BEiABEiABEiABEtAYAQpAjQWc7pIACZAACZAACZAABSDnAAmQAAmQAAmQAAlojAAFoMYCTndJgARIgARIgARIgAKQc4AESIAESIAESIAENEaAAlBjAae7JEACJEACJEACJEAByDlAAiRAAiRAAiRAAhojoHoBWLRo0Q4ipgPETznx43358mWT+DfpRXEuWLBgNnd399nJyclN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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('seaborn-dark'):\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": 24,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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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dbX8zvttWBZyaphDtKRNGs9R7HtbbCGtsELYVTpsKz2nzUGiQAACEIBAtRBAABFAby4igF6CueJHjpS2D0sy1p3ha+P6XnpJmnvuUlyxuOfs21e6+uronPZ6+u67I4mlQAACEIBAVRBAABFAbyIigF6C9eOHDZN2312ydf7qFxtvd/PN1f1adfDg6JV13bLWWmEBorACkU0aoUAAAhCAQMUJIIAIoDcJEUAvwbrxo0dHr02nTct9VlvY2V4FL7poMa9avHM980z06jdX+61fTz4ZNg60nQMpEIAABCBQSQIIIALozT8E0EuwfnxDa/utv750773VK3/Wj4ceip5e/vFHbio77CDdd1+xiXE+CEAAAhDIkwACiADmmTJZhyOAXoK54s89VzrhhNrv7Lpr9Oq3detSXK2453zzTWmbbSSbKFK32BhGewK4yCLFvR5ngwAEIACBvAkggAhg3klTLwAB9BJsKH7gQOm006T+/aOlV7wLOpeqnbnOOyZsMGPL0nz6afRd5K+c9LkWBCAAgUYJIIAIYKNJ0sgBCKCXYEPxtgD0Y49FIlXMRZ1L1d7657UngDYe0Nr+1FNMACkXd64DAQhAoAkEEEAEsAlpMttDEMBCCb73nvS3v0nt2hV6huqP++GHqI3M/q3+e0ULIQCBVBFAABFAb8IjgIUQ/Oorab31pJYtpbBfcNUs8FxIX7wxI0ZIm2wSz6ec3r4TDwEIQKBCBBBABNCbeghgvgR//13acEPp7bejyIUWimbPmhCmqcyYEU10sf2FbdLLccelqff0FQIQgEBFCSCACKA3ARHAfAia9Oy8c/ZSKLZn7p13Sj165HO2+B5rewrvs4/03/9GfbBxgrY8jO1+QoEABCAAgZITQAARQG+SIYD5EDzlFOmMM3JHdO8e7ZYRxwkf+TCwcYEmeratXd3Stq308svSSivlczaOhQAEIACBAggggAhgAWmTEYIANpXgs89GY91ylZVXlp5/XppvvqaeLb7H2ZhHWyfQnobWL8stJ736ajo4xPcO0nIIQCABBBBABNCbxghgUwlOny6dfLJ0zjmZETYT2KTn739v6pnif9zFF0tHH527H716SbfdFv8+0gMIQAACVUwAAUQAvemJAOZL0LZz23df6bffpDnnjHbH2GijfM8S7+NtjcODD5aGDMnsh+0XfPfdvAaO992l9RCA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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": 26,
"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": 27,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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": 27,
"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": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import cycler as cr"
]
},
{
"cell_type": "code",
"execution_count": 29,
"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": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cr.cycler('color', 'rgb')+ cr.cycler('lw', range(1, 4))"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<table><th>'color'</th><th>'ls'</th><th>'lw'</th><tr><td>'r'</td><td>'-'</td><td>0</td></tr><tr><td>'r'</td><td>'--'</td><td>0</td></tr><tr><td>'g'</td><td>'-'</td><td>1</td></tr><tr><td>'g'</td><td>'--'</td><td>1</td></tr><tr><td>'b'</td><td>'-'</td><td>2</td></tr><tr><td>'b'</td><td>'--'</td><td>2</td></tr></table>"
],
"text/plain": [
"((cycler('color', ['r', 'g', 'b']) + cycler('lw', [0, 1, 2])) * cycler('ls', ['-', '--']))"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(cr.cycler('color','rgb') + cr.cycler('lw', range(3))) * cr.cycler('ls', ['-', '--'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Label Data aware (?)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"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",
" // 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.send_message('closing', {});\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMgCAYAAADbcAZoAAAgAElEQVR4XuxdCdwWU/s+ikpZk6TdUsouxIdClmwh24ck+xYisuSjLJWlbBXFP0IR4rNUhIjSYkm0iLQQKn2ULUL5n+v0zuvpeZ9lZp6Ze87MXOf3u3/v8sycOec613Pm3Ofcy3qKhQgQASJABIgAESACRIAIEAEiIITAekLP4WOIABEgAkSACBABIkAEiAARIAKKCghJQASIABEgAkSACBABIkAEiIAYAlRAxKDmg4gAESACRIAIEAEiQASIABGgAkIOEAEiQASIABEgAkSACBABIiCGABUQMaj5ICJABIgAESACRIAIEAEiQASogJADRIAIEAEiQASIABEgAkSACIghQAVEDGo+iAgQASJABIgAESACRIAIEAEqIOQAESACRIAIEAEiQASIABEgAmIIUAERg5oPIgJEgAgQASJABIgAESACRIAKCDlABIgAESACRIAIEAEiQASIgBgCVEDEoOaDiAARIAJEgAgQASJABIgAEaACQg4QASJABIgAESACRIAIEAEiIIYAFRAxqPkgIkAEiAARIAJEgAgQASJABKiAkANEgAgQASJABIgAESACRIAIiCFABUQMaj6ICBABIkAEiAARIAJEgAgQASog5AARIAJEgAgQASJABIgAESACYghQARGDmg8iAkSACBABIkAEiAARIAJEgAoIOUAEiAARIAJEgAgQASJABIiAGAJUQMSg5oOIABEgAkSACBABIkAEiAARoAJCDhABIkAEiAARIAJEgAgQASIghgAVEDGo+SAiQASIABEgAkSACBABIkAEqICQA0SACBABIkAEiAARIAJEgAiIIUAFRAxqPogIEAEiQASIABEgAkSACBABKiDkABEgAkSACBABIkAEiAARIAJiCFABEYOaDyICRIAIEAEiQASIABEgAkSACgg5QASIABEgAkSACBABIkAEiIAYAlRAxKDmg4gAESACRIAIEAEiQASIABGgAkIOEAEiQASIABEgAkSACBABIiCGABUQMaj5ICJABIgAESACRIAIEAEiQASogJADRIAIEAEiQASIABEgAkSACIghQAVEDGo+iAgQASJABIgAESACRIAIEAEqIOQAESACRIAIEAEiQASIABEgAmIIUAERg5oPIgJEgAgQASJABIgAESACRIAKCDlABIgAESACRIAIEAEiQASIgBgCVEDEoOaDiAARIAJEgAgQASJABIgAEaACQg4QASJABIgAESACRIAIEAEiIIYAFRAxqPkgIkAEiAARIAJEgAgQASJABKiAkANEgAgQASJABIgAESACRIAIiCFABUQMaj6ICBABIkAEiAARIAJEgAgQASog5AARIAJEgAgQASJABIgAESACYghQARGDmg8iAkSACBABIkAEiAARIAJEgAoIOUAEiAARIAJEgAgQASJABIiAGAJUQMSg5oOIABEgAkSACBABIkAEiAARoAJCDhABIkAEiAARIAJEgAgQASIghgAVEDGo+SAiQASIABEgAkSACBABIkAEqICQA0SACBABIkAEiAARIAJEgAiIIUAFRAxqPogIEAEiQASIABEgAkSACBABKiDkABEgAkSACBABIkAEiAARIAJiCFABEYOaDyICRIAIEAEiQASIABEgAkSACgg5QASIABEgAkSACBABIkAEiIAYAlRAxKDmg4gAESACRIAIEAEiQASIABGgAkIOEAEiQASIABEgAkSACBABIiCGABUQMaj5ICJABIgAESACRIAIEAEiQASogJADRIAIEAEiQASIABEgAkSACIghQAVEDGo+iAgQASJABIgAESACRIAIEAEqIOQAESACRIAIEAEiQASIABEgAmIIUAERg5oPIgJEgAgQASJABIgAESACRIAKCDlABIgAESACRIAIEAEiQASIgBgCVEDEoOaDiAARIAJEgAgQASJABIgAEaACQg4QASJABIgAESACRIAIEAEiIIYAFRAxqPkgIkAEiAARIAJEgAgQASJABKiAkANEgAgQgXghUEc390oth2nZVssfWj7RcrOWCfHqCltrGQI9dHtu0lLZsnaxOclFwC/nKmlIrtZylJbmWjbUMlfLQC2Pavk7uZAlo2dUQJIxjuwFESAC6UHgaN3V/mUv2cn65wZaLil7EbfTP8ekBwr2NGAE6ur66mt5L+B6WR0RyIeAX87V0BV+o+UJLa9r+blsDuyqf/bVci0htxsBKiB2jw9bRwSIABHIRmAT/Y9ftazO+AA71rO0LNFyECEjAkSACCQcAZyAYC5ckdXPIfrv07RsrmVVwjGIdfeogMR6+AJr/G66pp5aWmmpruUrLTjCvCPjCTD5uFDLNlq+1/Kclu5asOvglC5l1zTWP3/X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ro4F51hMjTqtFZsldkcbns63vGPxNZ673EXsD2LYmhbvBUFnkee4QBKnvSl+jHz+c7EPiP1goEC8g+EqsQ8OMMPFIDopPBda5shaB9zl+KYY1sUMEcP6k9vFqliEfoKUg+eUW1povVvlMPkMGqmTRdN1mNX/0FhdGkTZWetRlw59ahDtt6LDJveFTdehFQ3CD9RhtmuDWPvDMtc0QeRlABKEm1hJEiABEiABEiABEiABEoiDAAOQOPzIVpAACZAACZAACZAACZBAEAQYgAThJlaSBEiABEiABEiABEiABOIgwAAkDj+yFSRAAiRAAiRAAiRAAiQQBAEGIEG4iZUkARIgARIgARIgARIggTgIMACJw49sBQmQAAmQAAmQAAmQAAkEQYABSBBuYiVJgARIgARIgARIgARIIA4CDEDi8CNbQQIkQAIkQAIkQAIkQAJBEGAAEoSbWEkSIAESIAESIAESIAESiIMAA5A4/MhWkAAJkAAJkAAJkAAJkEAQBBiABOEmVpIESIAESIAESIAESIAE4iDAACQOP7IVJEACJEACJEACJEACJBAEAQYgQbiJlSQBEiABEiABEiABEiCBOAgwAInDj2wFCZAACZAACZAACZAACQRBgAFIEG5iJUmABEiABEiABEiABEggDgIMQOLwI1tBAiRAAiRAAiRAAiRAAkEQYAAShJtYSRIgARIgARIgARIgARKIgwADkDj8yFaQAAmQAAmQAAmQAAmQQBAEGIAE4SZWkgRIgARIgARIgARIgATiIMAAJA4/shUkQAIkQAIkQAIkQAIkEAQBBiBBuImVJAESIAESIAESIAESIIE4CDAAicOPbAUJkAAJkAAJkAAJkAAJBEGAAUgQbmIlSYAESIAESIAESIAESCAOAgxA4vAjW0ECJEACJEACJEACJEACQRBgABKEm1hJEiABEiABEiABEiABEoiDAAOQOPzIVpAACZAACZAACZAACZBAEAQYgAThJlaSBEiABEiABEiABEiABOIgwAAkDj+yFSRAAiRAAiRAAiRAAiQQBAEGIEG4iZUkARIgARIgARIgARIggTgIMACJw49sBQmQAAmQAAmQAAmQAAkEQYABSBBuYiVJgARIgARIgARIgARIIA4CDEDi8CNbQQIkQAIkQAIkQAIkQAJBEGAAEoSbWEkSIAESIAESIAESIAESiIMAA5A4/MhWkAAJkAAJkAAJkAAJkEAQBBiABOEmVpIESIAESIAESIAESIAE4iDAACQOP7IVJEACJEACJEACJEACJBAEAQYgQbiJlSQBEiABEiABEiABEiCBOAgwAInDj2wFCZAACZAACZAACZAACQRBgAFIEG5iJUmABEiABEiABEiABEggDgIMQOLwI1tBAiRAAiRAAiRAAiRAAkEQYAAShJtYSRIgARIgARIgATtdP3sAAAI8SURBVBIgARKIgwADkDj8yFaQAAmQAAmQAAmQAAmQQBAEGIAE4SZWkgRIgARIgARIgARIgATiIMAAJA4/shUkQAIkQAIkQAIkQAIkEAQBBiBBuImVJAESIAESIAESIAESIIE4CDAAicOPbAUJkAAJkAAJkAAJkAAJBEGAAUgQbmIlSYAESIAESIAESIAESCAOAgxA4vAjW0ECJEACJEACJEACJEACQRBgABKEm1hJEiABEiABEiABEiABEoiDAAOQOPzIVpAACZAACZAACZAACZBAEAQYgAThJlaSBEiABEiABEiABEiABOIgwAAkDj+yFSRAAiRAAiRAAiRAAiQQBAEGIEG4iZUkARIgARIgARIgARIggTgIMACJw49sBQmQAAmQAAmQAAmQAAkEQYABSBBuYiVJgARIgARIgARIgARIIA4CDEDi8CNbQQIkQAIkQAIkQAIkQAJBEGAAEoSbWEkSIAESIAESIAESIAESiIMAA5A4/MhWkAAJkAAJkAAJkAAJkEAQBBiABOEmVpIESIAESIAESIAESIAE4iDAACQOP7IVJEACJEACJEACJEACJBAEAQYgQbiJlSQBEiABEiABEiABEiCBOAgwAInDj2wFCZAACZAACZAACZAACQRBgAFIEG5iJUmABEiABEiABEiABEggDgIMQOLwI1tBAiRAAiRAAiRAAiRAAkEQYAAShJtYSRIgARIgARIgARIgARKIgwADkDj8yFaQAAmQAAmQAAmQAAmQQBAE/j9CqiQWZFyu5wAAAABJRU5ErkJggg==\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import cycler as cy\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"def simple_plot(ax, x, y, **kwargs):\n",
" return ax.plot(x, y, **kwargs)\n",
"\n",
"th = np.linspace(0, 2*np.pi, 128)\n",
"df = pd.DataFrame({'sin': np.sin(th), 'cos': np.cos(th),\n",
" 'sin2': .5 * np.sin(2 * th), 'cos2': .5 * np.cos(2 * th)})\n",
"\n",
"def easy_facet(df, cycle1, cycle2):\n",
" cycleX = (cy.cycler('x', df.keys()) + cycle1)\n",
" cycleY = (cy.cycler('y', df.keys()) + cycle2) \n",
" kw_cycle = cycleX * cycleY\n",
"\n",
" fig, axes = plt.subplots(len(df.keys()), len(df.keys()), sharex=True, sharey=True,\n",
" figsize=(10, 10))\n",
" lines = []\n",
" axes[0, 0].set_xlim([-1, 1])\n",
" axes[0, 0].set_ylim([-1, 1])\n",
" for ax, kwargs in zip(axes.ravel(), kw_cycle):\n",
" \n",
" ln, = simple_plot(ax, markevery=5, data=df, **kwargs)\n",
" ax.set_title('{x} vs {y}'.format(**kwargs))\n",
" lines.append(ln)\n",
" \n",
" return lines\n",
"\n",
"\n",
"arts = easy_facet(df, cy.cycler('linestyle', ['-', '--', ':', '']), cy.cycler('marker', 'xos*'))"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for ln in arts:\n",
" ln.set_color('k')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Draft of next release notes\n",
"\n",
" - *at the repl the OO interface lazily auto-redraws*\n",
" - *better spelling for plotting labeled data*\n",
" - convenience decorators\n",
" - artists can add z-data to gui on hover (pixel value in imshow) [pending performance fixes]\n",
" - auto-wrapping of long text\n",
" - cycler\n",
" - new tool-bar machinery (GTK only)\n",
" - legend support for more collections\n",
" - per-artist usetex control\n",
" - unified line style across Line, Patch, and Collection\n",
" - add page notes in multi-page pdfs\n",
" - text labels for ticks as input to `bar`\n",
" - support both wxpython classic and wxpython phoenix (python 3 support)\n",
" - Added 'logit' axis scale\n",
" - Major improvements to table\n",
" - bucket of rcparams\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Target work for next-feature release (2.1)\n",
"\n",
" - nbagg + widget integration (jupyter notebook, Steven Silvester)\n",
" - better containers classes \n",
" - serialization & traitlets (Brian Granger / Ryan Morshead)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Soap box\n",
"\n",
" - Write functions which take explicit axes, data, style is input and return artists\n",
" - Composable foundation for building higher level functions\n",
" - Eases writing interactive graphs"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def my_plotter(ax, data, style):\n",
" # call other functions that generate artists\n",
" return arts"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def pandas_plot(ax, df, style_cycle, **kwargs):\n",
" \"\"\"\n",
" Plot a pandas DataFrame\n",
"\n",
" Parameters\n",
" ----------\n",
" ax : matplotlib.axes.Axes\n",
" The axes to plot to\n",
"\n",
" df : pd.DataFrame\n",
" The data to plot\n",
"\n",
" style_cycle : Cycler\n",
" Something that when iterated over yields style dict\n",
"\n",
" Returns\n",
" -------\n",
" ret : dict\n",
" Dictionary of line2d artists added \n",
" \"\"\"\n",
" ret = {}\n",
" x = df.index\n",
" for n, sty in zip(df.columns, style_cycle):\n",
" sty.update(kwargs)\n",
" ln, = ax.plot(x, df[n], label=n, **sty)\n",
" ret[n] = ln\n",
" ax.legend()\n",
" return ret\n"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
":0: FutureWarning: IPython widgets are experimental and may change in the future.\n"
]
}
],
"source": [
"from IPython.html.widgets import *\n",
"from IPython.display import display\n",
"\n",
"def widget_function_factory(arts):\n",
" \"\"\"\n",
" Generate fulnction + args to pass to interactive\n",
" Parameters\n",
" ----------\n",
" arts : dict\n",
" dictionary of Line2D\n",
" \n",
" \"\"\"\n",
" \n",
" name = Dropdown(options=list(arts.keys()))\n",
" \n",
" def set_all(_, old_line, new_line):\n",
" ln = arts[new_line]\n",
" lw.value = ln.get_lw()\n",
" alph.value = ln.get_alpha() or 1\n",
" visible.value = ln.get_visible()\n",
" markevery.value = ln.get_markevery()\n",
" marker.value = ln.get_marker()\n",
" \n",
" def set_lw(_, old_lw, new_lw):\n",
" ln = arts[name.value]\n",
" arts[name.value].set_lw(new_lw)\n",
" arts[name.value].axes.legend()\n",
" \n",
" def set_alpha(_, old_value, new_value):\n",
" ln = arts[name.value]\n",
" ln.set_alpha(new_value)\n",
" ln.axes.legend()\n",
" \n",
" def set_visible(_, old_value, new_value):\n",
" ln = arts[name.value]\n",
" ln.set_visible(new_value)\n",
" ln.axes.legend()\n",
" \n",
" def set_markevery(_, old_value, new_value):\n",
" ln = arts[name.value]\n",
" ln.set_markevery(new_value)\n",
" \n",
" def set_marker(_, old_value, new_value):\n",
" ln = arts[name.value]\n",
" ln.set_marker(new_value)\n",
" ln.axes.legend()\n",
" \n",
" lw = FloatSlider(min=1, max=5, description='lw: ')\n",
" alph = FloatSlider(min=0, max=1, description='alpha: ')\n",
" visible = Checkbox(description='visible: ')\n",
" markevery = IntSlider(min=1, max=15, description='markevery: ')\n",
" marker = Dropdown(options={v:k for k, v in matplotlib.markers.MarkerStyle.markers.items()},\n",
" description='marker: ')\n",
" \n",
" name.on_trait_change(set_all, 'value')\n",
" lw.on_trait_change(set_lw, 'value')\n",
" alph.on_trait_change(set_alpha, 'value')\n",
" visible.on_trait_change(set_visible, 'value')\n",
" markevery.on_trait_change(set_markevery, 'value')\n",
" marker.on_trait_change(set_marker, 'value')\n",
" display(name, lw, alph, marker, markevery, visible)\n",
" set_all(None, None, name.value)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"th = np.linspace(0, 2*np.pi, 128)\n",
"df = pd.DataFrame({'sin': np.sin(th),\n",
" 'shift +': np.sin(th + np.pi / 3), \n",
" 'shift -': np.sin(th - np.pi / 3)}, index=th)"
]
},
{
"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",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment