{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ " **Chapter 1: [Introduction](CH1_00-Introduction.ipynb)** \n", "\n", "\n", "
\n", "\n", "# Matplotlib and Numpy for Micrographs\n", "\n", " Image-Data Representations in the Computer for Microscopists\n", "\n", "[Download](https://raw.githubusercontent.com/gduscher/MSE672-Introduction-to-TEM//main/Introduction/CH1_03-Data_Representation.ipynb)\n", "\n", "[![OpenInColab](https://colab.research.google.com/assets/colab-badge.svg)](\n", " https://colab.research.google.com/github/gduscher/MSE672-Introduction-to-TEM/blob/main/Introduction/CH1_03-Data_Representation.ipynb)\n", " \n", "part of\n", "\n", " **[MSE672: Introduction to Transmission Electron Microscopy](../_MSE672_Intro_TEM.ipynb)**\n", "\n", "**Spring 2026**
\n", "by Gerd Duscher\n", "\n", "Microscopy Facilities
\n", "Institute of Advanced Materials & Manufacturing
\n", "Materials Science & Engineering
\n", "The University of Tennessee, Knoxville\n", "\n", "\n", "Background and methods to analysis and quantification of data acquired with transmission electron microscopes.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Topic \n", "\n", "All notebooks of this notebook series rely on two core python-packages: [numpy](https://numpy.org/) and [matplotlib](https://matplotlib.org/)\n", "\n", "However, ``numpy`` and ``matplot`` are a bit confusing of how they are dealing with images from microscopes.\n", "\n", "The reason for these problems is that matplotlib is an image **and** a line plotting routine, and those routines are using different conventions of the plotting axis.\n", "\n", "The behaviour of these two packages will be explored in this notebook, and the differences of between [numpy](https://numpy.org/) and [matplotlib](https://matplotlib.org/) have direct impact on how we deal with data, how we store them, and how easily we can use other packages for data analysis.\n", "\n", "***\n", "\n", "Here, we load two packages(numpy and matplotlib) which is done in the code cell below. Every notebook in this series will start with those lines.\\\n", "\n", ">Note for Google Colab\n", ">\n", ">The runtime has to be restarted and the code cell below again to enable interactive plotting\n", ">\n", ">in the Menu **Runtime** choose **Restart Runtime** (**Ctrl-M**) " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "if 'google.colab' in sys.modules:\n", " !pip install ipympl -q\n", " from google.colab import output\n", " output.enable_custom_widget_manager()\n", "\n", "%matplotlib widget\n", "import matplotlib.pylab as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Problem\n", "\n", "An image is stored as a matrix where each element of the matrix is the intensity level of the pixel.\n", "\n", "An empty image can easily be made with numpy (``np.zeros`` function)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 1. 0. 1.]\n", " [1. 0. 1. 0.]\n", " [0. 1. 0. 1.]\n", " [1. 0. 1. 0.]\n", " [0. 1. 0. 1.]\n", " [1. 0. 1. 0.]\n", " [0. 1. 0. 1.]\n", " [1. 0. 1. 0.]]\n" ] } ], "source": [ "image = np.zeros((8,4))\n", "\n", "#make checkerboard (you can ignore how this is done exactly, the result is important)\n", "image[::2, 1::2] = 1\n", "image[1::2, ::2] = 1\n", "print(image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looks ok.\n", "\n", "Let's plot this boring image." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9f7ca024c1d94369be3913779feb27e7", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize = (3,3))\n", "plt.imshow(image, cmap = plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While you probably did not have a problem with the matrix representation of our boring image, you should have one now, because the x-axis was the longer one.\n", "\n", "The problem comes from the different way data can be stored.\n", "\n", "## Data Storage Conventions\n", "\n", "In microscopy, we are used to first go right and then down, like you read a text in English. This may originate in the fact that images from scanning microscopes start at top left, go horizontally first and then down line by line.\n", "\n", "So our perception requires the first index to be horizontally (the column index to be first) and the row index to be the second.\n", "\n", "In mathematics, a matrix index starts with a row index and column indices are second. Exactly opposite to what we are used in microscopy.\n", "\n", "\n", "$\n", "\\begin{bmatrix}\n", " x_{11} & x_{12} & x_{13} & \\dots & x_{1n} \\\\\n", " x_{21} & x_{22} & x_{23} & \\dots & x_{2n} \\\\\n", " \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", " x_{d1} & x_{d2} & x_{d3} & \\dots & x_{dn}\n", "\\end{bmatrix}\n", "$\n", "\n", "So we now have to choose, what kind of internal representation we use. And we need to consider what kind of internal representation the used python-packages choose. You will notice that most examples on the internet get around this problem by using square matrices and images, which leads sometimes to errors in non-square data, and leads often to subtle problems in image analysis.\n", "\n", "As we see numpy uses the mathematical convention and most popular packages are compatible with numpy and use the same convention. If we chose to internally stay with the fast direction as row in the numpy array, it gets confusing with switching x and y directions constantly. Therefore, ``pyTEMlib``, ``pycroscopy``, and ``pyNSID`` are using the storage method of slow axis first storage convention.\n", "\n", "In other words, in the notebooks of this course, we will rotate output and stay with mathematics indexing internally. This makes the computation consistent with all numpy based packages and there are many. The [scipy](https://www.scipy.org/), [scikit-image](https://scikit-image.org/), and [scikit-learn](https://scikit-learn.org/stable/) are the most used (collection of) packages used in this notebook-lecture series. We stay very ``pythonic`` with this convention.\n", "\n", "*Turning* the image can be accomplished by a ``.T`` command of numpy arrays, which is the transposed of a matrix $M^T$. Please note, that numpy is smart enough to leave the stored data alone and just change the way the data are read (look up strides and numpy for more information)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(8, 4)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ec1458f445a14e24ba94213021561f3f", "version_major": 2, "version_minor": 0 }, "image/png": "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57777stPnDgxP3z48PzFF1+cb2try3qkQff000/nI+KobeHChVmPNqiOdc0RkV+1alXWow2qL33pS/0/42eddVb+yiuvzG/cuDHrsQruU5/6VP5rX/ta1mMMuuuuuy5fWVmZHzZsWH78+PH5z3/+8/kXX3wx67EK4uc//3l++vTp+ZKSkvzHP/7x/MqVK7MeqSCeeuqpfETkd+3alfUoyfI5gAAAifEaQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDE/D94LHfH0/CCKwAAAABJRU5ErkJggg==", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(image.shape)\n", "plt.figure()\n", "plt.imshow(image.T, cmap = plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using the ``Pythonic`` Convention\n", "\n", "This convention chosen allows us to address the image content naturally, here we select the pixel at x-axis 4 and y-axis 1\n", "\n", "In the example below, also a line is plotted which needs the ``x`` coordinates first and the ``y`` coordinates (as a list ``[ ... ]`` or numpy ``array``).\n", "\n", "The same coordinates are used to put markers in the image." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "629f0d82c4b940d69940e64cb53600da", "version_major": 2, "version_minor": 0 }, "image/png": "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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "image[4,1] = 2\n", "\n", "plt.figure()\n", "plt.imshow(image.T, cmap = plt.cm.gray)\n", "plt.plot([0,4],[0,1], color='orange')\n", "plt.scatter([0,4],[0,1],color='blue');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding a Scale\n", "\n", "Adding a scale to the image is accomplished by setting the extent parameters in matplotlib. \n", "\n", "### Relative Scale\n", "Generally, it is recommended to use the field of view (length of axis times pixel-size in that direction) as the extent and the starting point is zero. \n", "\n", "The difference to most online code is that we set the field of view (FOV) of the y-axis first, to start the top left at 0 as it is custom in microscopy.\n", "\n", "The pixel size is accurate in that way. Addressing and plotting other parameters on top of the image will be in the scale expressed with the extent parameters.\n", "\n", "However, that there is a slight problem with the origin and the coordinate reference of a pixel, which will be discussed in the next subsection.\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 2., 0., 1., 0.],\n", " [0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 1., 0., 1., 0.]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image.T" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ad830843dd26460c991aebc8290ae1b4", "version_major": 2, "version_minor": 0 }, "image/png": "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0UsvvaTc3NyE6/267zNxzikWi/l6z9dee63q6upUW1sbv0ybNk233HKLamtrNW7cON/u/XSxWExvvfWWwuGwr+f99a9/vdvHOr399tvKycmR5P/f740bNyozM1Pz5s2LH/Pzno8fP65zzknMnEGDBsU/BsbPez8r3rz3ZGDr/BiYn//85+7NN990xcXF7rzzznPvvfee10vrU21tbW7fvn1u3759TpJbv36927dvX/zjbtauXesyMjLcli1bXF1dnbvpppsG/Nvnv//977uMjAxXVVWV8LEJx48fj9/Gj/teuXKl27lzp2toaHBvvPGGW7VqlTvnnHPcjh07nHP+3HNPTn8XsHP+3PsPfvADV1VV5d599123Z88e95d/+ZcuLS0t/neYH/fs3KmP+hk8eLB74IEH3IEDB9zTTz/thg8f7p566qn4bfy6946ODjd27Fi3YsWKbtf5dc+LFi1yX/7yl+MfA7NlyxY3evRot3z58vht/Lr3s0EAfkE/+clPXE5OjhsyZIj76le/Gv+YED95+eWXnaRul0WLFjnnTr2F/r777nOhUMgFg0E3a9YsV1dX5+2ie+lM+5XkNm7cGL+NH/d92223xe/PX/rSl9y1114bjz/n/LnnnnQNQD/uvfOzzs4991wXiUTcwoULXX19ffx6P+6503PPPecmT57sgsGgu+SSS9xjjz2WcL1f9/7rX//aSXL79+/vdp1f9xyNRt3SpUvd2LFj3dChQ924cePcvffe62KxWPw2ft372Qg455wnDz0CAADAE7wGEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwBgCEAAAwJj/D56OF8PwKsi9AAAAAElFTkSuQmCC", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "image[4,1] = 1\n", "\n", "scale_x = scale_y = 10\n", "FOV_x = image.shape[0]* scale_x\n", "FOV_y = image.shape[1]* scale_y\n", "image_extent = [0,FOV_x,FOV_y, 0]\n", "\n", "plt.figure()\n", "plt.imshow(image.T, extent = image_extent, cmap = plt.cm.gray)\n", "\n", "plt.plot(np.array([0,4])*scale_x, np.array([0,1])*scale_y, color='orange')\n", "## while above coordinates are translated from pixel, next we use directly image coordinates\n", "plt.scatter([0,40],[0,10],color='blue');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Correct Absolute Scale\n", "\n", "We can see that in the image above the relative scale, which means the size of the pixel, is accurate and the y-axis is numbered as we are used to. \n", "\n", "Plotting a line from pixel [0,0] to pixel [4,1] however reveals that the origin of the pixels moved from the center to the top left corner. \n", "\n", "This is usually not a problem however it can lead to problems in plotting of parameters with subpixel accuracy, where the origin of the matrix pixel is regarded ``at the center``.\n", "\n", "The correct scale needs to be shifted by half a pixel:\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "809a900ebbdb41939ba572413cd24abf", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKaRJREFUeJzt3X9wVfWd//HXBeQKklwEmtx7TQypooIIi2AhVCTYwph2KUjrbHXXhXHqShdds9gVodMx7FaC7JRdd1Hqj35ZHUuT2QqWzgqafjWBDmYMGMYsWErHoFETUyzkxmBvBvL5/oG5X25+CJLce5Lzfj5m7mjOvYmfwzuH8/Tce5OAc84JAAAAZgzxegEAAABILwIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADA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ucrKStfY2Ji4nTx5MvEYP+736tWr3e7du119fb1766233Jo1a9yQIUPcK6+84pzz5z735ux3ATvnz31/4IEHXGVlpXvnnXdcdXW1+8u//EuXkZGR+DvMj/vsnHNvvPGGGzZsmHvkkUfckSNH3M9//nM3cuRI9/zzzyce49d9P336tLv88svdqlWrut3n130eDAjAQejxxx93eXl5bvjw4e76669P/JgQP3nttdecpG63pUuXOufO/MiEhx9+2IXDYRcMBt1NN93k6urqvF10H/W0v5Lcli1bEo/x437fddddie/nL33pS+5rX/taIv6c8+c+96ZrAPpx3//qr/7KRSIRd9FFF7loNOqWLFniDh48mLjfj/vc6de//rWbPHmyCwaD7pprrnFPPfVU0v1+3feXX37ZSXKHDx/udp9f93kwCDjnnCeXHgEAAOAJXgMIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgDAEIAABgzP8DbncYDhHmqw0AAAAASUVORK5CYII=", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "image[4,1] = 1\n", "\n", "scale_x = scale_y = 10\n", "FOV_x = image.shape[0]* scale_x\n", "FOV_y = image.shape[1]* scale_y\n", "\n", "## Set correct image extent\n", "image_extent = (np.array([0,image.shape[0],image.shape[1], 0])-0.5)*(scale_x,scale_x,scale_y,scale_y)\n", "\n", "plt.figure()\n", "plt.imshow(image.T, extent = image_extent, cmap = plt.cm.gray)\n", "\n", "plt.plot(np.array([0,4])*scale_x, np.array([0,1])*scale_y, color='orange')\n", "## while above coordinates are translated from pixel here we use directly image coordinates\n", "plt.scatter([0,40],[0,10],color='blue'); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "So internally we use the mathematical convention of matrices and all we have to take care of is that the output plot of the image is the right kind around. \n", "\n", "For absolute pixel positions we need to shift the ``grid`` by half a pixel to keep the pixel origin in the center of the pixels.\n", "\n", "The advantage of this approach is that no other effort has to be spent to keep track on what axis is where, which can get cumbersome in multidimensional datasets." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Navigation\n", "- **Back [Installation and Prerequisites](CH1_02-Prerequisites.ipynb))** \n", "- **Next: [Open a (DM) file ](CH1_04-Open_File.ipynb)** \n", "- **Chapter 1: [Introduction](CH1_00-Introduction.ipynb)** \n", "- **List of Content: [Front](../_MSE672_Intro_TEM.ipynb)** \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.5" }, "toc": { "base_numbering": "4", "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }