{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "dda2ce31-2259-4dd0-9388-22c27573e3a7",
   "metadata": {},
   "source": [
    "# w02 section: NumPy and Matplotlib Notebook\n",
    "\n",
    "Liana Merk (2026)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6cb24c5-bfc7-4740-8128-f0c5ba915a55",
   "metadata": {},
   "source": [
    "## our imports"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "949fb258-0048-4f60-9f7b-f0bd28a10d66",
   "metadata": {},
   "source": [
    "Here's the same way we imported them in pset0."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9146a832-d097-4897-a5e1-30eabda3280b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np                    \n",
    "import matplotlib.pyplot as plt\n",
    "rng = np.random.default_rng()\n",
    "\n",
    "%matplotlib inline                     "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7349be22-041e-446c-ab3c-815cb73a3b77",
   "metadata": {},
   "source": [
    "## 1. Numpy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7a0cbd3-78af-4469-95aa-bd97ca7d9df7",
   "metadata": {},
   "source": [
    "A Numpy array is like a list, but optimized for numerical data and able to naturally represent multi-dimensional tables. Numpy makes it easy to slice, reshape, and compute statistics on arrays. Let’s practice indexing and manipulating arrays."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78589ee7-31c8-404a-a520-cbf5fa3abf2a",
   "metadata": {},
   "source": [
    "### Initialize and reshape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3558c24b-d4b6-47a7-b35e-79a064283cd3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# You can make a numpy array with a list\n",
    "my_list = [1, 2, 3]\n",
    "\n",
    "my_array = np.array(my_list)\n",
    "\n",
    "# Note this is identical to doing:\n",
    "# my_array = np.array([1, 2, 3])\n",
    "# Sometimes you already have a list and want it to become a np array\n",
    "my_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "71f34e5a-47ca-4abd-a017-469b81fa2bfa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# or with a multi-dimensional list of lists\n",
    "my_md_list = [[1, 2, 3], [4, 5, 6]]\n",
    "my_md_array = np.array(my_md_list)\n",
    "my_md_array"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8ca0dc2-4a04-4fbf-a337-6821e734b35a",
   "metadata": {},
   "source": [
    "Other ways to initialize arrays without specifying data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "69e03159-a784-4d80-aa30-41636b28a32c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Range:\n",
      " [ 0  1  2  3  4  5  6  7  8  9 10 11]\n",
      "Zeros the same shape we made above:\n",
      " [0 0 0 0 0 0 0 0 0 0 0 0]\n",
      "Evenly spaced values:\n",
      " [ 2.  4.  6.  8. 10.]\n",
      "Zeros 1d:\n",
      " [0. 0.]\n",
      "Zeros 2d:\n",
      " [[0. 0.]\n",
      " [0. 0.]\n",
      " [0. 0.]]\n",
      "Zeros as integer:\n",
      " [0 0 0]\n"
     ]
    }
   ],
   "source": [
    "# If you ever forget what any of these do, you can\n",
    "# run np.arange? in a code cell, as if asking python\n",
    "# a question :)\n",
    "number_line = np.arange(12)\n",
    "\n",
    "print('Range:\\n', number_line)\n",
    "print('Zeros the same shape we made above:\\n', np.zeros_like(number_line))\n",
    "print('Evenly spaced values:\\n', np.linspace(2, 10, 5))\n",
    "print('Zeros 1d:\\n', np.zeros((2)))\n",
    "print('Zeros 2d:\\n', np.zeros((3, 2)))\n",
    "print('Zeros as integer:\\n', np.zeros(3).astype(int))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0835e56-fbb7-4e6b-81be-785665c59d7d",
   "metadata": {},
   "source": [
    "Now, if we start with a 1D array, how can we make it into a matrix of a specific shape?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "a7fe2945-bce3-4fff-8ac8-5ab721de7515",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_line.reshape(3,4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78ba11ef-4338-44f0-a0b1-efcf290d9832",
   "metadata": {},
   "source": [
    "Note that most numpy functions you perform on an array do not function in place, so if we reshape, then call number line again, it is unchanged."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a7c8f282-7c9f-4307-9f41-d2155ad0d795",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_line"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7315b946-62fa-4fff-966e-d299e6bd26d9",
   "metadata": {},
   "source": [
    "This is notably *not* true for `rng.shuffe`, which functions on a column. Let's try it out:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "cc926f63-49f0-4aac-bba9-0a8ea043578b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 4,  5,  6,  7],\n",
       "       [ 8,  9, 10, 11]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_number_line = number_line.reshape(3,4).copy()\n",
    "new_number_line"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "70598950-d2f4-45db-8e0a-4edde90a3a89",
   "metadata": {},
   "outputs": [],
   "source": [
    "rng.shuffle(new_number_line)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "648d6538-9629-441e-90b9-3c7c416fcb8c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3],\n",
       "       [ 8,  9, 10, 11],\n",
       "       [ 4,  5,  6,  7]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "new_number_line"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "377b3946-5f13-492c-91b6-e4bef11f0630",
   "metadata": {},
   "source": [
    "Hmm, it looks like it only shuffled the order of the rows, not each *column*. To shuffle columns we need to iterate through them:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "20bda1a6-d8e4-4885-8f64-fb5fe45ea617",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4,  5,  6, 11],\n",
       "       [ 0,  1,  2,  7],\n",
       "       [ 8,  9, 10,  3]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "real_shuffled_number_line = number_line.reshape(3,4).copy()\n",
    "\n",
    "# For each column:\n",
    "for col in range(real_shuffled_number_line.shape[1]):\n",
    "    rng.shuffle(real_shuffled_number_line[:,col])\n",
    "\n",
    "real_shuffled_number_line"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7ab1057-6cfd-468c-9fba-4e54a857f4f3",
   "metadata": {},
   "source": [
    "### Indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "85e9ffbf-acd3-400b-b4ac-b7b79162337e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [4, 5, 6]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Remind ourselves of our starting position\n",
    "my_md_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "81587619-31f0-41a0-b8b6-b461d75394dd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.int64(6)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Pull out the i=1, j=2 element\n",
    "# Note this is equivalent to my_md_array[1][2]\n",
    "my_md_array[1,2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a034c723-5a1a-4dcc-9381-f52b17ed43f9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1],\n",
       "       [4]])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# pull the first column\n",
    "my_md_array[:, [0]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8ffefbfb-a66e-46c6-a5db-a367f8a3bb0b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2],\n",
       "       [4, 5]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# pull the columns from [0, 2)\n",
    "# Putting the : first tells numpy\n",
    "# to pull out all the rows in those columns\n",
    "my_md_array[:, 0:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c49487e6-8aed-4810-878b-8d1e6afa6358",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4, 5, 6],\n",
       "       [1, 2, 3]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Reversed array, check out what this does when we have a 2d array\n",
    "my_md_array[::-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "406e96f5-8a18-4b4b-8c75-5ad8ef72048c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 2, 1])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Reversed array, here's one slice\n",
    "my_md_array[0][::-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f9336bc-ceb7-4e54-ae9e-c601af9c171e",
   "metadata": {},
   "source": [
    "### Summary Stats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "ad4a6a37-bb58-41e0-ad7b-4cd2392b2a3e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6\n",
      "1\n",
      "21\n",
      "3.5\n",
      "1.707825127659933\n"
     ]
    }
   ],
   "source": [
    "# You can call numpy functions directly on the array\n",
    "# Note this is the same as np.max(my_md_array)\n",
    "print(my_md_array.max())\n",
    "print(my_md_array.min())\n",
    "print(my_md_array.sum())\n",
    "print(my_md_array.mean())\n",
    "print(my_md_array.std())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ebf70bb5-1a57-4ed0-9705-18545175fc81",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False,  True],\n",
       "       [ True,  True,  True]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# what if we are interested in where certain values\n",
    "# are above a threshold, like some MI threshold for example?\n",
    "my_md_array > 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "8c9ef8c2-2fbc-444c-9e80-0e5e158ed0e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 4, 5, 6])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# And now what if we wanted to slice those out?\n",
    "my_md_array[my_md_array > 2]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ac44283-1105-4f8a-bf35-ce752137a036",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "    <b>Numpy exercises</b> \n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "e7716890-6fa1-408a-96bd-f2b30548292c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A:\n",
      " [[0.63696169 0.26978671 0.04097352 0.01652764 0.81327024 0.91275558]\n",
      " [0.60663578 0.72949656 0.54362499 0.93507242 0.81585355 0.0027385 ]\n",
      " [0.85740428 0.03358558 0.72965545 0.17565562 0.86317892 0.54146122]\n",
      " [0.29971189 0.42268722 0.02831967 0.12428328 0.67062441 0.64718951]\n",
      " [0.61538511 0.38367755 0.99720994 0.98083534 0.68554198 0.65045928]]\n",
      "\n",
      "3rd column:\n",
      " [0.04097352 0.54362499 0.72965545 0.02831967 0.99720994]\n",
      "\n",
      "# entries > 0.5 in column 4: 2\n",
      "\n",
      "Shuffled-by-column A_shuffled:\n",
      " [[0.60663578 0.03358558 0.02831967 0.98083534 0.86317892 0.65045928]\n",
      " [0.85740428 0.26978671 0.99720994 0.93507242 0.68554198 0.91275558]\n",
      " [0.29971189 0.38367755 0.72965545 0.12428328 0.81327024 0.64718951]\n",
      " [0.63696169 0.42268722 0.54362499 0.01652764 0.81585355 0.54146122]\n",
      " [0.61538511 0.72949656 0.04097352 0.17565562 0.67062441 0.0027385 ]]\n",
      "\n",
      "A[2, 3] = 0.17565562060255901\n",
      "\n",
      "mean(A) = 0.5343521143851215\n",
      "std(A)  = 0.3168205418304541\n"
     ]
    }
   ],
   "source": [
    "rng = np.random.default_rng(0)\n",
    "\n",
    "# Make a numpy array of random values from 0 to 1 in the size 5 by 6\n",
    "A = rng.random((5, 6))\n",
    "print(\"A:\\n\", A)\n",
    "\n",
    "# Print just the third column (index 2)\n",
    "third_col = A[:, 2]\n",
    "print(\"\\n3rd column:\\n\", third_col)\n",
    "\n",
    "# Count how many entries are more than 0.5 in column 4 (index 3)\n",
    "count_gt_half = np.sum(A[:, 3] > 0.5)\n",
    "print(\"\\n# entries > 0.5 in column 4:\", count_gt_half)\n",
    "\n",
    "# Shuffle each column of your array, save this as another array\n",
    "A_shuffled = A.copy()\n",
    "for j in range(A_shuffled.shape[1]):\n",
    "    rng.shuffle(A_shuffled[:, j])   # shuffles rows within column j\n",
    "print(\"\\nShuffled-by-column A_shuffled:\\n\", A_shuffled)\n",
    "\n",
    "# Pull out the i=2, j=3 element of your array (0-based indexing)\n",
    "elem_2_3 = A[2, 3]\n",
    "print(\"\\nA[2, 3] =\", elem_2_3)\n",
    "\n",
    "# Find the mean and standard deviation of your array\n",
    "mean_A = A.mean()\n",
    "std_A = A.std()\n",
    "print(\"\\nmean(A) =\", mean_A)\n",
    "print(\"std(A)  =\", std_A)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "52cb018c-43f3-45ad-ba5c-68364bb7ab35",
   "metadata": {},
   "source": [
    "## 2. Matplotlib"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1447c51d-9bcf-45e9-a1ae-19c56b035b92",
   "metadata": {},
   "source": [
    "Let's practice building and populating plots! Matplotlib lets you create a figure (the canvas), axes (the actual plotting area), and then populate with markers like lines, dots, histograms, or heatmaps. You have a lot of control over title, labels, legend, and layout."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "b6bf1d96-ece8-427d-9b53-f49ea0f1a567",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAHFCAYAAAAe+pb9AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIUZJREFUeJzt3Q+QVdV9B/DfAsL6J5AKCiiIaFAxVAlQUCxNNYoFq6WTRhI7IlY7UrUKVBIJrQpxwiQZaaIRTKJozKil4J/admugM1FAjAqitcqMVoigggScAP4JCLzOuTO7w7KLAu7u233n85m5ce/Ze/edtyfwvpx/t6pUKpUCACBD7cpdAQCAchGEAIBsCUIAQLYEIQAgW4IQAJAtQQgAyJYgBABkSxACALIlCAEA2RKEgBZz3333RVVV1T6PJ598skVb48MPP4xbbrmlxV8XaD06lLsCQH7uvffeOOWUUxqUn3rqqS0ehKZPn158/ad/+qct+tpA6yAIAS1uwIABMWTIEL95oOwMjQGtThomu/baa4ueo5NPPjkOPfTQIjj9+te/jvSc6B/84AfRt2/fOOKII+Kcc86J//u//6t3f+rdSWFryZIlccYZZxT3H3vssfFP//RPsWvXruKa3/zmN3HUUUcVX6deodrhufHjxxf3pa8feuihBnW7//77i+89//zzLfTbAJpTlafPAy05R+jyyy8vAs3gwYPr/2VUVRXt27ev+7pPnz5FeLnhhhuK829961uxadOmuOyyy2L16tXxt3/7t7Fly5aYPHlydO/ePV588cXiutog9L//+7/RqVOnuPHGG4sw9Z//+Z9x++23xzXXXBM//vGPY/v27cXcoD/7sz+LK664Iq688sri3hSOTjzxxBg0aFAcdthhsXTp0nr1HDp0aPHf5557roV+a0BzMjQGtLjUS7O3FIJ27txZd56CysKFC+Pwww8vzlPIGTNmTPzqV7+KF154oS70/Pa3v42JEycWwecP//AP6+7fvHlz/Nu//VtcdNFFxfnIkSPjo48+ijlz5sQ3v/nNOO644+rCWK9evRrU6brrritCWwpYAwcOLMpSL1A6fv7znzfL7wVoeYbGgBaXhpdqQ0Xt8eyzz9a75uyzz64LQUn//v2L/44aNaouBO1Z/uabb9a7/3Of+1xdCKp1ySWXxO7du2Px4sWfWsdvfOMbcfTRR8edd95ZV3bHHXcUPUZjx4494PcMtE56hIAWl8LLp02WPvLII+udd+zY8RPLf//739crT8Nle+vRo0ddb9GnScNqV111Vdx2223FnKSPP/44/vVf/7UYikvfAyqDHiGgIr377rsNyjZs2FD8t2vXrvv1M/7u7/6uCEBz586Nn/3sZ8XQ3YQJE5q8rkD56BECKtK2bdvi8ccfrzc89uCDD0a7du3iT/7kT4rz2p6dNHeoMT179oyvfe1rMXv27NixY0dceOGFxdwioHIIQkCLSxOb95wYXSut1qpd0v5ZpV6f1KOzdu3aOOmkk6Kmpqbo1UlltWEmzSNKq9PSpOqvfOUrxbBbt27d4vjjj6/7Oddff30MGzas+Dot5wcqiyAEtLi0GqsxKajULmP/rNJ8oDTROS2/f/nll4uQ8+1vf7tuJ+la99xzT0yZMqXoOUor1dLy/LTMf8/l8ikYpb2IUlgCKot9hICKk/YRSnsOpZ6nz+p//ud/4vTTTy9C1dVXX90k9QNaDz1CAI144403iiX5qRcpzRVKO04DlceqMYBGfOc734nzzjsv3n///Zg/f36xyzRQeQyNAQDZKmuPUNrdNS1HPeaYY4qdYh977LFPveepp54qtsWvrq6OE044Ie66664WqSsAUHnKGoQ++OCDYhJiegDi/lizZk2MHj06RowYEStXrizG7tPzgB5++OFmrysAUHlazdBY6hF69NFHi4cq7kt6+nTaIG3VqlV1ZWmX15deeimeeeaZFqopAFAp2tSqsRR20hOk93T++ecX+4CkbfAPOeSQBvekfUHSUSs9cPG9994rNlvb88GNAEDrlfpt0o7xaTpN2iE+yyCUnhO094MU03naoTbtGZKWuO5t5syZDTZQAwDapnXr1kWvXr3yDELJ3r04tSN7++rdmTp1avG06FpbtmwpttdPv8jOnTs3c20BgKawdevW6N27d/FonKbUpoJQ2jK/9unRtTZu3BgdOnTY59Ok00MVax+suKcUggQhAGhbmnpaS5vaUPHMM8+MRYsW1StbuHBhDBkypNH5QQAArTYIpR1bX3zxxeKoXR6fvk5Pi64d1ho3bly9FWJpy/s01JVWjs2dO7eYKJ0eqggA0KaGxpYvXx5nn3123XntXJ7apz+vX7++LhQlffv2jZqampg0aVLxAMQ0c/z222+Pr371q2WpPwDQ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0DbUfm439UBW2YJQraqqqnrn6Q3uXfZp1zdWXisNsU2fPr1Bee/evQ+yxgBAuWzevLkYImvzQahbt27Rvn37Br0/GzdubNDrU6tHjx6NXt+hQ4fo2rVro/dMnTo1Jk+eXHf+u9/9Lvr06VNMyG7KXyQHn/BTKF23bp05W2WmLVoPbdF6aIvWI43oHHfccXHkkUc26c8tWxDq2LFjsQx+0aJF8Zd/+Zd15en8L/7iLxq958wzz4x///d/r1e2cOHCGDJkSBxyyCGN3tOpU6fi2FsKQSZLtx6pLbRH66AtWg9t0Xpoi9ajXbt2lbN8PvXU3H333TF37txiJdikSZOKnpq0Eqy2N2fcuHF116fyN998s7gvXZ/uu+eee+KGG24o47sAANqqss4RGjt2bDHWN2PGjFi/fn0MGDAgampqiqGrJJXtuadQ2ngxfT8FpjvvvDOOOeaYuP322+OrX/1qGd8FANBWlX2y9NVXX10cjbnvvvsalH35y1+OF1544aBfLw2T3XzzzY0Ol9HytEfroS1aD23RemiLym+Lsm6oCACQ9bPGAADKRRACALIlCAEA2RKEAIBsVWQQmj17drHUvrq6uti0ccmSJZ94/VNPPVVcl64/4YQT4q677mqxula6A2mLRx55JM4777w46qijis3L0gaav/zlL1u0vpXuQP9s1Hr66aeLHdwHDhzY7HXMxYG2RXpm4rRp04rtRdKqmRNPPLHYS42Wb4sHHnggTj/99DjssMOKZ1xefvnlxVYwfDaLFy+OCy+8sNgaJz0267HHHvvUe5rk87tUYf7lX/6ldMghh5R+9rOflV599dXS9ddfXzr88MNLb775ZqPXr169unTYYYcV16Xr033p/gULFrR43XNvi/T9733ve6Xnnnuu9Nprr5WmTp1a3P/CCy+0eN0r0YG2R63f/e53pRNOOKE0cuTI0umnn95i9a1kB9MWF110UWnYsGGlRYsWldasWVN69tlnS08//XSL1rsSHWhbLFmypNSuXbvSj370o+LzI51/8YtfLI0ZM6bF615pampqStOmTSs9/PDDaTV76dFHH/3E65vq87vigtDQoUNLEyZMqFd2yimnlG688cZGr//mN79ZfH9PV111VemMM85o1nrm4EDbojGnnnpqafr06c1Qu/wcbHuMHTu29I//+I+lm2++WRAqU1v813/9V6lLly6lzZs3N1UVOMi2+MEPflD8w2BPt99+e6lXr15+p01of4JQU31+V9TQ2I4dO2LFihUxcuTIeuXpfNmyZY3e88wzzzS4/vzzz4/ly5fHxx9/3Kz1rWQH0xZ72717d2zbtq3JH7CXo4Ntj3vvvTfeeOONYhMzytcWjz/+ePFMxe9///tx7LHHxkknnVQ8Wuijjz7SLC3cFsOHD4+33nqreMpB+rx+9913Y8GCBXHBBRdoixbWVJ/fZd9Zuilt2rQpdu3a1eDp9el876fW10rljV2/c+fO4uel8V9api32dtttt8UHH3wQF198sSYoQ3u8/vrrceONNxbzJdL8IMrXFqtXr46lS5cW8yAeffTR4mekHfnfe+8984RauC1SEEpzhNIjon7/+98XnxUXXXRR3HHHHZ+lKhyEpvr8rqgeoVppktWeUmrfu+zTrm+snOZvi1oPPfRQ3HLLLTFv3rw4+uij/epbuD3Sh8Mll1wS06dPL3ofKO+fjdQ7mr6XPoCHDh0ao0ePjlmzZhWPIdIr1LJt8eqrr8Z1110XN910U9Gb9MQTT8SaNWvqHhZOy2qKz++K+mdet27don379g2S/MaNGxukxlo9evRo9Pr0L+CuXbs2a30r2cG0Ra0Ufq644oqYP39+nHvuuc1c0zwcaHukIcnUvbxy5cq49tpr6z6M018y6c/GwoUL45xzzmmx+uf+ZyP9yzYNiXXp0qWurH///kV7pGGafv36NXu9K9HBtMXMmTPjrLPOiilTphTnp512Whx++OExYsSIuPXWW40itKCm+vyuqB6hjh07FsvoFi1aVK88nafuzMakJdp7X5/+kk/j8Yccckiz1reSHUxb1PYEjR8/Ph588EFj7mVsj7R9wcsvvxwvvvhi3ZH+xXvyyScXXw8bNqwpq5eVg/mzkT5433nnnXj//ffryl577bVo165d9OrVq9nrXKkOpi0+/PDD4ve+pxSmEo/ubFlN9vldqtClkPfcc0+xnG7ixInFUsjf/OY3xffTSoBLL720wfK7SZMmFden+yyfL09bPPjgg6UOHTqU7rzzztL69evrjrR8m5Zvj71ZNVa+tti2bVuxKumv/uqvSq+88krpqaeeKvXr16905ZVXNmGt8nSgbXHvvfcWf0/Nnj279MYbb5SWLl1aGjJkSLH6jM8m/f985cqVxZHiyaxZs4qva7cyaK7P74oLQkn6IO3Tp0+pY8eOpUGDBhV/adS67LLLSl/+8pfrXf/kk0+WvvSlLxXXH3/88aU5c+aUodaV6UDaIn2d/s+/95Guo+XbY2+CUHnbYtWqVaVzzz23dOihhxahaPLkyaUPP/ywiWuVpwNti7RcPm3tkdqiZ8+epb/+678uvfXWW2WoeWX51a9+9YmfAc31+V2V/qfpO6wAAFq/ipojBABwIAQhACBbghAAkC1BCADIliAEAGRLEAIAsiUIAQDZEoQAgGwJQgBAtgQhACBbghDQ5v32t7+NHj16xHe/+926smeffbZ4unh6GjXAvnjWGFARampqYsyYMbFs2bI45ZRT4ktf+lJccMEF8cMf/rDcVQNaMUEIqBjXXHNN/Pd//3f80R/9Ubz00kvx/PPPR3V1dbmrBbRighBQMT766KMYMGBArFu3LpYvXx6nnXZauasEtHLmCAEVY/Xq1fHOO+/E7t2748033yx3dYA2QI8QUBF27NgRQ4cOjYEDBxZzhGbNmhUvv/xydO/evdxVA1oxQQioCFOmTIkFCxYUc4OOOOKIOPvss+Nzn/tc/Md//Ee5qwa0YobGgDbvySefLFaH/eIXv4jOnTtHu3btiq+XLl0ac+bMKXf1gFZMjxAAkC09QgBAtgQhACBbghAAkC1BCADIliAEAGRLEAIAsiUIAQDZEoQAgGwJQgBAtgQhACBbghAAkC1BCACIXP0/INpev5C7bxQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# This is us making the figure and axes. Right now, subplots() is empty\n",
    "# But we will use this shortly to make subplots\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "# Label the axes and add a title\n",
    "ax.set(xlabel=\"x\", ylabel=\"y\", title=\"Empty\")\n",
    "\n",
    "# Show!\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c5e68e75-6bce-4639-98af-8bf154a51f7e",
   "metadata": {},
   "source": [
    "Now we can populate it with points."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "84a1ca13-64af-424b-a770-9cc7b8ff7194",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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//aXC82fP1/dunVThQoV7EXrJk2adNnvmTdvnho2bKiQkBBFRkZqzJgx+dJWAK5hAszoexpq+jOt7FmFTZnKBJ3OIxfo0a+W2xGec735y2YbbMoWDdY/u9VySbsBuI5Lw01SUpLq1aun999/P1fb79ixQ126dFGrVq20cuVKDR06VP3799f48ePzvK0AXMuUoszlEn55prW6RmeGnF/WH9TNoxbq4S+X27k6xtLtR/T5oh32/vCe0QorGOjilgPIb34Oh6lIu54ZuZk4caJ69Ohx0W0GDx6sKVOmaOPGjdmP9evXT6tXr9bixYtz9XMoSwHeIeZgor2y909r9tt5NcaN15bVloOJ2n30pG5vFK43elGOAryFx5SlrpQJMB07dszxWKdOnbR8+XKlpqZe8HuSk5Nth5x9A+D5zPJwc6ZhswrKXMbBnATQLCM3waZ8WIj+ryvlKMBXeVS4OXDggMqWzbniwXyelpamw4czL8p3rmHDhtmkl3WLiIjIp9YCyA/mRH8j72ygmQPb2HPZhBcvqHdur6+iIZSjAF8VIA9jyldny6qqnft4liFDhmjgwIHZn5uRGwIO4H2qlS7CSfoAeF64KVeunB29OVtcXJwCAgJUsmTJC35PcHCwvQEAAN/gUWWpZs2aaebMmTkemzFjhho1aqTAQIagAQCAi8PNiRMntGrVKnvLWupt7u/evTu7pHTvvffmWBm1a9cuW2YyK6Y+++wzffrppxo0aJDL9gEAALgXl5alzCqntm3bZn+eNTemb9+++uKLLxQbG5sddIyqVatq2rRpGjBggD744AN78r9Ro0apZ8+eLmk/AABwP25znpv8wnluAADwPF57nhsAAIDLIdwAAACvQrgBAABehXADAAC8CuEGAAB4FcINAADwKoQbAADgVQg3AADAqxBuAACAV/Goq4I7Q9YJmc2ZDgEAgGfIet/OzYUVfC7cJCYm2o8RERGubgoAALiK93FzGYZL8blrS2VkZGj//v0KDQ2Vn5+f01OlCU179uy57HUvPJG3758v7CP75/l4DT2bt79+ebmPJq6YYGMumu3vf+lZNT43cmM6JDw8PE9/hnkxvfWX1hf2zxf2kf3zfLyGns3bX7+82sfLjdhkYUIxAADwKoQbAADgVQg3ThQcHKwXX3zRfvRG3r5/vrCP7J/n4zX0bN7++rnLPvrchGIAAODdGLkBAABehXADAAC8CuEGAAB4FcINAADwKoSbi5g/f766detmz4RozmQ8adKky3bmvHnz1LBhQ4WEhCgyMlJjxow5b5vx48erVq1adha5+Thx4kR5wv5NmDBBHTp0UOnSpe1JmZo1a6ZffvklxzZffPGFfa5zb6dPn5Yn7OPcuXMv2P5NmzZ5xWt43333XXD/ateu7Zav4bBhw9S4cWN7NvEyZcqoR48e2rx5s9cch1ezf552HF7NPnrScXg1++dJx+Ho0aMVHR2dfTI+8/v2888/e8TxR7i5iKSkJNWrV0/vv/9+rjpyx44d6tKli1q1aqWVK1dq6NCh6t+/v30RsyxevFh33HGH+vTpo9WrV9uPt99+u5YuXSp33z/zRmr+U502bZpWrFihtm3b2jdWs69nMwdAbGxsjpv5JXeFK93HLOY/p7PbX716da94DUeOHJljv8yp0UuUKKHevXu75Wto/pN84okntGTJEs2cOVNpaWnq2LGj3W9vOA6vZv887Ti8mn30pOPwavbPk47D8PBwDR8+XMuXL7e3du3aqXv37lq/fr37H39mKTguzXTTxIkTL7nNc88956hZs2aOxx599FFH06ZNsz+//fbbHTfddFOObTp16uS488473X7/LqRWrVqOf/3rX9mff/75546wsDCHO8rNPs6ZM8dud+zYsYtu402vodnez8/PsXPnTo94DePi4ux+zps3zyuPw9zsn6cfh7nZR08+Dq/mNfS047B48eKOTz75xO2PP0ZunMSkUZPYz9apUyebdlNTUy+5zaJFi+SJFyA1FzAzf3Gc7cSJE6pcubJN/F27dj3vL0pP0KBBA5UvX17t27fXnDlzcnzNm17DTz/9VDfeeKN9vTzhNYyPj7cfz/2d85bjMDf75+nH4ZXsoyceh1fzGnrKcZienq7vvvvOjkqZ8pS7H3+EGyc5cOCAypYtm+Mx87kZpjx8+PAltzGPe5q3337b/pKb4cQsNWvWtLXiKVOm6Ntvv7VDqC1atFBMTIw8gfmPdOzYsXYI1cxtqFGjhv2P1ZQCsnjLa2iGuE3t/KGHHsrxuLu+hmZwauDAgWrZsqXq1KnjdcdhbvfPk4/D3O6jpx6HV/MaesJxuHbtWhUpUsTOj+nXr5+dH2Pmybj78edzVwXPS2bC19myTv589uMX2ubcx9ydOdheeuklTZ482U6iy9K0aVN7y2IOxuuuu07vvfeeRo0aJXdn/hM1tyzmrxNTD3/rrbfUunVrr3oNzX+cxYoVsxMgz+aur+GTTz6pNWvWaOHChV55HF7J/nnqcZjbffTU4/BqXkNPOA5r1KihVatW6fjx4zZw9u3b1841uljAcZfjj5EbJylXrtx5yTMuLk4BAQEqWbLkJbc5N8W6s//973968MEH9f3339uh1Evx9/e3Kwlc/RfjX2H+gzm7/d7wGpr/SD777DM7kS8oKMjtX8OnnnrK/gVrShNmiN7bjsMr2T9PPQ6vZh896Ti8mv3zlOMwKChIUVFRatSokV0dZhYxmEnR7n78EW6cxPx1YWbLn23GjBn2FyIwMPCS2zRv3lyewPylaJYxfvPNN7r55ptzdfCaxG+GmT2VqXOf3X5Pfw0N81fX1q1b7ZujO7+G5mebv4ZNaWL27NmqWrWqVx2HV7N/nnYcXu0+espx+Ff2z1OOwwu1JTk5WW5//Dl1erIXSUxMdKxcudLeTDe988479v6uXbvs159//nlHnz59srffvn27o1ChQo4BAwY4NmzY4Pj0008dgYGBjnHjxmVv89tvvzkKFCjgGD58uGPjxo32Y0BAgGPJkiVuv3/ffPONbesHH3zgiI2Nzb4dP348e5uXXnrJMX36dMe2bdvsc91///32e5YuXZrv+3c1+/juu+/alQtbtmxxrFu3zn7dfN/48eO94jXMcs899ziaNGlywed0p9fwsccesytG5s6dm+N37uTJk9nbePJxeDX752nH4dXsoycdh1ezf550HA4ZMsQxf/58x44dOxxr1qxxDB061OHv7++YMWOG2x9/hJvLLEc899a3b1/7dfOxTZs2Ob7H/II3aNDAERQU5KhSpYpj9OjR5z3vDz/84KhRo4Z9wc2SubMPWHfeP3P/UtsbzzzzjKNSpUp2/0uXLu3o2LGjY9GiRQ5XudJ9fP311x3VqlVzhISE2OWOLVu2dEydOtVrXkPDvAkWLFjQMXbs2As+pzu9hhfaN3Mzy2SzePJxeDX752nH4dXsoycdh1f7O+opx+EDDzzgqFy5cnY72rdvnx1s3P348zP/OHcsCAAAwHWYcwMAALwK4QYAAHgVwg0AAPAqhBsAAOBVCDcAAMCrEG4AAIBXIdwAAACvQrgBAABehXADAAC8CuEGAAB4FcINAI936NAhlStXTq+99lr2Y0uXLlVQUJC94jAA38K1pQB4hWnTpqlHjx5atGiRatasqQYNGujmm2/WiBEjXN00APmMcAPAazzxxBP69ddf1bhxY61evVrLli1TSEiIq5sFIJ8RbgB4jVOnTqlOnTras2ePli9frujoaFc3CYALMOcGgNfYvn279u/fr4yMDO3atcvVzQHgIozcAPAKKSkpuv7661W/fn075+add97R2rVrVbZsWVc3DUA+I9wA8ArPPvusxo0bZ+faFClSRG3btlVoaKh++uknVzcNQD6jLAXA482dO9euivrqq69UtGhR+fv72/sLFy7U6NGjXd08APmMkRsAAOBVGLkBAABehXADAAC8CuEGAAB4FcINAADwKoQbAADgVQg3AADAqxBuAACAVyHcAAAAr0K4AQAAXoVwAwAAvArhBgAAeBXCDQAAkDf5fzxzpHLD1vCbAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "# A list of x values, then y values\n",
    "ax.plot([1,2,3], [2,1,4])\n",
    "ax.set(xlabel=\"x\", ylabel=\"y\", title=\"Look, I added a line\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26b5e6e4-5e72-4974-a8c1-998f0aff6c42",
   "metadata": {},
   "source": [
    "You can also make subplots. Be sure to give each subplot a label! Lots of customizability here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "5457a0ea-6b7d-4f98-9c0c-37be74cc8bfa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAHgCAYAAACo8BcpAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASm1JREFUeJzt3Qd8FGX6wPEnBRJaaBKKVKXDUQQUOKSIgiBYDs9yJyIqJ6KeyHGcoCdiw4Jc5BT4oxQBC4cIerQDgYAUpQsqIJwYAoIB0QBRSpL5f55XZ283ZdMWdvfN7+tnDDs7szvvOzPvPPOW2QjHcRwBAACwSGSwNwAAACDQCHAAAIB1CHAAAIB1CHAAAIB1CHAAAIB1CHAAAIB1CHAAAIB1CHAAAIB1CHAAAIB1CHBwQUVERORrSkxMDNs907VrV2nevHlAP3PGjBkmX7755psCr7t48WJ58skn5XzTfabb+N577+W57F133SV169Yt0Od/++23Jh3bt28vwlYi1Hz55Zdmv+Z0bL/99tuSkJAQlO1C+CPAwQW1YcMGn6l3795SqlSpbPMvu+wy9kyAaIAzZsyYkMrPv//97zJ//vwCBziaDgIc+wIc3a8EOAi06IB/IuBH+/btfV5XqVJFIiMjs82H3S699FIJN/qzfadPnzYBOcLbzz//zH4sBqjBQUj5/e9/L82aNfOZ17dvX9P0MXfuXM+8rVu3mnn//ve/PfM+//xzueGGG6RixYoSGxsrrVq1kjfffDNf36uffcUVV0j58uWldOnScskll8jdd9+dZxOR2yyTU5Paxx9/bAI3vSBefPHFptYiIyPD875+lq774osvyrPPPiu1a9c22922bVtZsWJFvrZ72rRp0rJlS7NepUqV5KabbpJdu3b5NAW99tpr5t/eTYBuOvJKd2GcO3dOHnvsMalRo4bExcXJ1VdfLXv27Mmzicrftmj+tmvXzvx74MCBnnR4N719+OGH0qFDB7NuuXLl5JprrjG1gVl98MEH0qJFC4mJiTHf8corr5jP0c/zpq8ffPBBmTx5sjRp0sQs7x5PWuOg26p5rmnUGsepU6eaIMibprFPnz6ycOFCad26tTkW9LP0tXtc6esyZcrI5ZdfLps3b/abt5999pnZLv2urJYsWWLe03xQR48elT/96U9Sq1Yts+16M/Hb3/5WPvroI7/fkd/1li5dKt27d/fsL03H2LFjPe9rWm677TaTB5pu/Xv77bdLUlKSZxlNv57zqlu3bp79qvO1qXfRokVmee9j13X27Fl55plnpHHjxp7t1GNDtz+nffD++++bfaDnSqjVaOI80V8TB4JlwIABTpkyZTyvJ0+erFcI59tvvzWvz50755QrV84pVaqUM2jQIM9yL7zwghMdHe2cOHHCvN69e7dZ7tJLL3VmzpzpLFq0yLn99tvNZ+my/qxfv96JiIhwbrvtNmfx4sXOypUrnenTpzv9+/f3LKOv9bP279/vs+6qVavMfP3r6tKli1O5cmWnRo0azoQJE5z//Oc/zp///Gez3AMPPOBZTj9L59WqVcvp1KmTM2/ePGfu3LlOu3btnBIlSpjt8vf9zz33nJmn6dT0arovueQSp3z58s5XX31lltm3b59z8803m+U2bNjgmU6fPp2vdLvpyU9R4eZF3bp1nT/+8Y9mm9555x2ndu3aToMGDZz09HSf/V6nTp1874PU1FRPHjz++OOedCQnJ5v333rrLfNejx49nAULFjhz5sxx2rRp45QsWdL5+OOPPd+zZMkSJzIy0unataszf/58k99XXHGF2easadTXF198sdOiRQvn7bffNtv0+eefm/fuuusuZ+rUqc7y5cvN9PTTT5tjdMyYMT6foWmsWbOm07x5c5MXmjb9Pt2/TzzxhPPb3/7Wef/99822NGzY0Klatarz008/+c3n1q1bm/WyuuWWW5z4+HhzzqiePXs6VapUcaZMmeIkJiaafNHvfPfdd/1+fn7We+ONN8z+0nzUvPnoo4+ciRMnOkOGDPEso3mr62naVq9ebdbXY0k/++jRo2aZlJQUz3H82muvefarzv/iiy9MOqtVq+Zz7KqMjAzn2muvNWWH5rnuA90m3V9Nmzb1yUPdB9WrVzfnxrRp08xxunHjRr95ADsQ4CCkAhy9IGthpxdrtXbtWvN6xIgRTr169TzLXXPNNU7Hjh09r/XCGBMT4xw4cMDn83v16uWULl3a+fHHH3PdhnHjxpnv8LdMQQMcnffBBx/4LKsBml5ck5KSfAIcDYR+/vlnz3IatFWqVMm5+uqrc/3+H374wVxQe/fu7fMdmn7Nhz/84Q+eeRpU5RSg5Cfd6qqrrnKioqL8LuOdF1m36V//+pcnwMotwMnPtmzatMkso3nhTS92moe/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9/BipUOvdRiyjiDRoa4PPfSQGQqd0yiqZs2amSG2bdu2NaNbdMTMqFGjPEN4vUdR6TB2Heqqw4n1+3UYsA4tz88oLh0aq8OYdT1N9w033GCG13rTEUP33nuv2WYd2ut+Tn7TXdBh4joqxpubTu99kXUUVX63RUfPNG7c2Ayz1s8cPXq0zygkHYIdGxtrjqnu3bs769aty7adOmxZR1zp9+gQ9ueff94M469YsaLPclmH9XvT4caNGjUy+1aHH48dO9YMG8+6jzSNOhIoq5w+282nl156yckPPR51eZ10mLQ3fQzA4MGDzbGhx6uO5NLt1fzyHrmVVUHW0yHvemxoXutIRR2e7f1IBh051q9fP5Ov+ggHHdatw+w1T3T/e0tISDCjJHW0k/exoqPD9DEHFSpU8By7Lj2XdPSdnue6z3X0lx4b9913n7N379489wHsF6H/C3aQBRRH2sdB71T1LldrhhAcOkrIHemktYYA7EATFYBi5Z577jFNgjqyRjsXa18SHbasTWIA7EGAA6BY0U7cWmOmw52134b+zIL2kfJ+7ACA8EcTFQAAsA7DxAEAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcAAAgHUIcJDNk08+KREREXLs2DG/uVO3bl256667CpSD69evN5//448/kvMA8uXLL7805cY333yT7b23335bEhISQjYntSzVbS+ob7/91qy3ffv287JdxQEBDgpt/vz58ve//73AAc6YMWMIcAAUKMDRciMcA5zC0gBH00yAU3jRRVgXxVzr1q0l3Jw7d87cUUVHc+gDyN3PP/8spUqVIovCGDU4yNV3330nt99+u5QvX16qVq0qd999t6SmpubaRJWZmSnPPPOMNGrUyBQMFSpUkBYtWsgrr7xi3tfq1r/+9a/m3/Xq1TOBhk6JiYme9V988UVp3LixxMTESHx8vNx5551y8OBBn+1yHEeee+45qVOnjsTGxkrbtm1l+fLl0rVrVzO59HP182fNmiV/+ctf5OKLLzafu2/fPjl69KgMGTJEmjZtKmXLljXfddVVV8nHH3/s8116x6if8dJLL8kLL7xg0qxp0+/56quvTMD06KOPSo0aNUw+3XTTTZKSksJRBavp+fOnP/1JatWqZc6pKlWq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PVnk/AiVtATKwbMZsm/fPomNjTVNybnR90NdYcsOyo3Qxb4J7/1S0HIjrAKcnLRv315mz56d6/sxMTFmykozMT8Xes30/C4b6oqaFl3fHIiaf0G+GJu0/DoFUyDyI1TSEgiaAr0Lc4+13ITD+VSUsoNyI3Sxb8J3vxS03Aj9UiYP+nMR2nQFAAAQEjU4p06dMtXZLn12zvbt26VSpUpSu3ZtU0WszSIzZ8407yckJJgf92zWrJmcPXvW1NzoU5V1AgAACIkAZ/PmzT4joNz27gEDBsiMGTPMzz8cOHDA874GNcOHDzdBT6lSpUygs2jRIvMbWAAAACER4HTt2tW01+dGgxxvI0aMMBMAAIDVfXAAAACyIsABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAADWIcABAABBczTtqDyz5hk5lnYsoJ9LgAMAAIJmzhdzZOOhjeZvIBHgAACAoJn75Vyfv4FCgAMAAILiu1PfyYbkDebf65PXm9eBQoADAACCYv7u+T6vF+xeELDPjpYgWrNmjbz00kuyZcsWOXz4sMyfP19uvPFGv+usXr1ahg0bJl988YXUqFFDRowYIYMHD75g2wwAAAomOTVZXt34qmQ4GT7zF361UCIiIsy/9W/CJwmy9/hen2WiIqLkoSsekjiJC58AJy0tTVq2bCkDBw6Ufv365bn8/v37pXfv3jJo0CCZPXu2rFu3ToYMGSJVqlTJ1/oAAODCS0pNkvEbxku6ky6REZEmaFGOOJLpZJp/6999P+yTCZ9OMK81GNJ50ZHR0rdRX2lRoUX4BDi9evUyU35NnjxZateuLQkJCeZ1kyZNZPPmzTJu3LhcA5wzZ86YyXXixAnzNzMz00z+6PspKSly8OBBT4QZrhzHkdOnTxcpLbt375bIyEhxzIGo/w8O/W5NTzC3wVXU/AiltASCpkKPL5MmP+dXXudeKChs2aHv5ZX+cGFTWmxLT7ilpWPNjrLu7nVy23u3ycETByUj8381OZESKRESYf56p0eDoLoV6sq7N78rbaq38ZyDYRHgFNSGDRukR48ePvN69uwpU6dOlXPnzkmJEiWyrTN27FgZM2ZMtvlHjx41F3x/NLh5+eWXzYVdD6Rwphed+vXry759+4qUljZt2sjpklGSku4/786nTEckNeOcOHpCBDHujCpfrsj5ESppCRTNCz3O9NzS8yc3J0+elFBX2LJDC+jU1FRznmkAHM5sSott6QnHtNSOri0r+q2QSZsmSWJSome+Bjf1S9f31Oi4utXtJoPbDpZSUaVMeVLQciOsApwjR45I1apVfebp6/T0dDl27JhUr1492zojR440fXZcGgHWqlXLNGvFxflvz9PaDg1u/nxNH2lcp56EM+fXi09s1wwp7HV0yafrZfT0/5PYsxkSHx0rwaK1HRHiSJXoGIkMYs1aRupJ03+sKPkRKmkJlINnM0wQHRsbK/Hx8bkup++HusKWHXrh0RsKXS5cLjzFIS22pSec0/L8xc/L61telyGLh5jXWnOjtp7YKpnySw3OxN4TZVCbQUUqN8IqwFFZm1fc2ojcml1iYmLMlJUeEHkdFG5VuwY3bRo2lnCmF1KtZdALcWEvpLuTvvnlpNL8C/LFWPeNbkOwtyMQ+REqaQkETYGeMyZNfs6vcCiQi1p25Ge5cGBTWmxLTzinpVxsOU8w4+mL8+t/Ki42Llu6CprOsMqVatWqmVocb1ptFR0dLZUrVw7adgEAgPyb+8VcT0dj7XTs/VfnB+Khf2EV4HTo0EGWL1/uM2/ZsmXStm3bHPvfAACA0JJ2Nk2W7FtiRklpMFMxtqIMbDXQ/NXXOn/x3sVmubANcE6dOiXbt283kzsMXP994MABTxv4nXfe6Vlen3eTlJRk2sV37dol06ZNMx2Mhw8fHrQ0AACA/NPg5kzGLyMUu9frLjvv3yk3NblJdgzeYV4rfX/pvqUStgGODvFu3bq1mZQGLvrvJ554wrzWh/+5wY6qV6+eLF68WBITE6VVq1by9NNPy4QJE3gGDgAAYWLl/pXm2Tbje4yXJXcskSplqpj58WXjzeuXe7xs3l+xf0WRvieonYy7du3qd8jyjBkzss3r0qWLbN269TxvGQAAOB9GdhopQ9sPlYaVG5rX7oP+3H44wzoMkz4N+0ip6FJF+p6wG0UFAADCV63ytfJcxg1+ik0nYwAAgPwgwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYhwAEAANYJeoAzceJEqVevnsTGxkqbNm3k448/znXZxMREiYiIyDbt3r37gm4zAAAIbUENcObMmSNDhw6Vxx57TLZt2yZXXnml9OrVSw4cOOB3vT179sjhw4c9U4MGDS7YNgMAgNAX1ABn/Pjxcs8998i9994rTZo0kYSEBKlVq5ZMmjTJ73rx8fFSrVo1zxQVFXXBthkAAIS+6GB98dmzZ2XLli3y6KOP+szv0aOHrF+/3u+6rVu3ltOnT0vTpk3l8ccfl27duuW67JkzZ8zkOnHihPmbmZlpJn8cxzFNYI4u7+j/w5duv6anqOmIjIwMen4EKi2BUNT8CKW0BIKmwpwzmiY/51de514oKGzZoe/llf5wYVNabEtPcUxLZgHTGrQA59ixY5KRkSFVq1b1ma+vjxw5kuM61atXlylTppi+OlrwzJo1S7p372765nTu3DnHdcaOHStjxozJNv/o0aMmSPJH369fv76cLhklKen+lw11mY5IasY5cSRCIiMK9xlR5cuZvA92fgQiLYEQiPwIlbQEiuaFOWdOn5aUlJRclzt58qSEusKWHVoIp6ammgJbA+BwZlNabEtPcUzLyQKWG0ELcFx6t5dTrUlOGjVqZCZXhw4dJDk5WcaNG5drgDNy5EgZNmyYz12YNoNVqVJF4uLi/G7bwYMHZd++fRLbNUPio2MlnGkNgdZFVYmOkchc8jcvGaknTa1b7Nng5kcg0hIIgciPUElLoBw8m/HL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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Subplots can share a y axis, or not\n",
    "fig, axs = plt.subplots(1, 2, sharey=True)\n",
    "\n",
    "# For the subplot, we populate each one individually\n",
    "axs[0].hist([1,2,2,3,3,3], bins=3, edgecolor=\"black\", color = 'pink')\n",
    "axs[1].scatter([1,2,3], [3,2,1], marker = '*', color = 'green', s=120)\n",
    "\n",
    "# Individual titles get populated on the axes\n",
    "axs[0].set(xlabel=\"x\", ylabel=\"y\", title=\"histogram\")\n",
    "axs[1].set(xlabel=\"x\", title=\"scatter plot\")\n",
    "\n",
    "# Figure-wide title gets added to the figure\n",
    "fig.suptitle(\"Two subplots: histogram vs scatter\")\n",
    "\n",
    "# Example legend\n",
    "axs[1].legend(['dots'])\n",
    "\n",
    "# Add a background grid\n",
    "for ax in axs:\n",
    "    ax.grid(alpha=0.3)\n",
    "    \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ed8baa8-a017-43f9-ac69-147423971c1d",
   "metadata": {},
   "source": [
    "Let's explore some other types of plots:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "75a6590f-12fb-414b-b550-31ad49759434",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A shape: (6, 8)\n",
      "A (rounded):\n",
      " [[0.89 0.23 0.62 0.08 0.83 0.79 0.24 0.88]\n",
      " [0.06 0.34 0.15 0.45 0.8  0.23 0.05 0.4 ]\n",
      " [0.2  0.09 0.58 0.3  0.67 0.2  0.94 0.37]\n",
      " [0.11 0.63 0.93 0.44 0.95 0.5  0.43 0.62]\n",
      " [1.   0.95 0.46 0.76 0.5  0.53 0.79 0.41]\n",
      " [0.73 0.71 0.93 0.11 0.73 0.93 0.97 0.01]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Here's something you'll need for the set!\n",
    "# Generate some data and then print so we can see what it is\n",
    "A = rng.random((6, 8))\n",
    "print(\"A shape:\", A.shape)\n",
    "print(\"A (rounded):\\n\", np.round(A, 2))\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "\n",
    "# imshow makes a nice heatmap\n",
    "# Ground the range so we can see from 0 to 1\n",
    "im = ax.imshow(A, aspect=\"auto\", cmap=\"Blues\", vmin=0, vmax=1)\n",
    "\n",
    "# And show the colorbar\n",
    "fig.colorbar(im, ax=ax, label=\"value\")\n",
    "\n",
    "ax.set(title=\"Single heatmap\", xlabel=\"column\", ylabel=\"row\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "7a917fa3-8627-49f1-9542-bbdab9d1b4cb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGiCAYAAAA1LsZRAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGxpJREFUeJzt3Q1sVfX9+PFPKRSoCk5RhAkVn1GmTpgMFJ0Pw6AhM3uQxU1QMZFMRWAYhyw+EDemiU6dA2WKzkQ34nxiCRPIL05QNBNEZ4RMNxlUBxJQKYppBe4/5yzt39LCKN72C72vV3K23tNze09Prtx3v+eprFAoFAIAIJEOqV4YACAjRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgH0rRhYtWhQjR46M3r17R1lZWTzzzDP/8zkvvPBCDBw4MLp06RJHHnlk3H///Xu6vgBAqcfIp59+GieffHLcd999u7X8qlWr4oILLohhw4bF8uXL48Ybb4zx48fHk08+uSfrCwC0M2Vf5kZ52cjI008/HRdddNFOl7nhhhti7ty5sXLlyoZ548aNizfeeCNefvnlPX1pAKCd6NjaL5AFx/DhwxvNO//88+Ohhx6Kzz//PDp16tTkObW1tflUb/v27fHhhx/GwQcfnAcQALD3y8Y7Nm/enB/a0aFDh3Qxsm7duujZs2ejednjrVu3xoYNG6JXr15NnjN9+vS49dZbW3vVAIA2UF1dHYcffni6GMnsOJpRv2doZ6McU6ZMiUmTJjU83rRpU/Tt2zf/Zbp169bKawsApWFL3dY47Rf/l3/9t6nnRmVFcbOgpqYm+vTpEwcccMAul2v1GDnssMPy0ZEvWr9+fXTs2DHf7dKczp0759OOshARIwBQHB3rtkaHzpX519nna7FjpN7/OsSi1a8zMmTIkFi4cGGjeQsWLIhBgwY1e7wIAFBaWhwjn3zySbz++uv5VH/qbvb1mjVrGnaxjB49utGZM6tXr853u2Rn1MyePTs/eHXy5MnF/D0AgH1Ui8djli5dGmeffXbD4/pjO8aMGROPPPJIrF27tiFMMv369Yt58+bFxIkT47e//W1+RO29994b3/ve94r1OwAApRQj3/rWtxoOQG1OFiQ7Ouuss+K1115r+doBAO2ee9MAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApDqmfXkAaF6hUIjPPt9m87SiLXV7x/YVIwDslSHy/ftfjmWrP0q9KrQBu2kA2OtkIyJCpO0MqvpKdO1UHqkYGQFgr7b05+dFZUW6D8pS0LVTeZSVlSV7fTECwF4tC5HKCh9X7ZndNABAUmIEAEhKjAAASYkRACApMQIAJCVGAIB9L0ZmzJgR/fr1iy5dusTAgQNj8eLFu1z+sccei5NPPjkqKyujV69ecfnll8fGjRv3dJ0BgFKOkTlz5sSECRNi6tSpsXz58hg2bFiMGDEi1qxZ0+zyL774YowePTrGjh0bb731VjzxxBPx6quvxpVXXlmM9QcASi1G7rrrrjwsspjo379/3H333dGnT5+YOXNms8u/8sorccQRR8T48ePz0ZQzzjgjrrrqqli6dGkx1h8AKKUYqauri2XLlsXw4cMbzc8eL1mypNnnDB06NN57772YN29efuOjDz74IP70pz/FhRdeuNPXqa2tjZqamkYTANA+tShGNmzYENu2bYuePXs2mp89Xrdu3U5jJDtmZNSoUVFRURGHHXZYHHjggfGb3/xmp68zffr06N69e8OUjbwAAO3THh3AuuPNdLIRj53dYGfFihX5LpqbbropH1V57rnnYtWqVTFu3Lid/vwpU6bEpk2bGqbq6uo9WU0AYB/QojsP9ejRI8rLy5uMgqxfv77JaMkXRzlOP/30uP766/PHJ510Uuy33375ga+33XZbfnbNjjp37pxPAED716KRkWw3S3Yq78KFCxvNzx5nu2Oas2XLlujQofHLZEFTP6ICAJS2Fu+mmTRpUjz44IMxe/bsWLlyZUycODE/rbd+t0u2iyU7lbfeyJEj46mnnsrPtnn33XfjpZdeynfbnHbaadG7d+/i/jYAQPveTZPJDkTNLlg2bdq0WLt2bQwYMCA/U6aqqir/fjbvi9ccueyyy2Lz5s1x3333xU9/+tP84NVzzjknbr/99uL+JgDAPqmssA/sK8lO7c3OqskOZu3WrVvq1QGglW2p2xon3DQ//3rFtPOjsqLFfzuzD31+uzcNAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkOqZ9eYB9T6FQiM8+35Z6Ndq1LXW2bykRIwAtDJHv3/9yLFv9ke0GRWI3DUALZCMiQqTtDKr6SnTtVN6Gr0gKRkYA9tDSn58XlRU+KFtTFiJlZWWt+hqkJ0YA9lAWIpUV/hmFL8tuGgAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIA7HsxMmPGjOjXr1906dIlBg4cGIsXL97l8rW1tTF16tSoqqqKzp07x1FHHRWzZ8/e03UGANqRji19wpw5c2LChAl5kJx++unxwAMPxIgRI2LFihXRt2/fZp9z8cUXxwcffBAPPfRQHH300bF+/frYunVrMdYfACi1GLnrrrti7NixceWVV+aP77777pg/f37MnDkzpk+f3mT55557Ll544YV4991346CDDsrnHXHEEcVYdwCg1HbT1NXVxbJly2L48OGN5mePlyxZ0uxz5s6dG4MGDYo77rgjvvrVr8axxx4bkydPjs8++2yXu3VqamoaTQBA+9SikZENGzbEtm3bomfPno3mZ4/XrVvX7HOyEZEXX3wxP77k6aefzn/GT37yk/jwww93etxINsJy6623tmTVAIBSOoC1rKys0eNCodBkXr3t27fn33vsscfitNNOiwsuuCDf1fPII4/sdHRkypQpsWnTpoapurp6T1YTAGhvIyM9evSI8vLyJqMg2QGpO46W1OvVq1e+e6Z79+4N8/r3758HzHvvvRfHHHNMk+dkZ9xkEwDQ/rVoZKSioiI/lXfhwoWN5mePhw4d2uxzsjNu/vOf/8Qnn3zSMO/tt9+ODh06xOGHH76n6w0AlOpumkmTJsWDDz6YH++xcuXKmDhxYqxZsybGjRvXsItl9OjRDctfcsklcfDBB8fll1+en/67aNGiuP766+OKK66Irl27Fve3AQDa/6m9o0aNio0bN8a0adNi7dq1MWDAgJg3b15+QbNMNi+Lk3r7779/PnJy7bXX5mfVZGGSXXfktttuK+5vAgDsk8oK2cEbe7ns1N7smJPsYNZu3bqlXh2ghG2p2xon3DQ//3rFtPOjsqLFf9NByajZzc9v96YBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEiqY9qXB4qpUCjEZ59vs1Fb0ZY62xeKTYxAOwqR79//cixb/VHqVQFoEbtpoJ3IRkSESNsZVPWV6NqpvA1fEdovIyPQDi39+XlRWeGDsjVlIVJWVtaqrwGlQoxAO5SFSGWF/7yBfYPdNABAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAsO/FyIwZM6Jfv37RpUuXGDhwYCxevHi3nvfSSy9Fx44d45RTTtmTlwUA2qEWx8icOXNiwoQJMXXq1Fi+fHkMGzYsRowYEWvWrNnl8zZt2hSjR4+Oc88998usLwBQ6jFy1113xdixY+PKK6+M/v37x9133x19+vSJmTNn7vJ5V111VVxyySUxZMiQ//katbW1UVNT02gCANqnFsVIXV1dLFu2LIYPH95ofvZ4yZIlO33eww8/HP/617/i5ptv3q3XmT59enTv3r1hymIHAGifWhQjGzZsiG3btkXPnj0bzc8er1u3rtnnvPPOO/Gzn/0sHnvssfx4kd0xZcqUfLdO/VRdXd2S1QQA9iG7Vwc7KCsra/S4UCg0mZfJwiXbNXPrrbfGscceu9s/v3PnzvkEALR/LYqRHj16RHl5eZNRkPXr1zcZLcls3rw5li5dmh/oes011+Tztm/fnsdLNkqyYMGCOOecc77s7wAAlMpumoqKivxU3oULFzaanz0eOnRok+W7desWb775Zrz++usN07hx4+K4447Lvx48ePCX/w0AgNLaTTNp0qS49NJLY9CgQfmZMbNmzcpP680io/54j/fffz8effTR6NChQwwYMKDR8w899ND8+iQ7zgcASlOLY2TUqFGxcePGmDZtWqxduzaPinnz5kVVVVX+/Wze/7rmCABAvbJCdgDHXi67zkh2im92Zk226wdoakvd1jjhpvn51yumnR+VFXt0fDpAm39+uzcNAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJNUx7ctTKgqFQnz2+bbUq9GubamzfYF9kxihTULk+/e/HMtWf2RrA9CE3TS0umxERIi0nUFVX4muncrb8BUBvhwjI7SppT8/LyorfFC2pixEysrKWvU1AIpJjNCmshCprPC2A+D/s5sGAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAYN+LkRkzZkS/fv2iS5cuMXDgwFi8ePFOl33qqafi29/+dhxyyCHRrVu3GDJkSMyfP//LrDMAUMoxMmfOnJgwYUJMnTo1li9fHsOGDYsRI0bEmjVrml1+0aJFeYzMmzcvli1bFmeffXaMHDkyfy4AQFmhUCi0ZDMMHjw4Tj311Jg5c2bDvP79+8dFF10U06dP362fceKJJ8aoUaPipptuavb7tbW1+VSvpqYm+vTpE5s2bcpHV9i3bKnbGifc9N/RsBXTzo/Kio6pVwmANpB9fnfv3v1/fn63aGSkrq4uH90YPnx4o/nZ4yVLluzWz9i+fXts3rw5DjrooJ0uk0VNtvL1UxYiAED71KIY2bBhQ2zbti169uzZaH72eN26dbv1M+6888749NNP4+KLL97pMlOmTMkrqn6qrq5uyWoCAPuQPRovLysra/Q429Oz47zm/OEPf4hbbrklnn322Tj00EN3ulznzp3zCQBo/1oUIz169Ijy8vImoyDr169vMlrS3IGvY8eOjSeeeCLOO++8PVtbAKC0d9NUVFTkp/IuXLiw0fzs8dChQ3c5InLZZZfF448/HhdeeOGery0A0O60eDfNpEmT4tJLL41Bgwbl1wyZNWtWflrvuHHjGo73eP/99+PRRx9tCJHRo0fHPffcE9/85jcbRlW6du2aH5wKAJS2FsdIdkruxo0bY9q0abF27doYMGBAfg2Rqqqq/PvZvC9ec+SBBx6IrVu3xtVXX51P9caMGROPPPJIsX4PAKBUrjOyN5+nzN7JdUYASlNNa1xnBACg2MQIAJCUGAEAkirpm4Rkh8t89vm21KvR7m2ps40B2LmOpRwi37//5Vi2+qPUqwIAJa1kd9NkIyJCpG0NqvpKdO1U3savCsDermRHRr5o6c/Pi8oKH5KtLQuR3bmHEQClRYxE5CFSWWFTAEAKJbubBgDYO4gRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAwL4XIzNmzIh+/fpFly5dYuDAgbF48eJdLv/CCy/ky2XLH3nkkXH//ffv6foCAKUeI3PmzIkJEybE1KlTY/ny5TFs2LAYMWJErFmzptnlV61aFRdccEG+XLb8jTfeGOPHj48nn3yyGOsPAOzjygqFQqElTxg8eHCceuqpMXPmzIZ5/fv3j4suuiimT5/eZPkbbrgh5s6dGytXrmyYN27cuHjjjTfi5ZdfbvY1amtr86nepk2bom/fvlFdXR3dunWLYthStzVO+8X/5V//beq5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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Another thing you'll need for the set!!\n",
    "fig, ax = plt.subplots()\n",
    "# The ECDF function needs a 1d array, so we use np.flatten()\n",
    "ax.ecdf(my_md_array.flatten())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a72e7d3-6c61-4ba9-b81a-f58260dbeee5",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "    <b>Matplotlib exercise:</b> Make a figure with 2 subplots:\n",
    "    a) a normal heatmap\n",
    "    b) a shuffled heatmap\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "dd665548-3274-48e8-880a-35e72c83a494",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwsAAAE6CAYAAABZH86bAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAO+FJREFUeJzt3Ql8E9X2wPGTtLRlreyglMpTELACTxYpi6gsPkCeuygKiKBWUARUpPKeIOqrPhVxAWRHVBRRRH2igBs7KgguwN8VoSi1FpXSshRK/p9zNTVpkyYtbWfa+X39jCWTSTqZpDdz5tx7rsvj8XgEAAAAAPJx518BAAAAAAQLAAAAAIIiswAAAAAgIIIFAAAAAAERLAAAAAAIiGABAAAAQEAECwAAAAACIlgAAAAAEBDBAgAAAICACBZgqY0bN8qVV14pDRs2lKioKGnQoIFcccUVsmHDhrCfY+LEieJyuYr1+z/88EPzWP1Zms477zyzAAAAlCcEC7DMU089JZ07d5Y9e/bIf//7X3n33Xfl0UcflR9//FG6dOkiTz/9dFjPM2zYsCIFF77OPvts81j9CcA+PvroI7n00kulcePGEh0dLfXr15fExES54447/LY79dRT5aKLLirR352TkyNJSUnmIkZERIS0adPGrP/111/l6quvlnr16pmLDJdccolZr//WixYl5YcffjDPOX/+/LC2X7BggdStW1cOHDhwQr830MWTZcuWBX1tuu2tt94a8nn1dei2+rrs6Prrrzefo/Lu6NGjctppp8mUKVOs3hVUMJFW7wCcad26dTJq1Cjp06ePvPbaaxIZ+ddHUb+M9STh9ttvl7///e8moAjk4MGDUqVKFWnUqJFZiqNGjRrSsWPHYr8OACXvrbfekn/+858mG6cXEvSkfe/evbJp0yZ56aWX5LHHHivVwz59+nSZMWOGuaDRtm1bqVatmll///33m/Zq7ty55qSsVq1aYjVtB++55x65++67pXr16if0XN6LJy1btvQLFqZOnXpCwVDfvn3N8+r7iNJTqVIluffee2X06NEycOBAqV27NocbJYLMAiyRkpJirjTpl7JvoKD09rRp08z9Dz30kF9Xo08//dR0U6pZs6b5sva9z9eRI0fMFUjt1qQBxbnnniubN282V4/0KlJhV9L0fj05+Pbbb00wo/+Oi4szz6fP6+u+++6Tc845x5w0aOChX7Zz5swRj8dTKscNcAINEJo0aSLLly83Fw+6detmfmrmcffu3aX++7/88kupXLmyuWqu2Yyzzjorb722O9dee625yNCsWTOx2rPPPiv79u0zGdYT5b14oj9LkmY99Hk1Q4TSdc0115jvNA12gZJCsIAyl5ubKx988IG0a9cuaEZAT871it77779vtve67LLL5PTTT5fFixfLM888E/R3DBkyxKRi9efrr78ul19+uclW/P7772Gnc/XKZvfu3c3jb7jhBnn88cfl4Ycf9ttO0+o333yzvPzyy7JkyRKzf7fddpu5AgmgePTkt06dOgUuJCi3O/DX1jvvvGOCdT3Jb968ubn6H87YpvxdZPTfs2fPlkOHDpl/e7sD6U/tKrljx4689YWNdUpLSzNtg7ZxOh5Lgx+9uHDs2DG/7X766Se56qqrTFYgNjZW+vfvbx4bLr3g0q9fPznppJPy1uk4sDPPPNNvO91G91nbTi+9+KLr3nzzzYAXT/TCiWYVvMfFu+TvTvTcc89JixYtzIWZ1q1by//+979Cj7HSrFFCQoJ88skn0rVrV/PYv/3tb+YC0fHjx0O+bt1GMz/aRUzfc339GpC88cYbftto4KmfBw1UtPvYoEGDTNfX4nYDy9/lzPu5+vzzz81x1/dQLx6NGTPGvNdfffWV/OMf/zDvr16s0v3x5T3mL774oowfP15OPvlkE6z16NHDPNbXli1bTJc7fR36enRbzdr4vh79rOlnaObMmVy0QomhGxLKXEZGhkmd65dnYfT+jz/+2Jw4eA0ePNh84RZm+/btpuHVtLxmMFTPnj1Nn2e96hJun2X9Pdr4Kw0atAvEwoULTZrXa968eX5fTPoFqFmFJ554Qv79738Xe+A14GR6NV9P2EeOHGmu4msQoF0sgvnss89M5m/cuHHm71wfO3ToUHNhQbOKRaHdZTTY1wsaerHC2xbp+uHDh8v+/fvlhRdeMOt9u+v40pP9Dh06mMBG2wvNRujjH3jgAXMi6m03NCDRk0INGLSt0kyFdsHSk71w6EniF198Ibfccovfen3OV155xXTd0q4/etK6atUqc1K9cuXKvHZNgx8NyIIVX9A2LDs72zyX77gw3+5Eur96wj9p0iSThdWTYb0woye6evJfGD1O+v7qezdhwgTTxSs5OdmcBOtJfWE0kHn+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",
      "text/plain": [
       "<Figure size 1000x300 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rng = np.random.default_rng(0)\n",
    "A = rng.random((6, 8))\n",
    "\n",
    "# make a shuffled copy (shuffle within each column)\n",
    "A_shuf = A.copy()\n",
    "for j in range(A_shuf.shape[1]):\n",
    "    rng.shuffle(A_shuf[:, j])\n",
    "\n",
    "fig, ax = plt.subplots(1, 2, figsize=(10, 3), sharey=True)\n",
    "\n",
    "im0 = ax[0].imshow(A, aspect=\"auto\", cmap=\"Blues\", vmin=0, vmax=1)\n",
    "ax[0].set_title(\"Original\")\n",
    "ax[0].set_xlabel(\"column\")\n",
    "ax[0].set_ylabel(\"row\")\n",
    "\n",
    "im1 = ax[1].imshow(A_shuf, aspect=\"auto\", cmap=\"Blues\", vmin=0, vmax=1)\n",
    "ax[1].set_title(\"Shuffled (within columns)\")\n",
    "ax[1].set_xlabel(\"column\")\n",
    "\n",
    "fig.colorbar(im1, ax=ax, label=\"value\")  # one colorbar for both\n",
    "plt.show()"
   ]
  }
 ],
 "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.14.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
