%PDF- %PDF-
Direktori : /lib/python3/dist-packages/matplotlib/tests/ |
Current File : //lib/python3/dist-packages/matplotlib/tests/test_nbagg_01.ipynb |
{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib notebook\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('<div/>');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", " 'ui-helper-clearfix\"/>');\n", " var titletext = $(\n", " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", " 'text-align: center; padding: 3px;\"/>');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('<div/>');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('<canvas/>');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('<canvas/>');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('<button/>');\n", " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", " 'ui-button-icon-only');\n", " button.attr('role', 'button');\n", " button.attr('aria-disabled', 'false');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", "\n", " var icon_img = $('<span/>');\n", " icon_img.addClass('ui-button-icon-primary ui-icon');\n", " icon_img.addClass(image);\n", " icon_img.addClass('ui-corner-all');\n", "\n", " var tooltip_span = $('<span/>');\n", " tooltip_span.addClass('ui-button-text');\n", " tooltip_span.html(tooltip);\n", "\n", " button.append(icon_img);\n", " button.append(tooltip_span);\n", "\n", " nav_element.append(button);\n", " }\n", "\n", " var fmt_picker_span = $('<span/>');\n", "\n", " var fmt_picker = $('<select/>');\n", " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", " fmt_picker_span.append(fmt_picker);\n", " nav_element.append(fmt_picker_span);\n", " this.format_dropdown = fmt_picker[0];\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = $(\n", " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", " fmt_picker.append(option)\n", " }\n", "\n", " // Add hover states to the ui-buttons\n", " $( \".ui-button\" ).hover(\n", " function() { $(this).addClass(\"ui-state-hover\");},\n", " function() { $(this).removeClass(\"ui-state-hover\");}\n", " );\n", "\n", " var status_bar = $('<span class=\"mpl-message\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "}\n", "\n", "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", "}\n", "\n", "mpl.figure.prototype.send_message = function(type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "}\n", "\n", "mpl.figure.prototype.send_draw_message = function() {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", " }\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1]);\n", " fig.send_message(\"refresh\", {});\n", " };\n", "}\n", "\n", "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0, 0, fig.canvas.width, fig.canvas.height);\n", "\n", " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", "}\n", "\n", "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", " // Updates the figure title.\n", " fig.header.textContent = msg['label'];\n", "}\n", "\n", "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", " var cursor = msg['cursor'];\n", " switch(cursor)\n", " {\n", " case 0:\n", " cursor = 'pointer';\n", " break;\n", " case 1:\n", " cursor = 'default';\n", " break;\n", " case 2:\n", " cursor = 'crosshair';\n", " break;\n", " case 3:\n", " cursor = 'move';\n", " break;\n", " }\n", " fig.rubberband_canvas.style.cursor = cursor;\n", "}\n", "\n", "mpl.figure.prototype.handle_message = function(fig, msg) {\n", " fig.message.textContent = msg['message'];\n", "}\n", "\n", "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", " // Request the server to send over a new figure.\n", " fig.send_draw_message();\n", "}\n", "\n", "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", " fig.image_mode = msg['mode'];\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Called whenever the canvas gets updated.\n", " this.send_message(\"ack\", {});\n", "}\n", "\n", "// A function to construct a web socket function for onmessage handling.\n", "// Called in the figure constructor.\n", "mpl.figure.prototype._make_on_message_function = function(fig) {\n", " return function socket_on_message(evt) {\n", " if (evt.data instanceof Blob) {\n", " /* FIXME: We get \"Resource interpreted as Image but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = \"image/png\";\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src);\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data);\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig[\"handle_\" + msg_type];\n", " } catch (e) {\n", " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", " }\n", " }\n", " };\n", "}\n", "\n", "// from https://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", " * https://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys (original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object')\n", " obj[key] = original[key]\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function(event, name) {\n", " var canvas_pos = mpl.findpos(event)\n", "\n", " if (name === 'button_press')\n", " {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {x: x, y: y, button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event)});\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " // Handle any extra behaviour associated with a key event\n", "}\n", "\n", "mpl.figure.prototype.key_event = function(event, name) {\n", "\n", " // Prevent repeat events\n", " if (name == 'key_press')\n", " {\n", " if (event.which === this._key)\n", " return;\n", " else\n", " this._key = event.which;\n", " }\n", " if (name == 'key_release')\n", " this._key = null;\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which != 17)\n", " value += \"ctrl+\";\n", " if (event.altKey && event.which != 18)\n", " value += \"alt+\";\n", " if (event.shiftKey && event.which != 16)\n", " value += \"shift+\";\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, {key: value,\n", " guiEvent: simpleKeys(event)});\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", " if (name == 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message(\"toolbar_button\", {name: name});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", "\n", "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " var width = fig.canvas.width/mpl.ratio\n", " fig.root.unbind('remove')\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable()\n", " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", " fig.close_ws(fig, msg);\n", "}\n", "\n", "mpl.figure.prototype.close_ws = function(fig, msg){\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "}\n", "\n", "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width/mpl.ratio\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message(\"ack\", {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () { fig.push_to_output() }, 1000);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items){\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) { continue; };\n", "\n", " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " event.which = 74;\n", " event.keyCode = 74;\n", " manager.command_mode();\n", " manager.handle_keydown(event);\n", " }\n", "}\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " fig.ondownload(fig, null);\n", "}\n", "\n", "\n", "mpl.find_output_cell = function(html_output) {\n", " // Return the cell and output element which can be found *uniquely* in the notebook.\n", " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", " // IPython event is triggered only after the cells have been serialised, which for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i<ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code'){\n", " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAPACAYAAABq3NR5AAAgAElEQVR4nOzdabjddXku/q1Welmu2lO1aifLLCoiFHHAEYdirUOdqrS2VTme1ukcObWahCHMyIyAAoJM4sAgImSe50ASAplDEghJyDztJDvZ2cNa9/+F/+ZU+DEk7J3v3mt9Ptf1fSPrYj1vcl88t+uBlgAAAAAAjaBe8dJSciIAAAAAoHcpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpAAEAAACggSkAAQAAAKCBKQABAAAAoIEpACmivb09M2bMyIwZM7J8+fKsWrXK8zzP8zzP8zzP87wefsuXL9+zf7e3t5euAyhEAUgRM2bMSEtLi+d5nud5nud5nud5++nNmDGjdB1AIQpAilAAep7neZ7neZ7ned7+fQrA5qUApIjly5f/TgCV/km053me53me53me5zXi++8/wFm+fHnpOoBCFIAUsWrVqj0BtGrVqtLjAAAAQEOyf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAAEDvs3+TKAApRAABAABA77N/kygAKUQAAQAAQO+zf5MoAClEAAEAANBfdXXXSo/wvNm/SRSAFCKAAAAA6G+6a/VcPurRfOZHU9PZT0pA+zeJApBCBBAAAAD9yfpt7fnC9dPzV98bkr/63pBcMHRh6ZGeF/s3iQKQQgQQAAAA/cWkJRty3Lmj9pR///XGLVpferTnZP8mUQBSiAACAACgr+vqruWSEYtz0IAhTyv/Dhk4NLdMXV56xOdk/yZRAFKIAAIAAKAvW9O6K5+7dtrTir+/+t6QvOOCMZm5fHPpEZ8X+zeJApBCBBAAAAB91bhF63PM2SMry7+v3DwjW9o6So/4vNm/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qvfJT36yx79XAAEA8HzNe7I177t4XGX59/GrJ2fFpp2lRwTos+zfJArApnbrrbfmxS9+cVpaWvLqV786gwcPzujRo/PQQw9l6NChueqqq/LhD384n/3sZ3v8uwUQAADPpV6v55apy3P4oOqT37PvW5DdXU5+AZ6N/ZtEAdi0Fi5cmN///d9PS0tL3vOe96S1tfUZP9vR0dHj3y+AAAB4Nq27OvPvP51VWfy9efCIjJy/tvSIAP2C/ZtEAdi0PvjBD6alpSWvetWrsnHjxv3+/QIIAIBn8vDKrXnX98dWln9//8MpWbXFyS/A82X/JlEANqVFixbt+cN/1llnFZlBAAEA8FT1ej03THoshw0aWln+XTB0YTq7a6XHBOhX7N8kCsCmdM455+z5w79gwYI9//uWLVuyZMmSbNq0qddnEEAAAPx3W3d25JRbZlYWf8ecPTJjF60rPSJAv2T/JlEANqWPfvSjaWlpyR/90R+lXq/n9ttvz9FHH/07/+Xfgw8+OGeddVZ27NjRKzMIIAAA/susJ7bknReMqSz/Pnvt1Kxp3VV6RIB+y/5NogBsSgcddFBaWlrylre8Jd/4xjd+p/h76jvqqKOyevXqvf6OVatWPeubMWOGAAIAaHK1Wj3XTViWQwdWn/xeNHxRupz8ArwgCkASBWBTevnLX56WlpY9/xXg//E//keuu+66bNiwIbt3787MmTPzt3/7t3sC4oQTTkittnf/4PVspeJTnwACAGg+m9s68q83PVhZ/P31OaMy4dENpUcEaAgKQBIFYFN6yUtesucP/0te8pJMnz79aZ+p1Wq/UwLedddde/UdCkAAAJ7Jg49vztvPrz75/fz107JuW3vpEQEahgKQRAHYlA488MA9f/i/8IUvPOPn5s+fv+dzn/70p/fqO5wAAwDwVLVaPVePXZKDBzy9+DtowJBcNurRdNfqpccEaCgKQBIFYFN67Wtfu+cP/6233vqsn/3zP//ztLS05C//8i97dAYBBADQXDZs350v3vhA5a/+3nre6ExdurH0iAANyf5NogBsSscff/yeP/xjx4591s++4x3v2PPvC+xJAggAoHlMXboxbz1vdGX59083PJAN23eXHhGgYdm/SRSATelLX/rSnj/8o0aNetbP/ldZeOCBB/boDAIIAKDxddfquXzUozmo4uT34AFDcvXYJU5+AXqZ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\" width=\"640\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[<matplotlib.lines.Line2D at 0x110f28898>]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.plot(range(10))\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" }, "toc": { "colors": { "hover_highlight": "#DAA520", "running_highlight": "#FF0000", "selected_highlight": "#FFD700" }, "moveMenuLeft": true, "nav_menu": { "height": "12px", "width": "252px" }, "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 4, "toc_cell": false, "toc_section_display": "block", "toc_window_display": false, "widenNotebook": false } }, "nbformat": 4, "nbformat_minor": 2 }