{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Matplotlib Exercise: Visualizing Correlated Gaussian Random Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we know how to generate correlated random variables, let's visualize them.\n", "\n", "### Exercise\n", "\n", "Make the following plots. All plots must have x and y labels, titles, and legends if there is more than one dataset in the same axes.\n", "\n", "1. Overlaid histograms of your samples of uncorrelated random variables with 30 bins (use `histtype='step'`)\n", "2. A plot with 2 axes to the left and to the right of one another: \n", " a. Scatterplot of the first 1000 *uncorrelated* $X_3$ vs $X_1$ with marker size equal to 2. Overlay the the theoretical line ($y=x$) in a black, dashed line. \n", " b. Scatterplot of the first 1000 *correlated* $X_3$ vs $X_1$ with marker size equal to 2. Overlay the the theoretical line ($y=x$) in a black, dashed line. \n", "3. Overlaid histograms of your samples of correlated random variables with 30 bins (use `histtype='step'`)\n", "\n", "### Hints\n", "\n", "- In the arrays of random variables, each row `i` corresponds to a *sample* of random variable `i` (just FYI).\n", "- Google is your friend :)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib notebook" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt # need to import matplotlib, of course\n", "import numpy as np # import any needed modules here" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n_real = int(1E6) # number of realizations\n", "n_vars = 3 # number of random variables we want to correlate\n", "cov = np.array([[ 1. , 0.2, 0.4], [ 0.2, 0.8, 0.3], [ 0.4, 0.3, 1.1]]) # covariance matrix" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "unc_vars = np.random.randn(n_vars, n_real) # create [n_vars x n_real] array of uncorrelated (unc) normal random variables" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "chol_mat = np.linalg.cholesky(cov) # calculate the cholesky decomposition of the covariance matrix" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cor_vars = chol_mat @ unc_vars # [n_vars x n_real] array of correlated (cor) random variables" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1.0002459 , 0.8002533 , 1.09854001])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cor_vars.var(axis=1) # calculate variances of each sample of random variables" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 0.22387049],\n", " [ 0.22387049, 1. ]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.corrcoef(cor_vars[0, :], cor_vars[1, :]) # calculate the correlation coefficient between the first and second random samples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot 1: Histogram of Uncorrelated Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a plot with overlaid histograms of your samples of uncorrelated random variables with 30 bins (use histtype='step')." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "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", " 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 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 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 * 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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", "\n", "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overriden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " 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", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\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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\" width=\"640\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(1)\n", "plt.clf()\n", "\n", "[plt.hist(unc_vars[i, :], bins=30, histtype='step', label=f'X{i+1}') for i in range(n_vars)] # WHOO LIST COMPREHENSION!\n", "plt.xlabel('Random Variable')\n", "plt.ylabel('Count')\n", "plt.legend()\n", "plt.title('Uncorrelated Random Variables')\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot 2: Scatterplot of $X_3$ vs. $X_1$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A plot with 2 axes to the left and to the right of one another: \n", " a. Scatterplot of the first 1000 *uncorrelated* $X_3$ vs $X_1$ with marker size equal to 2. Overlay the the theoretical line ($y=x$) in a black, dashed line. \n", " b. Scatterplot of the first 1000 *correlated* $X_3$ vs $X_1$ with marker size equal to 2. Overlay the the theoretical line ($y=x$) in a black, dashed line. " ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "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", " 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 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 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 * 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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", "\n", "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overriden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " 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", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\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,iVBORw0KGgoAAAANSUhEUgAAAyAAAAJYCAYAAACadoJwAAAgAElEQVR4Xux9B9geRdX2nd5ICEkIIUjoJSEUifDRBEJAOlgpSgtF6UJQEJSuWJAiLSDSQRAVaT9BFAgBpQYQCCFISzQkkEpCGmn/dR6eed133tnd2Z2dfXb3ufe6/PjgmT1z5j7zzr1nzpwz7cCHCBABIkAEiAARIAJEgAgQASKQEwLtcuqH3RABIkAEiAARIAJEgAgQASJABEAHhJOACBABIkAEiAARIAJEgAgQgdwQoAOSG9TsiAgQASJABIgAESACRIAIEAE6IJwDRIAIEAEiQASIABEgAkSACOSGAB2Q3KBmR0SACBABIkAEiAARIAJEgAjQAeEcIAJEgAgQASJABIgAESACRCA3BOiA5AY1OyICRIAIEAEiQASIABEgAkSADgjnABEgAkSACBABIkAEiAARIAK5IUAHJDeo2RERIAJEgAgQASJABIgAESACdEA4B4gAESACRIAIEAEiQASIABHIDQE6ILlBzY6IABEgAkSACBABIkAEiAARoAPCOUAEiAARIAJEgAgQASJABIhAbgjQAckNanZEBIgAESACRIAIEAEiQASIAB0QzgEiQASIABEgAkSACBABIkAEckOADkhuULMjIkAEiAARIAJEgAgQASJABOiAcA4QASJABIgAESACRIAIEAEikBsCdEByg5odEQEiQASIABEgAkSACBABIkAHhHOACBABIkAEiAARIAJEgAgQgdwQoAOSG9TsiAgQASJABIgAESACRIAIEAE6IJwDRUdgXQDv15WMmq+3AjgSwIUALij6oBqgn8LxKQC7NqB/1y5XApgMQMbBhwgQASKQFoEeAL4HYH8AQwCsBmABgLcA/A3A7wBMSSu8ge8pDhwOYGwD9UjTtXD2+QBGApBx8GkCBOiANIGRSz5EOiDZGDBLB6QRREcHJJt5QClEoJkR2AHAnwEMALAQwHMAPgKwKoBtAKwOYAmA/QD8vWRAZbUuZ8kVthDSAbFFqkLt6IBUyJgVHQodkGwMmyWpZEV0SUZGByQJWmxLBIiAjsBWAJ4F0BXALwFcXI98qHbtARwI4FcAflbCnfis1uUsucJ2FtIBsUWqQu3ogFTImBUdCh2QbAybJalkRXRJRkYHJAlabEsEiEAQAfnWeQ3A0PoRXTmqG/ZINGRt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\" width=\"640\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_plot = int(1e3)\n", "\n", "plt.figure(2)\n", "plt.clf()\n", "\n", "plt.subplot(1, 2, 1)\n", "plt.scatter(unc_vars[0, :n_plot], unc_vars[1, :n_plot], s=2)\n", "plt.plot([-4, 4], [-4, 4], 'k:')\n", "plt.title('Uncorrelated')\n", "plt.xlabel('X1')\n", "plt.ylabel('X2')\n", "\n", "plt.subplot(1, 2, 2)\n", "plt.scatter(cor_vars[0, :n_plot], cor_vars[1, :n_plot], s=2)\n", "plt.plot([-4, 4], [-4, 4], 'k:')\n", "plt.title('Correlated')\n", "plt.xlabel('X1')\n", "plt.ylabel('X2')\n", "\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot 3: Histogram of Correlated Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a plot with overlaid histograms of your samples of uncorrelated random variables with 30 bins (use histtype='step')." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "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", " 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 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 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 * 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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n", "\n", "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", " // Create a \"websocket\"-like object which calls the given IPython comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overriden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " 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", " // select the cell after this one\n", " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", " IPython.notebook.select(index + 1);\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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qBCQASHz2HYEEBAGBAQgAAEIQAAClSOwevVqLV++XJMmTdLMmTNHnTRXrnMFN9jyYZZr167VjBkzNGWKTzF0TwhIwcGpaXUISE0DS7cgAAEIQAACdSbw+OOPa/369dp77737bhuqM4es+ubtbD//+c81ceJEveY1r0FAsgJLOV0JICAMDAhAAAIQgAAEKkfgkUce0aZNm/Ta1/o+aVIWBB5++GGNHz9ee+3lWye6J1ZAsiBNGQgIYwACEIAABCAAgcoR8Lf1Tl4BIWVDIAlTBCQb1k0vBQFp+gig/xCAAAQgAIEKEkgyWa5gt0ptchKmCEipIapN5QhIbUJJRyAAAQhAAALNIZBkstwcGtn0NAlTBCQb1k0vBQFp+gig/xCAAAQgAIEKEkgyWa5gt0ptchKmCEipIapN5QhIbUJJRyAAAQhAAALNITDaZPndl96j5Ws2BAFjxuQdde3phw/cljPPPFMXX3yxbr75Zh177LHbleN7UA444AAddNBBuv3227VixQp95Stf0X333afFixdr5cqVWrBggc4/3/ds908ISH9G5MiGAAKSDUdKgQAEIAABCECgQAKjTZaPXHirnly9UTOnTCiwRS+tKm7DnfOPGbgdzz77rPbff//WRYsPPPBA6zW5cTr++ON111136f7779c+++yj2267TUcffbR233331tvBvv/97yMgA5PnwTwJICB50qVsCEAAAhCAAARyIdBPQFzpMBP/LBptEcqiHSMjI3r729+us846S4sWLWqVedlll+mDH/ygFi5cqHPPPbf1M8vKc889p1e+8pWtOz0sJayAZBFJysiaAAKSNVHKgwAEIAABCEAgdwJNEhDDnDdvnq666qrWisduu+2m/fbbryUY9957b2t1pDMhILkPQSoYggACMgQ8HoUABCAAAQhAoBwCTROQVatWad9999XUqVNbW6xuueWW1jkPnwHplhCQcsYltSYjgIAk40QuCEAAAhCAAAQCItA0ATH666+/XnPnzm1Fod/WKgQkoMFKU15CAAFhUEAAAtUncMUJ0pplw/dj8q7SKTcOXw4lQAACuRNoooDccccdOuqoo1psvfXq0EMP7ckZAcl9CFLBEAQQkCHg8SgEIBAIgUVv3CYgFohBU/z82UsHLYHnIACBAgk0TUA2bNigAw88UBs3btS6deu055576kc/+lHX8x8O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\" width=\"640\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(3)\n", "plt.clf()\n", "\n", "[plt.hist(cor_vars[i, :], bins=30, histtype='step', label=f'X{i+1}') for i in range(n_vars)] # WHOO LIST COMPREHENSION!\n", "plt.xlabel('Random Variable')\n", "plt.ylabel('Count')\n", "plt.legend()\n", "plt.title('Correlated Random Variables')\n", "\n", "plt.tight_layout()" ] } ], "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.1" } }, "nbformat": 4, "nbformat_minor": 2 }