{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# PyMKS Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook, we are demonstrating simple case studies for calculating 2-point spatial correlations on an experimental microstructure as well as synthetic microstructures. First, we will demonstrate how to calculate spatial correlations for a single 2 phase experimental image. Then, we will demonstrate the most efficient way to calculate 2-point spatial correlations on multiple microstructures without using any for-loops. We will only use common python packages like Numpy, Scikit-learn, and Matplotlib for this introductory notebook. For parallel computation PyMKS uses Dask, but we will not be using Dask in this Notebook. Please see the [Effective Stiffness of a Composite Material example](./stress.ipynb) or [Effective Stiffness of Fiber Composite](./fiber.ipynb) notebooks that both implement parallel workflows using Scikit-learn pipelines." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Importing the necessary packages." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import warnings\n", "warnings.filterwarnings('ignore')\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.decomposition import PCA\n", "from mpl_toolkits.mplot3d import Axes3D\n", "from PIL import Image\n", "\n", "from pymks import (\n", " generate_multiphase,\n", " plot_microstructures,\n", " PrimitiveTransformer,\n", " TwoPointCorrelation,\n", " FlattenTransformer\n", ")" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from sklearn.decomposition import PCA\n", "#PYTEST_VALIDATE_IGNORE_OUTPUT\n", "\n", "# %matplotlib inline\n", "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reading the Experimental Data\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example is a segmented optical image with the grain interior and grain boundaries representing the two phases. See [[1]](#References) for a more complete example of machine learning using this data.\n", "\n", "The following loads and visualizes the experimental microstructure." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "im = Image.open('image.tiff')\n", "plt.figure()\n", "plt.imshow(im,cmap='gray')\n", "plt.title(\"2 Phase Segmented Experimental Image\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculating the 2-point Stats" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "PyMKS can handle both Numpy and Dask arrays. For simplicity, we will only use Numpy arrays in this notebook. Note that PyMKS requires certain data shapes for proper 2-point spatial correlation calculations. For a two-dimensional microstructure, PyMKS requires a 4-dimensional array. The first dimension is the sample axis, the second dimension is the x-axis, the third dimension is the y-axis, and the fourth dimension is the phase axis. In the phase axis, the specific phase gets '1's and the rest of the image gets '0's. This is equivalent to one-hot encoding in image analysis. For this example, we have a 2-phase segmented microstructure (986 x 1376 pixels) so we need to perform some array manipulations to obtain a 1 x 986 x 1376 x 2 array. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Convert the image to a Numpy array and add the sample axis by using the `np.expand_dims` function. Multiple images can be stacked along the sample axis." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "imarray = np.expand_dims(np.array(im), axis=0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 986, 1376)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "imarray.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next step is to add the phase axis. Since this is a binary microstructure, we could stack the inverted version of the image with the original image. However, we are going to demonstrate the `PrimitiveTransformer` that performs the same operation and this transformer can be used for more complex cases (higher number phases and continuous values for phase information)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "data = PrimitiveTransformer(n_state=2, min_=0.0, max_=1.0).transform(imarray)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 986, 1376, 2)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`PrimitiveTransformer` created the (1 x 986 x 1376 x 2) array where the last axis has the phase information. For this 2-phase 2D microstructure example, we have two 2D arrays where the first phase (grain interior) get `1's` at `[0,:,:,0]`, and the second phase (grain boundary) gets the `1's` at `[0,:,:,1]` " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_microstructures(\n", " data[0, :, :, 0],\n", " data[0, :, :, 1],\n", " titles=['First phase with ones', 'Second phase with ones'],\n", " cmap='gray',\n", " colorbar=False\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above cell uses the `plot_microstructures` function that takes any number of 2D arrays and plots them side by side. `colorbar` can be switched on or off and the colormap, `cmap` can be changed to different settings. See the [Matplotlib documentation](https://matplotlib.org/stable/tutorials/colors/colormaps.html) for more details." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After obtaining the data matrix with the desired shape, calculating two-point correlations are straightforward. We call the `TwoPointCorrelation` class and perform the `.transform` method. The `TwoPointCorrelation` class takes 3 parameters. The first parameter, `periodic_boundary`, is a boolean and defines the type of boundary condition. The second parameter, `cutoff`, is an integer that defines the maximum correlation vector length. The third parameter, `correlations`, is a list that defines the auto-correlations and cross-correlations of interest (e.g. `(0,0)` means auto-correlation of the first phase,`(0,1)` means cross-correlation between the first phase and the second phase)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "auto_correlation = TwoPointCorrelation(\n", " periodic_boundary=True,\n", " cutoff=25,\n", " correlations=[(0,0)]\n", ").transform(data)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 51, 51, 1)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "auto_correlation.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "View the grain interior auto-correlation. The following image shows that the grain interior has roughly 80% volume fraction and is equiaxial (does not favor any particular direction)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_microstructures(\n", " auto_correlation[0, :, :, 0],\n", " titles=['Correlation [0, 0]'],\n", " showticks=True\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multiple Synthetic Microstructures" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the previous section, we demonstrated a 2-point spatial correlation calculation for a single experimental image. Now we will demonstrate calculating 2-point correlations for multiple microstructure images without using any for loops. In the following, the data array has axes representing the sample axis, the x axis, the y axis and the phase axis. \n", "\n", "Here we generate 40 different 2-phased synthetic microstructures each with a `100x100` shape using the function `generate_multiphase`. [Effective Siffness of a Composite Material example](./stress.ipynb) notebook has detailed explanation for the `generate_multiphase` function. \n", "\n", "The `generate_multiphase` function takes a domain `shape`, a `volume_fraction` for each phase,and a `grain_size` argument. The `grain_size` is a rough estimate for the desired microstructure feature size.\n", "\n", "The following code generates four different types of microstructures each with 10 samples with spatial dimensions of 100 x 100. Each of the four samples will have a different microstructure feature size.\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "grain_sizes = [(30, 5), (10, 40), (15, 15), (5, 30)]\n", "seeds = [10, 99, 4, 36]\n", "\n", "data_synth = np.concatenate([\n", " generate_multiphase(shape=(10, 100, 100), grain_size=grain_size,\n", " volume_fraction=(0.5, 0.5),\n", " percent_variance=0.2,\n", " seed=seed\n", " )\n", " for grain_size, seed in zip(grain_sizes, seeds)\n", "])\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(40, 100, 100)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_synth.shape\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize some synthetic microstructures." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_microstructures(*data_synth[::10], cmap='gray', colorbar=False);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `data_synth` array currently has 3 axes (sample, x-direction, y-direction). We use the `PrimitiveTransformer` to create an additional axis. As described above, this axis represent the one-hot encoded (or discretized) representation of the data." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "data_disc = PrimitiveTransformer(n_state=2, min_=0.0, max_=1.0).transform(data_synth)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(40, 100, 100, 2)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_disc.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We use the `TwoPointCorrelation` class to calculate 2-point spatial correlations (`[(0,0),(0,1)]`) for all 40 microstructures." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "data_corr = TwoPointCorrelation(\n", " periodic_boundary=True,\n", " cutoff=10,\n", " correlations=[(0, 0), (0, 1)]\n", ").transform(data_disc)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(40, 21, 21, 2)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data_corr.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The last axis of the `data_corr` array contains the requested auto-correlations and cross-correlations (i.e. `[0, :, :, 1]` is the `(0, 1)` cross-correlation for the first microstructure). \n", "\n", "The following images are the correlations for the first microstructure (white phase auto-correlation and cross correlation between white and black phases). The center point of the image has the value of the volume fraction (50%) and shows that the grains are mostly oriented in a vertical direction." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_microstructures(\n", " data_corr[0, :, :, 0],\n", " data_corr[0, :, :, 1],\n", " titles=['1st Microstructure - Correlation [0, 0]', '1st Microstructure - Correlation [0, 1]'],\n", " showticks=True\n", ");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Principle Component Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Previously, we computed the 2-point correlations for multiple synthetic microstructures. Here, we do a principle component (PC) analysis on the correlation data to reduce the its dimensions and generate a clearer view of the data. The PC view will ideally show four clear groupings of the data based on the pattern for each microstucture category.\n", "\n", "The PC data is first transformed from a `(40, 21, 21, 2)` shaped array into a `(40, 882)` shaped array. The Scikit-Learn `PCA` class requires a `(n_sample, n_feature)` shaped array. The `PCA` will reduce the size of the data to a `(40, 3)` shaped array, which is often enough data to capture the differences between each category of microstructure for subsequent machine learning." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "pc_scores = PCA(\n", " svd_solver='full',\n", " n_components=3,\n", " random_state=10\n", ").fit_transform(data_corr.reshape(40,-1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " Visualize the PC scores. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "#PYTEST_VALIDATE_IGNORE_OUTPUT\n", "%matplotlib notebook" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "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", " if (entry.contentBoxSize instanceof Array) {\n", " // Chrome 84 implements new version of spec.\n", " width = entry.contentBoxSize[0].inlineSize;\n", " height = entry.contentBoxSize[0].blockSize;\n", " } else {\n", " // Firefox implements old version of spec.\n", " width = entry.contentBoxSize.inlineSize;\n", " height = entry.contentBoxSize.blockSize;\n", " }\n", " } else {\n", " // Chrome <84 implements even older version of spec.\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", " if (entry.devicePixelContentBoxSize) {\n", " // Chrome 84 implements new version of spec.\n", " canvas.setAttribute(\n", " 'width',\n", " entry.devicePixelContentBoxSize[0].inlineSize\n", " );\n", " canvas.setAttribute(\n", " 'height',\n", " entry.devicePixelContentBoxSize[0].blockSize\n", " );\n", " } else {\n", " canvas.setAttribute('width', width * mpl.ratio);\n", " canvas.setAttribute('height', height * mpl.ratio);\n", " }\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", " event.preventDefault();\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(\"
\");\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", " '';\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", " '';\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 = '';\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 = '';\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": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#PYTEST_VALIDATE_IGNORE_OUTPUT\n", "pc1, pc2, pc3, pc4 = np.split(pc_scores, 4)\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111, projection='3d')\n", "\n", "ax.scatter(pc1[:,0], pc1[:,1], pc1[:,2], c='r', marker='o')\n", "ax.scatter(pc2[:,0], pc2[:,1], pc2[:,2], c='g', marker='o')\n", "ax.scatter(pc3[:,0], pc3[:,1], pc3[:,2], c='b', marker='o')\n", "ax.scatter(pc4[:,0], pc4[:,1], pc4[:,2], c='k', marker='o')\n", "\n", "ax.set_xlabel(\"PC1\")\n", "ax.set_ylabel(\"PC2\")\n", "ax.set_zlabel(\"PC3\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[1] Yucel, B., Yucel, S., Ray, A. et al. Mining the Correlations Between Optical Micrographs and Mechanical Properties of Cold-Rolled HSLA Steels Using Machine Learning Approaches. Integr Mater Manuf Innov 9, 240–256 (2020). https://doi.org/10.1007/s40192-020-00183-3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }