Created
August 5, 2020 14:39
-
-
Save dominiquesydow/8491458bdd4024473d14d3c8a396cf9a to your computer and use it in GitHub Desktop.
Fit 3D point cloud to plane (PCA)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Fit 3D point cloud to plane (PCA)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Adapted from stackoverflow: [\"How can I draw 3D plane using PCA in python?\"](https://stackoverflow.com/questions/49957601/how-can-i-draw-3d-plane-using-pca-in-python), answered by kastaa" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Additional resources:\n", | |
"\n", | |
"- https://www.cs.tau.ac.il/~dcor/Graphics/cg-slides/3d_geometry_lesson2.pdf (slide 8)\n", | |
"- https://elliotnoma.wordpress.com/2015/09/29/using-principal-components-analysis-to-determine-the-best-fitting-plane-from-locations-in-a-point-cloud/\n", | |
"- http://alexhwilliams.info/itsneuronalblog/2016/03/27/pca/\n", | |
"- https://math.stackexchange.com/questions/99299/best-fitting-plane-given-a-set-of-points" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"from mpl_toolkits.mplot3d import Axes3D\n", | |
"from sklearn.decomposition import PCA" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Make plotting interactive: https://matplotlib.org/users/interactive.html" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"%matplotlib notebook" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Random data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[10, 36, 2],\n", | |
" [12, 15, 22],\n", | |
" [ 5, 2, 45],\n", | |
" [ 3, 4, 21],\n", | |
" [20, 27, 44],\n", | |
" [29, 20, 32],\n", | |
" [ 3, 6, 16],\n", | |
" [27, 7, 27],\n", | |
" [14, 46, 30],\n", | |
" [40, 41, 17],\n", | |
" [ 9, 20, 14],\n", | |
" [18, 35, 22]])" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"X = np.random.randint(0, 50, size=(12, 3))\n", | |
"X" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## PCA with 3 principle components (=eigenvectors)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"pca = PCA(n_components=3)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"PCA(n_components=3)" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pca.fit(X)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[ 0.42886165, 0.87112769, -0.23919496],\n", | |
" [-0.47892638, -0.00525937, -0.87783931],\n", | |
" [-0.76596815, 0.49102839, 0.41495049]])" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"eig_vec = pca.components_\n", | |
"eig_vec" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([0.55353786, 0.3061246 , 0.14033754])" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"pca.explained_variance_ratio_" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Percentage of variance is explained by last vector is less 0.2%." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[-0.76596815 0.49102839 0.41495049]\n", | |
"[15.83333333 21.58333333 24.33333333]\n" | |
] | |
} | |
], | |
"source": [ | |
"# This is the normal vector of minimum variance\n", | |
"normal = eig_vec[2, :] # (a, b, c)\n", | |
"centroid = np.mean(X, axis=0)\n", | |
"\n", | |
"print(normal)\n", | |
"print(centroid)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"-8.567328914882918\n" | |
] | |
} | |
], | |
"source": [ | |
"# Every point (x, y, z) on the plane should satisfy a*x+b*y+c*z = d\n", | |
"# Taking centroid as a point on the plane\n", | |
"d = -centroid.dot(normal)\n", | |
"\n", | |
"print(d)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Plotting with mplot3D\n", | |
"\n", | |
"- https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#surface-plots\n", | |
"- https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#line-plots\n", | |
"- https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#scatter-plots" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Prepare plane data for plotting" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(44, 37)\n", | |
"(44, 37)\n", | |
"(44, 37)\n" | |
] | |
} | |
], | |
"source": [ | |
"xx, yy = np.meshgrid(\n", | |
" np.arange(\n", | |
" np.min(X[:, 0]), np.max(X[:, 0])\n", | |
" ), \n", | |
" np.arange(\n", | |
" np.min(X[:, 1]), np.max(X[:, 1])\n", | |
" )\n", | |
")\n", | |
"z = (-normal[0] * xx - normal[1] * yy - d) * 1. / normal[2]\n", | |
"print(xx.shape)\n", | |
"print(yy.shape)\n", | |
"print(z.shape)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Prepare eigenvector data for plotting" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"vec_start_list = [np.array([0,0,0])+centroid]*3\n", | |
"vec_end_list = [i*10+centroid for i in eig_vec]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Plot data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"/* Put everything inside the global mpl namespace */\n", | |
"/* global mpl */\n", | |
"window.mpl = {};\n", | |
"\n", | |
"mpl.get_websocket_type = function () {\n", | |
" if (typeof WebSocket !== 'undefined') {\n", | |
" return WebSocket;\n", | |
" } else if (typeof MozWebSocket !== 'undefined') {\n", | |
" return MozWebSocket;\n", | |
" } else {\n", | |
" alert(\n", | |
" '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", | |
"\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 = document.createElement('div');\n", | |
" this.root.setAttribute('style', 'display: inline-block');\n", | |
" this._root_extra_style(this.root);\n", | |
"\n", | |
" parent_element.appendChild(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 = document.createElement('div');\n", | |
" titlebar.classList =\n", | |
" 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", | |
" var titletext = document.createElement('div');\n", | |
" titletext.classList = 'ui-dialog-title';\n", | |
" titletext.setAttribute(\n", | |
" 'style',\n", | |
" 'width: 100%; text-align: center; padding: 3px;'\n", | |
" );\n", | |
" titlebar.appendChild(titletext);\n", | |
" this.root.appendChild(titlebar);\n", | |
" this.header = titletext;\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", | |
"\n", | |
"mpl.figure.prototype._init_canvas = function () {\n", | |
" var fig = this;\n", | |
"\n", | |
" var canvas_div = (this.canvas_div = document.createElement('div'));\n", | |
" canvas_div.setAttribute(\n", | |
" 'style',\n", | |
" 'border: 1px solid #ddd;' +\n", | |
" 'box-sizing: content-box;' +\n", | |
" 'clear: both;' +\n", | |
" 'min-height: 1px;' +\n", | |
" 'min-width: 1px;' +\n", | |
" 'outline: 0;' +\n", | |
" 'overflow: hidden;' +\n", | |
" 'position: relative;' +\n", | |
" 'resize: both;'\n", | |
" );\n", | |
"\n", | |
" function on_keyboard_event_closure(name) {\n", | |
" return function (event) {\n", | |
" return fig.key_event(event, name);\n", | |
" };\n", | |
" }\n", | |
"\n", | |
" canvas_div.addEventListener(\n", | |
" 'keydown',\n", | |
" on_keyboard_event_closure('key_press')\n", | |
" );\n", | |
" canvas_div.addEventListener(\n", | |
" 'keyup',\n", | |
" on_keyboard_event_closure('key_release')\n", | |
" );\n", | |
"\n", | |
" this._canvas_extra_style(canvas_div);\n", | |
" this.root.appendChild(canvas_div);\n", | |
"\n", | |
" var canvas = (this.canvas = document.createElement('canvas'));\n", | |
" canvas.classList.add('mpl-canvas');\n", | |
" canvas.setAttribute('style', 'box-sizing: content-box;');\n", | |
"\n", | |
" this.context = canvas.getContext('2d');\n", | |
"\n", | |
" var backingStore =\n", | |
" this.context.backingStorePixelRatio ||\n", | |
" this.context.webkitBackingStorePixelRatio ||\n", | |
" this.context.mozBackingStorePixelRatio ||\n", | |
" this.context.msBackingStorePixelRatio ||\n", | |
" this.context.oBackingStorePixelRatio ||\n", | |
" this.context.backingStorePixelRatio ||\n", | |
" 1;\n", | |
"\n", | |
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", | |
"\n", | |
" var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", | |
" 'canvas'\n", | |
" ));\n", | |
" rubberband_canvas.setAttribute(\n", | |
" 'style',\n", | |
" 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", | |
" );\n", | |
"\n", | |
" var resizeObserver = new ResizeObserver(function (entries) {\n", | |
" var nentries = entries.length;\n", | |
" for (var i = 0; i < nentries; i++) {\n", | |
" var entry = entries[i];\n", | |
" var width, height;\n", | |
" if (entry.contentBoxSize) {\n", | |
" width = entry.contentBoxSize.inlineSize;\n", | |
" height = entry.contentBoxSize.blockSize;\n", | |
" } else {\n", | |
" width = entry.contentRect.width;\n", | |
" height = entry.contentRect.height;\n", | |
" }\n", | |
"\n", | |
" // Keep the size of the canvas and rubber band canvas in sync with\n", | |
" // the canvas container.\n", | |
" canvas.setAttribute('width', width * mpl.ratio);\n", | |
" canvas.setAttribute('height', height * mpl.ratio);\n", | |
" canvas.setAttribute(\n", | |
" 'style',\n", | |
" 'width: ' + width + 'px; height: ' + height + 'px;'\n", | |
" );\n", | |
"\n", | |
" rubberband_canvas.setAttribute('width', width);\n", | |
" rubberband_canvas.setAttribute('height', height);\n", | |
"\n", | |
" // And update the size in Python. We ignore the initial 0/0 size\n", | |
" // that occurs as the element is placed into the DOM, which should\n", | |
" // otherwise not happen due to the minimum size styling.\n", | |
" if (width != 0 && height != 0) {\n", | |
" fig.request_resize(width, height);\n", | |
" }\n", | |
" }\n", | |
" });\n", | |
" resizeObserver.observe(canvas_div);\n", | |
"\n", | |
" function on_mouse_event_closure(name) {\n", | |
" return function (event) {\n", | |
" return fig.mouse_event(event, name);\n", | |
" };\n", | |
" }\n", | |
"\n", | |
" rubberband_canvas.addEventListener(\n", | |
" 'mousedown',\n", | |
" on_mouse_event_closure('button_press')\n", | |
" );\n", | |
" rubberband_canvas.addEventListener(\n", | |
" 'mouseup',\n", | |
" on_mouse_event_closure('button_release')\n", | |
" );\n", | |
" // Throttle sequential mouse events to 1 every 20ms.\n", | |
" rubberband_canvas.addEventListener(\n", | |
" 'mousemove',\n", | |
" on_mouse_event_closure('motion_notify')\n", | |
" );\n", | |
"\n", | |
" rubberband_canvas.addEventListener(\n", | |
" 'mouseenter',\n", | |
" on_mouse_event_closure('figure_enter')\n", | |
" );\n", | |
" rubberband_canvas.addEventListener(\n", | |
" 'mouseleave',\n", | |
" on_mouse_event_closure('figure_leave')\n", | |
" );\n", | |
"\n", | |
" canvas_div.addEventListener('wheel', function (event) {\n", | |
" if (event.deltaY < 0) {\n", | |
" event.step = 1;\n", | |
" } else {\n", | |
" event.step = -1;\n", | |
" }\n", | |
" on_mouse_event_closure('scroll')(event);\n", | |
" });\n", | |
"\n", | |
" canvas_div.appendChild(canvas);\n", | |
" canvas_div.appendChild(rubberband_canvas);\n", | |
"\n", | |
" this.rubberband_context = rubberband_canvas.getContext('2d');\n", | |
" this.rubberband_context.strokeStyle = '#000000';\n", | |
"\n", | |
" this._resize_canvas = function (width, height, forward) {\n", | |
" if (forward) {\n", | |
" canvas_div.style.width = width + 'px';\n", | |
" canvas_div.style.height = height + 'px';\n", | |
" }\n", | |
" };\n", | |
"\n", | |
" // Disable right mouse context menu.\n", | |
" this.rubberband_canvas.addEventListener('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 toolbar = document.createElement('div');\n", | |
" toolbar.classList = 'mpl-toolbar';\n", | |
" this.root.appendChild(toolbar);\n", | |
"\n", | |
" function on_click_closure(name) {\n", | |
" return function (_event) {\n", | |
" return fig.toolbar_button_onclick(name);\n", | |
" };\n", | |
" }\n", | |
"\n", | |
" function on_mouseover_closure(tooltip) {\n", | |
" return function (event) {\n", | |
" if (!event.currentTarget.disabled) {\n", | |
" return fig.toolbar_button_onmouseover(tooltip);\n", | |
" }\n", | |
" };\n", | |
" }\n", | |
"\n", | |
" fig.buttons = {};\n", | |
" var buttonGroup = document.createElement('div');\n", | |
" buttonGroup.classList = 'mpl-button-group';\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", | |
" /* Instead of a spacer, we start a new button group. */\n", | |
" if (buttonGroup.hasChildNodes()) {\n", | |
" toolbar.appendChild(buttonGroup);\n", | |
" }\n", | |
" buttonGroup = document.createElement('div');\n", | |
" buttonGroup.classList = 'mpl-button-group';\n", | |
" continue;\n", | |
" }\n", | |
"\n", | |
" var button = (fig.buttons[name] = document.createElement('button'));\n", | |
" button.classList = 'mpl-widget';\n", | |
" button.setAttribute('role', 'button');\n", | |
" button.setAttribute('aria-disabled', 'false');\n", | |
" button.addEventListener('click', on_click_closure(method_name));\n", | |
" button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", | |
"\n", | |
" var icon_img = document.createElement('img');\n", | |
" icon_img.src = '_images/' + image + '.png';\n", | |
" icon_img.srcset = '_images/' + image + '_large.png 2x';\n", | |
" icon_img.alt = tooltip;\n", | |
" button.appendChild(icon_img);\n", | |
"\n", | |
" buttonGroup.appendChild(button);\n", | |
" }\n", | |
"\n", | |
" if (buttonGroup.hasChildNodes()) {\n", | |
" toolbar.appendChild(buttonGroup);\n", | |
" }\n", | |
"\n", | |
" var fmt_picker = document.createElement('select');\n", | |
" fmt_picker.classList = 'mpl-widget';\n", | |
" toolbar.appendChild(fmt_picker);\n", | |
" this.format_dropdown = fmt_picker;\n", | |
"\n", | |
" for (var ind in mpl.extensions) {\n", | |
" var fmt = mpl.extensions[ind];\n", | |
" var option = document.createElement('option');\n", | |
" option.selected = fmt === mpl.default_extension;\n", | |
" option.innerHTML = fmt;\n", | |
" fmt_picker.appendChild(option);\n", | |
" }\n", | |
"\n", | |
" var status_bar = document.createElement('span');\n", | |
" status_bar.classList = 'mpl-message';\n", | |
" toolbar.appendChild(status_bar);\n", | |
" this.message = status_bar;\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", | |
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", | |
" // which will in turn request a refresh of the image.\n", | |
" this.send_message('resize', { width: x_pixels, height: y_pixels });\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.send_message = function (type, properties) {\n", | |
" properties['type'] = type;\n", | |
" properties['figure_id'] = this.id;\n", | |
" this.ws.send(JSON.stringify(properties));\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.send_draw_message = function () {\n", | |
" if (!this.waiting) {\n", | |
" this.waiting = true;\n", | |
" this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_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", | |
"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], msg['forward']);\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,\n", | |
" 0,\n", | |
" fig.canvas.width / mpl.ratio,\n", | |
" fig.canvas.height / mpl.ratio\n", | |
" );\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", | |
" 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.handle_history_buttons = function (fig, msg) {\n", | |
" for (var key in msg) {\n", | |
" if (!(key in fig.buttons)) {\n", | |
" continue;\n", | |
" }\n", | |
" fig.buttons[key].disabled = !msg[key];\n", | |
" fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", | |
" }\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", | |
" if (msg['mode'] === 'PAN') {\n", | |
" fig.buttons['Pan'].classList.add('active');\n", | |
" fig.buttons['Zoom'].classList.remove('active');\n", | |
" } else if (msg['mode'] === 'ZOOM') {\n", | |
" fig.buttons['Pan'].classList.remove('active');\n", | |
" fig.buttons['Zoom'].classList.add('active');\n", | |
" } else {\n", | |
" fig.buttons['Pan'].classList.remove('active');\n", | |
" fig.buttons['Zoom'].classList.remove('active');\n", | |
" }\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", | |
"\n", | |
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", | |
" evt.data\n", | |
" );\n", | |
" fig.updated_canvas_event();\n", | |
" fig.waiting = false;\n", | |
" return;\n", | |
" } else if (\n", | |
" typeof evt.data === 'string' &&\n", | |
" evt.data.slice(0, 21) === 'data:image/png;base64'\n", | |
" ) {\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(\n", | |
" \"No handler for the '\" + msg_type + \"' message type: \",\n", | |
" msg\n", | |
" );\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(\n", | |
" \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", | |
" e,\n", | |
" e.stack,\n", | |
" msg\n", | |
" );\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", | |
" }\n", | |
" if (e.target) {\n", | |
" targ = e.target;\n", | |
" } else if (e.srcElement) {\n", | |
" targ = e.srcElement;\n", | |
" }\n", | |
" if (targ.nodeType === 3) {\n", | |
" // defeat Safari bug\n", | |
" targ = targ.parentNode;\n", | |
" }\n", | |
"\n", | |
" // pageX,Y are the mouse positions relative to the document\n", | |
" var boundingRect = targ.getBoundingClientRect();\n", | |
" var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", | |
" var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", | |
" }\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", | |
" 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, {\n", | |
" x: x,\n", | |
" y: y,\n", | |
" button: event.button,\n", | |
" step: event.step,\n", | |
" guiEvent: simpleKeys(event),\n", | |
" });\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", | |
" // Prevent repeat events\n", | |
" if (name === 'key_press') {\n", | |
" if (event.which === this._key) {\n", | |
" return;\n", | |
" } else {\n", | |
" this._key = event.which;\n", | |
" }\n", | |
" }\n", | |
" if (name === 'key_release') {\n", | |
" this._key = null;\n", | |
" }\n", | |
"\n", | |
" var value = '';\n", | |
" if (event.ctrlKey && event.which !== 17) {\n", | |
" value += 'ctrl+';\n", | |
" }\n", | |
" if (event.altKey && event.which !== 18) {\n", | |
" value += 'alt+';\n", | |
" }\n", | |
" if (event.shiftKey && event.which !== 16) {\n", | |
" value += 'shift+';\n", | |
" }\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, 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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"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\";/* global mpl */\n", | |
"\n", | |
"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 = document.getElementById(id);\n", | |
" var ws_proxy = comm_websocket_adapter(comm);\n", | |
"\n", | |
" function ondownload(figure, _format) {\n", | |
" window.open(figure.canvas.toDataURL());\n", | |
" }\n", | |
"\n", | |
" var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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", | |
"\n", | |
"mpl.figure.prototype.handle_close = function (fig, msg) {\n", | |
" var width = fig.canvas.width / mpl.ratio;\n", | |
" fig.root.removeEventListener('remove', this._remove_fig_handler);\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.innerHTML =\n", | |
" '<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'] =\n", | |
" '<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 () {\n", | |
" fig.push_to_output();\n", | |
" }, 1000);\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype._init_toolbar = function () {\n", | |
" var fig = this;\n", | |
"\n", | |
" var toolbar = document.createElement('div');\n", | |
" toolbar.classList = 'btn-toolbar';\n", | |
" this.root.appendChild(toolbar);\n", | |
"\n", | |
" function on_click_closure(name) {\n", | |
" return function (_event) {\n", | |
" return fig.toolbar_button_onclick(name);\n", | |
" };\n", | |
" }\n", | |
"\n", | |
" function on_mouseover_closure(tooltip) {\n", | |
" return function (event) {\n", | |
" if (!event.currentTarget.disabled) {\n", | |
" return fig.toolbar_button_onmouseover(tooltip);\n", | |
" }\n", | |
" };\n", | |
" }\n", | |
"\n", | |
" fig.buttons = {};\n", | |
" var buttonGroup = document.createElement('div');\n", | |
" buttonGroup.classList = 'btn-group';\n", | |
" var button;\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", | |
" /* Instead of a spacer, we start a new button group. */\n", | |
" if (buttonGroup.hasChildNodes()) {\n", | |
" toolbar.appendChild(buttonGroup);\n", | |
" }\n", | |
" buttonGroup = document.createElement('div');\n", | |
" buttonGroup.classList = 'btn-group';\n", | |
" continue;\n", | |
" }\n", | |
"\n", | |
" button = fig.buttons[name] = document.createElement('button');\n", | |
" button.classList = 'btn btn-default';\n", | |
" button.href = '#';\n", | |
" button.title = name;\n", | |
" button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", | |
" button.addEventListener('click', on_click_closure(method_name));\n", | |
" button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", | |
" buttonGroup.appendChild(button);\n", | |
" }\n", | |
"\n", | |
" if (buttonGroup.hasChildNodes()) {\n", | |
" toolbar.appendChild(buttonGroup);\n", | |
" }\n", | |
"\n", | |
" // Add the status bar.\n", | |
" var status_bar = document.createElement('span');\n", | |
" status_bar.classList = 'mpl-message pull-right';\n", | |
" toolbar.appendChild(status_bar);\n", | |
" this.message = status_bar;\n", | |
"\n", | |
" // Add the close button to the window.\n", | |
" var buttongrp = document.createElement('div');\n", | |
" buttongrp.classList = 'btn-group inline pull-right';\n", | |
" button = document.createElement('button');\n", | |
" button.classList = 'btn btn-mini btn-primary';\n", | |
" button.href = '#';\n", | |
" button.title = 'Stop Interaction';\n", | |
" button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", | |
" button.addEventListener('click', function (_evt) {\n", | |
" fig.handle_close(fig, {});\n", | |
" });\n", | |
" button.addEventListener(\n", | |
" 'mouseover',\n", | |
" on_mouseover_closure('Stop Interaction')\n", | |
" );\n", | |
" buttongrp.appendChild(button);\n", | |
" var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", | |
" titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype._remove_fig_handler = function () {\n", | |
" this.close_ws(this, {});\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype._root_extra_style = function (el) {\n", | |
" el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", | |
" el.addEventListener('remove', this._remove_fig_handler);\n", | |
"};\n", | |
"\n", | |
"mpl.figure.prototype._canvas_extra_style = function (el) {\n", | |
" // this is important to make the div 'focusable\n", | |
" el.setAttribute('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", | |
" } else {\n", | |
" // location in version 2\n", | |
" IPython.keyboard_manager.register_events(el);\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", | |
"\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", | |
"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(\n", | |
" 'matplotlib',\n", | |
" mpl.mpl_figure_comm\n", | |
" );\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=\"600\">" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"fig = plt.figure(figsize=(6, 6))\n", | |
"ax = fig.add_subplot(111, projection='3d')\n", | |
"\n", | |
"# Plot the surface\n", | |
"ax.plot_surface(xx, yy, z, color='blue', alpha=0.3)\n", | |
"\n", | |
"# Plot the 3D cloud\n", | |
"ax.scatter(*(X.T))\n", | |
"\n", | |
"# Plot the eigenvectors\n", | |
"for vec_start, vec_end in zip(vec_start_list, vec_end_list):\n", | |
" ax.plot([vec_start[0], vec_end[0]], [vec_start[1], vec_end[1]], [vec_start[2], vec_end[2]])\n", | |
" \n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "pcatest", | |
"language": "python", | |
"name": "pcatest" | |
}, | |
"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.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment