Skip to content

Instantly share code, notes, and snippets.

@startakovsky
Created June 24, 2015 04:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save startakovsky/296d20fff02662abd441 to your computer and use it in GitHub Desktop.
Save startakovsky/296d20fff02662abd441 to your computer and use it in GitHub Desktop.
richie's rolling average question
{
"metadata": {
"name": "",
"signature": "sha256:d2c68b4373fca3af6f3e771c8cdbccc2c8dd3c0fd7e82dd401199d6e0fa16c86"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from __future__ import division\n",
"import numpy as np\n",
"import pandas as pd\n",
"n_iter = 20\n",
"L = [10,20,300,40]\n",
"n_back = len(L)\n",
"initial_average = sum(L)/n_back\n",
"for i in range(n_iter):\n",
" L.append(1./n_back*np.array(L[i:i+4]).sum())\n",
"L = np.array(L)\n",
"df = pd.DataFrame(np.array(L))\n",
"print initial_average\n",
"df.plot()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"92.5\n"
]
},
{
"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 \u2265 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.focus_on_mousover = false;\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this.root.attr('style', 'display: inline-block');\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",
" fig.waiting = false;\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",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
" canvas_div.resizable({ resize: mpl.debounce_resize(\n",
" function(event, ui) { fig.request_resize(ui.size.width, ui.size.height); }\n",
" , 50)});\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both;');\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;\")\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\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",
" function mouse_event_fn(event) {\n",
" return fig.mouse_event(event, event['data']);\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",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keydown('key_release', canvas_keyboard_event);\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",
"\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",
"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",
" 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",
" 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",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (this.focus_on_mouseover && name === 'motion_notify')\n",
" {\n",
" this.canvas.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",
"\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 = function(event, name) {\n",
" /* Don't fire events just when a modifier is changed. Modifiers are\n",
" sent along with other keys. */\n",
" if (event.keyCode >= 16 && event.keyCode <= 20) {\n",
" return;\n",
" }\n",
"\n",
" value = '';\n",
" if (event.ctrlKey) {\n",
" value += \"ctrl+\";\n",
" }\n",
" if (event.altKey) {\n",
" value += \"alt+\";\n",
" }\n",
" value += String.fromCharCode(event.keyCode).toLowerCase();\n",
"\n",
" this.send_message(name, {key: value});\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" var format_dropdown = this.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" this.ondownload(this, format);\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",
"\n",
"mpl.debounce_event = function(func, time){\n",
" var timer;\n",
" return function(event){\n",
" clearTimeout(timer);\n",
" timer = setTimeout(function(){ func(event); }, time);\n",
" };\n",
"}\n",
"\n",
"mpl.debounce_resize = function(func, time){\n",
" var timer;\n",
" return function(event, ui){\n",
" clearTimeout(timer);\n",
" timer = setTimeout(function(){ func(event, ui); }, time);\n",
" };\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\"], [\"\", \"\", \"\", \"\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overriden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" function() { },\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",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
" // Disable right mouse context menu.\n",
" $(fig.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\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",
"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 (cell.output_area.outputs[j]['text/html'] == html_output) {\n",
" var output = cell.output_area.outputs[j];\n",
" return [cell, output, 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"
],
"metadata": {},
"output_type": "display_data",
"text": [
"<IPython.core.display.Javascript at 0x7f65fc69be50>"
]
},
{
"html": [
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB5gVRdaGX4wYEMyYI4oRI2IGA5hRDJiz4ppQDDj8mJFhDAisaYyoa0BdFDOiYHaMCGtAzJERE6DoiAr/c+g7chlnuKG6+3bd/up52FXoqj71flXDZ1XXqWaoiIAIiIAIiIAIiIAIpIpAs1T1Vp0VAREQAREQAREQARFABlCDQAREQAREQAREQARSRkAGMGWCq7siIAIiIAIiIAIiIAOoMSACIiACIiACIiACKSMgA5gywdVdERABERABERABEZAB1BgQAREQAREQAREQgZQRkAFMmeDqrgiIgAiIgAiIgAjIAGoMiIAIiIAIiIAIiEDKCMgApkxwdVcEREAEREAEREAEZAA1BkRABERABERABEQgZQRkAFMmuLorAiIgAiIgAiIgAjKAGgMiIAIiIAIiIAIikDICMoApE1zdFQEREAEREAEREAEZQI0BERABERABERABEUgZARnAlAmu7oqACIiACIiACIiADKDGgAiIgAiIgAiIgAikjIAMYMoEV3dFQAREQAREQAREQAZQY0AEREAEREAEREAEUkZABjBlgqu7IiACIiACIiACIiADqDEgAiIgAiIgAiIgAikjIAOYMsHVXREQAREQAREQARGQAdQYEAEREAEREAEREIGUEZABTJng6q4IiIAIiIAIiIAIyABqDIiACIiACIiACIhAygjIAKZMcHVXBERABERABERABGQANQZEQAREQAREQAREIGUEZABTJri6KwIiIAIiIAIiIAIygBoDIiACIiACIiACIpAyAjKAKRNc3RUBERABERABERABGUCNAREQAREQAREQARFIGQEZwJQJru6KgAiIgAiIgAiIgAygxoAIiIAIiIAIiIAIpIyADGDKBFd3RUAEREAEREAEREAGUGNABERABERABERABFJGQAYwZYKruyIgAiIgAiIgAiIgA6gxIAIiIAIiIAIiIAIpIyADmDLB1V0REAEREAEREAERkAHUGBABERABERABERCBlBGQAUyZ4OquCIiACIiACIiACMgAagyIgAiIgAiIgAiIQMoIyACmTHB1VwREQAREQAREQATK0QCeBxwFrAr8BrwEnA18mJF7HaAa2Ar4FrgEuK3BULA2TgdaAk8DJ2ae1YgRAREQAREQAREQ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802p98YbsPPOYOaxlKeZe/XqxcCBA5OCUnHkICC9/Bki0sofrSzStOslAygD6DpjIzeA558fHABJ2rbpYouBmbr11ssPYZ8+QeqXu+7K7/monkr7f/VGxTWqdqVXVGTDb1dahc80yhbTrpcMoAyg6/yK3ACefjostFDwHWCSit3kYauS22yTOyrb/m3bFiyB9P77535eT4iACIiACIhAlARkAGUAXcdX5AbwyCODK+D69nUNNdz6G24Il18Oe+yRu9133w3uMf7uO7CVQxUREAEREAERKCUBGUAZQNfxF7kB7NoVdtkFTjvNNdRw62+/PZx0Ehx2WO52L70Uxo6F4cNzPxv1E2nPfRU137Dbl15hE42uPWkVHdsoWk67XjKAMoCu8ypyA7jjjnDccWArgUkqe+8Nu+0Gp5ySO6pNN4WzzoLDD8/9bNRPpD37fdR8w25feoVNNLr2pFV0bKNoOe16yQDKALrOq8gNoOXbu+SS4DaQJJV8t6Y/+ST4/s9O/7ZqlaQeKBYREAEREIG0EpABlAF0HfuRG8A11oChQ8FWApNU7HDKgguCpamZV7E/t9tM7Po4FREQAREQARFIAgEZQBlA13EYuQFcckl49llo18411HDrX3ghfPUV3HLLvNvddls46ig48cRw319sa7W1tbTON3lhsS9RvdAISK/QUEbekLSKHHGoL0i7XjKAMoCuEypSAzhzZrDK9vHHsPrqrqGGW3/QILC7fed1sMMSRa+yCnz9dXBzSBJKRUUFlZWVSQhFMeRBQHrlASkhj0irhAiRZxhp10sGUAYwz6nS5GORGsBp06BlS/jxR7CVwCQV25a+4w4YPbrpqK67Du69NzCKKiIgAiIgAiKQFAIygDKArmMxUgP45Zew6qrw558w//yuoYZbf8QIuOiiIL1LU8XS19hp4Z49w323WhMBERABERABFwIygDKALuPH6kZqAN95J7hpw1YCk1aeew6OPho+/bTxyH74Ibgn2LavzcSqiIAIiIAIiEBSCMgAygC6jsVIDeCLL8Khh8IXX7iGGX798eNhhx1gypTG27Yt4muvhddfD//dLi1WV1fTo0cPlyZUN0YC0itG2I6vklaOAGOunna9ZABlAF2nXKQG8LHH4Lzz4H//cw0z/PpmSldbrentactbuPXWUFER/rtdWqypqaFDhw4uTahujASkV4yw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\">"
],
"metadata": {},
"output_type": "display_data",
"text": [
"<IPython.core.display.HTML at 0x7f65fc716b50>"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 46,
"text": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f65efcec390>"
]
}
],
"prompt_number": 46
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment