Last active
September 29, 2025 18:01
-
-
Save phobson/7916777 to your computer and use it in GitHub Desktop.
One way to shift (recenter) a colormap in matplotlib
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "metadata": { | |
| "name": "" | |
| }, | |
| "nbformat": 3, | |
| "nbformat_minor": 0, | |
| "worksheets": [ | |
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "%matplotlib inline\n", | |
| "%config InlineBackend.figure_format = 'png'\n", | |
| "%config InlineBackend.dpi = 300\n", | |
| "import numpy as np\n", | |
| "import matplotlib\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "from mpl_toolkits.axes_grid1 import AxesGrid\n", | |
| "\n", | |
| "def shiftedColorMap(cmap, start=0, midpoint=0.5, stop=1.0, name='shiftedcmap'):\n", | |
| " '''\n", | |
| " Function to offset the \"center\" of a colormap. Useful for\n", | |
| " data with a negative min and positive max and you want the\n", | |
| " middle of the colormap's dynamic range to be at zero\n", | |
| " \n", | |
| " Input\n", | |
| " -----\n", | |
| " cmap : The matplotlib colormap to be altered\n", | |
| " start : Offset from lowest point in the colormap's range.\n", | |
| " Defaults to 0.0 (no lower ofset). Should be between\n", | |
| " 0.0 and 1.0.\n", | |
| " midpoint : The new center of the colormap. Defaults to \n", | |
| " 0.5 (no shift). Should be between 0.0 and 1.0. In\n", | |
| " general, this should be 1 - vmax/(vmax + abs(vmin))\n", | |
| " For example if your data range from -15.0 to +5.0 and\n", | |
| " you want the center of the colormap at 0.0, `midpoint`\n", | |
| " should be set to 1 - 5/(5 + 15)) or 0.75\n", | |
| " stop : Offset from highets point in the colormap's range.\n", | |
| " Defaults to 1.0 (no upper ofset). Should be between\n", | |
| " 0.0 and 1.0.\n", | |
| " '''\n", | |
| " cdict = {\n", | |
| " 'red': [],\n", | |
| " 'green': [],\n", | |
| " 'blue': [],\n", | |
| " 'alpha': []\n", | |
| " }\n", | |
| " \n", | |
| " # regular index to compute the colors\n", | |
| " reg_index = np.linspace(start, stop, 257)\n", | |
| "\n", | |
| " # shifted index to match the data\n", | |
| " shift_index = np.hstack([\n", | |
| " np.linspace(0.0, midpoint, 128, endpoint=False), \n", | |
| " np.linspace(midpoint, 1.0, 129, endpoint=True)\n", | |
| " ])\n", | |
| " \n", | |
| " for ri, si in zip(reg_index, shift_index):\n", | |
| " r, g, b, a = cmap(ri)\n", | |
| "\n", | |
| " cdict['red'].append((si, r, r))\n", | |
| " cdict['green'].append((si, g, g))\n", | |
| " cdict['blue'].append((si, b, b))\n", | |
| " cdict['alpha'].append((si, a, a))\n", | |
| " \n", | |
| " newcmap = matplotlib.colors.LinearSegmentedColormap(name, cdict)\n", | |
| " plt.register_cmap(cmap=newcmap)\n", | |
| "\n", | |
| " return newcmap" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [], | |
| "prompt_number": 42 | |
| }, | |
| { | |
| "cell_type": "code", | |
| "collapsed": false, | |
| "input": [ | |
| "N = 10\n", | |
| "fs = 11\n", | |
| "biased_data = np.random.random_integers(low=-15, high=5, size=(N,N))\n", | |
| "\n", | |
| "orig_cmap = matplotlib.cm.coolwarm\n", | |
| "shifted_cmap = shiftedColorMap(orig_cmap, midpoint=0.75, name='shifted')\n", | |
| "shrunk_cmap = shiftedColorMap(orig_cmap, start=0.15, midpoint=0.75, stop=0.85, name='shrunk')\n", | |
| "\n", | |
| "fig = plt.figure(figsize=(10,10))\n", | |
| "grid = AxesGrid(fig, 111, nrows_ncols=(2, 2), axes_pad=0.5,\n", | |
| " label_mode=\"1\", share_all=True,\n", | |
| " cbar_location=\"right\", cbar_mode=\"each\",\n", | |
| " cbar_size=\"7%\", cbar_pad=\"2%\")\n", | |
| "\n", | |
| "# normal cmap\n", | |
| "im0 = grid[0].pcolor(biased_data, cmap=orig_cmap)\n", | |
| "grid.cbar_axes[0].colorbar(im0)\n", | |
| "grid[0].set_title('Default behavior (hard to see bias)', fontsize=fs)\n", | |
| "\n", | |
| "im1 = grid[1].pcolor(biased_data, cmap=orig_cmap, vmax=15, vmin=-15)\n", | |
| "grid.cbar_axes[1].colorbar(im1)\n", | |
| "grid[1].set_title('Centered zero manually,\\nbut lost upper end of dynamic range', fontsize=fs)\n", | |
| "\n", | |
| "im2 = grid[2].pcolor(biased_data, cmap=shifted_cmap)\n", | |
| "grid.cbar_axes[2].colorbar(im2)\n", | |
| "grid[2].set_title('Recentered cmap with function', fontsize=fs)\n", | |
| "\n", | |
| "im3 = grid[3].pcolor(biased_data, cmap=shrunk_cmap)\n", | |
| "grid.cbar_axes[3].colorbar(im3)\n", | |
| "grid[3].set_title('Recentered cmap with function\\nand shrunk range', fontsize=fs)\n", | |
| "\n", | |
| "for ax in grid:\n", | |
| " ax.set_xlim(left=0, right=N)\n", | |
| " ax.set_ylim(bottom=0, top=N)\n", | |
| " ax.set_yticks([])\n", | |
| " ax.set_xticks([])" | |
| ], | |
| "language": "python", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "metadata": {}, | |
| "output_type": "display_data", | |
| "png": "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\nndra2tTf369Lly5pYGCgGj8Igupo26FDh+r+TGqpPF+J19XVpaGhoeooWSX+6vfUOhcvetGLVrQh\nCAINDg5qYGBAXV1d6urqUjKZrPtzrddG7DyWYgAAtIRMJqOLFy/qgQce2OmmAOti5AoA0DIYrUEr\nYOQKAACgiRi5AgAAaCJzxRX7du0s9u0CbNtsPtrK936rcrlcdeVyIIrMFVfS0hoylT+FQkHpdNr5\nMcvlssbHx53EbqU5Bv39/cpkMpd9Ps6fP1+9XblR5XK5erv4wMBAyxSoQJRFIR9FoQ3AekwWV8ux\nbxf7drFvF7BSre//et+BjfJRuVxWMpmsLh9QKBTqfu9r5cHVq5Jv9H1fPlV4bGxszQhZrWNs9TNX\nXp9IJDQ0NFS9AlIvZwPLmV+hPZ/Pa//+/Wpra9P09LSmpqaqO5APDQ0pk8mos7NTMzMzKpVKWlhY\n0N69e5VIJGq+tqenR2fOnFG5XFZbW5tSqZQKhYIefPBBzczM6MSJE3WPs3fvXp05c0bT09O65ZZb\n6r5ufn5ely5dWtGeWsPruVxuTbsLhYLOnz+vubk5hWGozs5O5fN53XrrrUqlUpqamlI8Hle5XK6u\nEt3V1aXZ2VlJUjab1dzcXPWzZTKZNVtL5PN5dXd3q1wuV1dOPnfunH78x39c0lKvMpPJaHp6uno+\nZmZm1pyz/v7+FZ9nYmJC2WxWJ06cWLNFRWUNmDAMa57/+fn5Fedi3759KhaL1TZU4uVyORUKhepn\nTyQSKhQK6uzsrBl3dRuBVlf5Li7//s/NzUlSze/A+fPnN8xHlRXQz507p0KhoFwup5GRkZrf+8px\nKnlQqr1+03rf98rrx8fHNTc3p9OnT6/5nKtz7VY+88WLFzU3N7fiM99+++1rcnY6nV6TIwHJaHHF\nvl3s28W+XUBt3d3dNb//Uu3v6dTU1Ib5KJlMqr+/Xx0dHUomk9VOVa14HR0dK/JgPet936VnOoIn\nT56s+f7lxzhw4MCWPnM+n9fo6Gj1Mw8MDCgMw7q5HVjN5GXB5XOuzp07p5GREUnPFA9TU1OamppS\nPp+vDhnX27dr+WuPHDmyqS0I6r1XUs19uzZqj4t9u9LptGKxmG6//XYdOHCgZrx6+3ZNTU1V9+3q\n7++P7L5dm3kdK5HAN+t9/+vZKB91d3drdnZWvb291ZXVgyCo+71f/fzlfA+7urp04cIFjY2N1dxG\nZvkxGv3MFevldmA5k8XVcuzbtRb7drFvF/xV6/u/3u//ZvLRkSNHNDk5qcHBQU1OTq47T7SW5SNA\nm/m+S0sF3d69ezUyMlIdWavncj5zJZ8sb89mcztgrrhi3y727WLfLqC+Wt//w4cPr/vd2igfjY6O\n6tSpU9UbZ3K5XPX9q+PVer4yt3Gz3/fl/33ggQd0+vRpffrTn17xmuXvu5zPLC1NMRkaGqpeBlwv\ntwPLsUI7qti3C83Q2dlZvUzc29urEydO7HCLgK0pFAoql8saHByUtFT05fN57dmzZ2cbhqbYjhxl\nckI7Lh+jNWhEsVhUMpmsefcW0CoSiYTS6bTuv//+6g1PFFY2bFeOYuQKQNNU7sbct2+fpKV5e5W1\n5gBgp21XjqK4AjxRWdenERv13mdmZjQ7O6uDBw9qdnZWyWSyuiYQAKzHUo5at7j66bveqccfW3vH\nVbPs/ui7ncXeDgt9P+E0/hcuPOE0fv9iwWl813Z1vdRp/Pd//nlO4yduvsZp/Je/5Hrddddd1ce3\nx+L6thrrS934s2/Q7t27q4/7+vrU19dX9/WVFb0r6wg12533HNe3HOaoGy6ecxZ7O3z9xW4Xwf3q\nN690Gv/fPv1xp/Fd+871L3Qa/1PfuNFp/K4XPOk0/vd1PX9Fjnpz78v02JPfaSjmNT/06kjkqHXn\nXD3+2IKG7nh7Uw+43Pf+y0edxd4O/3T4bU7jv/eDl5zGH3uqtRfJfNYPv95p/C+duclp/J95Y3zj\nFzXgQ9mVezvu2hXT6JW767x6cz61e7eOHj1a99+PHz+ujo4ODQ8PVxd7dFVYSdK3HlvQT975q87i\n957deGmTKPvbH3mr0/if/ILbDsLPfecdTuO79vj3/oDT+L//d690Gv81PY85jf+BP33Xise7YoF+\nvW/jNcjWk+mMRo5iQjvgieCKQLuu2eX0GCMjI0qn08pmsyqVStVb8gFgI0EsptgVNnIUxRXgidiV\ngXZd43Zpu/b2dp09e9bpMQDYFASBgpiNHEVxBXhiaeTK3LrBAKwIpCBmYzkgiivAE7ErAu26iuIK\nQDQFsZgCx5cFtwvFFeCJIBbTrittJC4ABjFyBaDVxHYF2vUsRq4ARFMQiym2y0YHkOIK8ESwK9Cu\nKymuAERUEEiNTmhfbE5TGkVxBXgiiAWKcVkQQEQFzbgsSHEFYDvFGLkCEGVBTEGjlwWfak5TGkVx\nBXgidsUuXXmN2+1KAOByBbtiil3ZYI5yu2vcplFcAZ4IYoHz1Y8B4HItLSLK3YIAWshSccVlQQAR\n1YwJ7RFBcQV4IraLda4ARFgQND7nKiIorgBPcFkQQJRxWRBAy+GyIIBIiwUSI1cAWkkQizFyBSC6\ngkABc64AtBIuCwKItmBpUrsBFFeAJxi5AhBlQSymYJeNssTGpwCwsViggDlXAKIq0NK8q4aEzWhJ\nwyiuAE8EQWBmx3kABjVj+5uI7H9DcQV4gsuCACKNRUQBtJogFiiguAIQVYH8mNB+/bMf08t2P+zs\n4N/8zfc7iy1JZz/ltnb88aOvdhr//p4up/F//vG3OY3/xkPPcxr/VRd/z2n81Gt+2Gn8f/v5dzqN\n/6HVT8SaMOS+2Njbm63tysf1wuf8i7P4X3ztrzmLLUl/++UOp/HTH3iz0/i9N77Qafzxp3/RafxX\n3eJ2l9/EN/7CafwDL3UaXjf98wedxv/AqsdB0IwJ7dHYuZmRK8ATsV27tOuqZzUW5NvNaQsArBGL\nSVfYKEtsfAoAG+OyIIAoY84VgFYTNOOyIAC4ErCIKIBWY2jHeQAGBTGJRUQBtJIgFuOyIIDo8uVu\nQQCGxBi5AhBhQUyK2chRFFeAJ4KmrH4MAI4woR1Ay4kFUsPFVTT27QJgUbA0emUAxRXgC0P7dgEw\nqCkdwGiguAJ8EWvGnTgUVwDcCBUoZEI7gFYSsBQDgCgLAia0A2gxsZiZIXcABgXMuQLQagI78xkA\nGBQECrlbEEBLYeQKQJSxzhWAlmNoPgMAo5jQDqClxK6Qrrxqp1sBADWFsV1a3HXlTjejKSiuAF8Y\nWkMGgEVMaAfQYsIgppDLggAiKgwCMzmK4grwBXOuAERZwCKiAFpNEFPIZUEAUWWoA0hxBfjCUOIC\nYM/S9jfMuQLQQpbmXPGVBxBRAcUVgFbDhHYAERYqpjCwkaPWLa6+eum5+tRXbnB28GuvXnQWW5Ku\nvTZ0Gn/uA191Gt+1Xxp/jtP47/yjrzuN/5w3HnYa/9pH3f5+/sI//JTT+Dfo91Y8tnQnTkXpiWt1\nYeH5zuJffcXTzmJL0tWOlx179Ev/7PYAjv3Y60pO4//5Q3Gn8a/q+WGn8a9+wu3v5x+UDjmNL/36\nyoeBmNAOoMUwcgUgwiwtF0NxBXjC4sgVAEuYcwWgxYRBTItG5jMAsCfU0h2DFlBcAb5g5ApAhIVB\nTItGchTFFeAJS/MZAFgUSOKyIIAWshjs0lO7nrXTzQCAmsIgpqeNrMVn41MA2FgQmFlDBoA9oaFF\nRG18CgAbCrU0ob2RP5sxOjqqRCKhRCKhmZkZx58KgBWhAjM5ipErwBNhEDifLJrP5zU/P6+pqSnN\nzMxobGxMZ8+edXpMAEYEgfNFRLcrR1FcAZ7YjqUY8vm8UqmUJKm7u1tTU1NOjwfAjlCBFh1fUNuu\nHEVxBXiiMuTuUrlcVmdnZ/VxPO52exEAdoTbsIjoduUoiivAE83oFc7Nzeno0aPVx319ferr66s+\n7ujoUKn0zH5wy/8OABtpdBHRqOQoiivAE2ET5jPs2bNnReJaLZlMamJiQsPDwyoWi+rt7W3oeAD8\nYSlHUVwBXnE7WbS/v1/ZbFapVErz8/PKZrNOjwfAGhs5iuIK8EUYKAzd79t18uRJ58cAYJChHEVx\nBXgi/Nc/ABBFlnIUxRXgFRs7zgOwykaOorgCvBE0fCcOAGBjFFeAJ5aG3CmuAESVnQ4gewsCAAA0\nESNXgCe2Y2sJALhclkbXKa4Ab9gZcgeAKKO4Anxi5T5nAAbZ6QCuW1y95Evv02v/z9ecHfzh8xec\nxZakCz9xzmn8//fXPu40/n2H3O7L9vl/aXca/62fH3Qa/zlXTziNL3230+gjg24v0b3/T1c+tjTk\nXrHvkU9o4B9/21n8J778FWexJel9r/gdp/H/7FV/5jT+4MuLTuN/41tuc9Sbv/YWp/FLr/h5p/Gl\n3U6jp25acBr/f/3tyseWchQjV4A37PQKASDKmN0KAADQRIxcAZ6wNOQOwKLt2VtwO1BcAb7Ypk1R\nAeByWOoAUlwBnrC0KSoAiwKxtyCAFmQjcQGwyUoHkOIK8AZ3CwLAdqC4AjwRSgqtdAsBIMIorgCP\nMHIFIKqY0A6gBdmZLArAIEN3NFNcAZ4IQ2nRSOICgCijuAI8wVIMAKKMy4IAWhCXBQFEm5UOIMUV\n4BEr8xkA2BMaWi6G4grwBJcFAWB7UFwB3rDTKwRglJEeIMUV4IkwZBFRANFmpQNIcQV4xUbiAmCR\nnZtuKK4AjzBwBSCqLM0LpbgCPBHKzurHAAwK7dzRTHEFeMRKrxAAooziCvCEpdWPASDKKK4AX1ia\n0ADAHG8WEf2zr96kjz/0BmcHz//UeWexJWngpktO4//Gh7/pNP59mec4jf9Pf/9Rp/Hvemveafy/\n/uDjTuP/YOJqp/F/9CsnncZ//5pn7CSuiv/vUo/mvzzsLP5vJT7oLLYk3fz8bziN//l/bHca/z2f\n3OM0/te/9pjT+EqNOw3/hS8+y2n8l77wSafxbyq5/f2vxUr/j5ErwBMMXAGIPCa0A2gloaRFI4kL\ngD2WOoAUV4AvWKEdQKTZmbpAcQV4wtJkUQD2WNqii+IK8ImRxAUAUUZxBXiEkSsAcI/iCvCEpSF3\nADZZ6QBSXAHeYM4VgOiyNC+U4grwhKXbnAHYZGV0neIK8IiVxAXAKkauALQcG4kLAKKM4grwBBPa\nAUSZpakLFFeARyiuAESWoQ4gxRXgCUu9QgAWBbIydYHiCvBFGChk42YAEWWpA0hxBXgilLRoJXMB\nMInLggBaylKvkJErAFFmI0dRXAG+sDTmDsAcS3c0U1wBHjGStwAg0iiuAE+EstMrBGCTlRRFcQV4\nIxqbonZ2dmr//v2SpN7eXp04cWKHWwQgCqKycXMzchTFFeCJKMxnKBaLSiaTOn369M42BEA0GclR\n6xZX17Rfq+tufH5DB1jPvQ+POIstSQM/3uM0/h/+6n90Gv/h8xecxn/fT55zGn/i92acxt/7fXuc\nxn/V2V9yGv9Nj7/NafyXXP3gmucaLa7m5uZ09OjR6uO+vj719fVt+v3FYlHT09NKpVKSpGPHjqm7\nu/uy23P1NVeoI37NZb9/I//98dudxZakH/vdQ07j/+q/73Ua/4kvf8Vp/Pe94necxv/gx77lNP4L\nnn+l0/j//vO/6zT++NO/6DS+9F/XPNPoyFVUchQjV4AnmnGz4J49e1Ykrq267rrrND4+roMHD2p2\ndlbJZFIXLrjtRABoDc0YXY9KjqK4AnyxTZcFM5nMmufi8bgGBwfV3d1d7QXu3btXknTp0iW1tbW5\nbxgAaHtyFMUV4ImluwXdTxYdHh6u+2/Hjx9XR0eHhoeHVS6XJYnCCkDVdky52o4cRXEFeGSnb3Me\nGRlROp1WNptVqVRSLpfb4RYBiI6d37i5WTmK4grwRQRWaG9vb9fZs2d3thEAIikKa/E1K0dRXAGe\niEBtBQDrspKjKK4Aj+x0rxAAfEBxBXgiDKVFiisAEbW0FMPOr9DeDBRXgCdCBWYSFwCbrIyuU1wB\nvojA9jcA4AOKK8ATTGgHEGWWchTFFeARRq4ARFfQ8N6CUUFxBXiiGft2AYArlnIUxRXgESuJCwCi\njOIK8ISl+QwAbLJyRzPFFeALqisA2BYUV4BHuCwIIKos9f8orgBPWJosCsAgQzmK4grwiJG8BQCR\nRnEFeCKUnV4hAHss5SiKK8AXhobcASDKKK4AT4SSFimuAERUGAZaZCkGAK2ECe0Aos5Kilq3uEoc\n6NRPDO9zdvBXXfw9Z7ElqeA0unTvFfc7jX/XO55wGr94uuw0/isGbnIa/5P5zzqN/6b2tziN/ztv\n+bbT+P/jPaufCRUaq666Xrio1/zAU87iJ77xv5zFlqRHnEaXfv9Kt7/DP/r6rzmN//BnFp3G/96X\nPMdp/M//w7ecxv+Nq3/Bafw7/uOc0/j/8x+cht9RjFwBnmDkCkDkGclRFFeARyiuAEQVi4gCaDmW\nEhcAgwyNrlNcAb6gugIQYUvrXHG3IIAWY6VXCMAmKymK4grwBBPaAWB7UFwBHqG4AhBZhqYuUFwB\nnjCUtwAYZClHUVwBvghlbhFRALZYSVEUV4AnLO04DwBRRnEF+IIJ7QCwLSiuAE8wcgUgyizd0Uxx\nBXgiDEMtLhrJXADMCRVokUVEAbQUQ71CAIgyiivAE5ZucwZgkKEOIMUV4BGWYgAA9yiuAF8wdAUg\nwizddENxBXjCUuICYBCXBQG0HEOJC4A9lgbXKa4AT4QKmXMFANuA4grwBSNXACLOSo6iuAI80Yw5\nVzaW9wMQRVwWBNB6wsaXYqC4AuCModH1dYurT3z86/rGY3/r7ODvuXHIWWxJeoMmnMZ/7NK3ncb/\nk49+l9P43/UCp+F1x3/4ktP4P3jLzU7jv/O33P3uS9L7v3jAafzVLN4t+IU56c8/4i7+hzvS7oJL\nepPe6zT+4/930Wn8j82+0Gn8jjan4dW/94LT+N9zg9sk++cfecpp/PPf3Oc0vmWMXAG+MNQrBGCU\nkRxFcQV4grsFAUQZc64AtJwwlBYprgBEVBhKi26vZG8biivAJ9RWAOAcxRXgC+ZcAcC2oLgCPMGc\nKwCRZqgDSHEF+MJQ4gJgj6XlYiiuAE8sJS4jmQuASVYyFMUV4AtGrgBEWGgoR8V2ugEAtkdlzlUj\nf5oll8vp+PHjK54bHR1VIpFQIpHQzMxM044FAFvVaI6iuAJ8ET7TM7zcP82QTqc1NDSkIHhmp8J8\nPq/5+XlNTU0pk8lobGysOQcD0EKikaSakaO4LAh4ohlzrubm5nT06NHq476+PvX19W0pRjabVSaT\nUblcrj6Xz+eVSqUkSd3d3ZqammqonQBaU6PlUVRyFMUV4IsmdOz27NmzInE1S7lcVmdnZ/VxPB5v\n+pHf4tIAAAW9SURBVDEARFszBp+ikqMorgBPbNc6V5lMZs1z8Xhcg4ODdd/T0dGhUqlUfbz87wDQ\nTNuRoyiuAF9s066ow8PDW35PMpnUxMSEhoeHVSwW1dvb66BlAKJuO+4W3I4cRXEFeCRK61wtnyza\n39+vbDarVCql+fl5ZbPZHWwZgJ2wTf2/TWskR1FcAZ6I0hoytXqOJ0+e3IGWAIgMQzmK4grwRBiG\nWlyMSOYCgFqMpCiKK8AjUbosCADLRe2yYCMorgBPNHuVdQBoqghdFmwUxRXgESuJC4A9Swsd73Qr\nmoPiCvDE0oR2I5kLgD2GchTFFeCLUNLiTjcCANZho7Zav7h6Tvu1uv7G5zk7eOo1L3QWW5L6E6Nu\n4+u00/if+t7DTuO/98Nu/0/7m6fcbmHyuU983Gn8a9qudRr/p67/S6fx37HmGXtzrq6++gq1d1zl\nLP6BlzoLLUm67obXO41/j9yuF/bZF/yw0/ifutjuNP6Zz+xzGn+2eMlp/KuffaXT+Lde89dO4/+d\n0+g7i5ErwBNcFgQQZdwtCKAlUVsBiCzuFgTQaliKAUCUcbcggJZEcQUA7lFcAZ6I0t6CALCWnVlX\nFFeAN7gsCCDCDHUAKa4AXzRjQkPQlJYAwBrMuQLQcsIw1OJig5lrV3PaAgBrMHIFoNUs9QqNZC4A\n5jByBaD1sBQDgIgLmdAOoJVY6hUCsMfSHc0UV4AvQilsdM4VADhEcQWgtVjqFgKwx84yVxRXgC+4\nLAgA24PiCvBFyN2CAKIrNLTQMcUV4AlLiQuAQYZmLlBcAb5g5ApAhDVjylVUNpGguAI8wcgVgMgz\nkqIorgBfMHIFANuC4grwCbUVgKhqQgeQy4IAtlUYhiwiCiCyLC0XQ3EFeCIMQy0uLu50MwCgLiO1\nFcUV4A3mXAGIMkO7SKxbXO3valPqNS90dvAH3/FXzmJL0mt7v+A0/qde+wdO4y/e8v1O43/9LQWn\n8X/ljpjT+J+79Yecxn/Pu//RaXzpG47jr2TxbsEX7JYOvNRd/A9+6DF3wSUN3PgVp/Efuulnncbf\n+/s/4zR+6ZV/4jT+0Csedhr/K13XO43/4Smn4bcdlwUBtB5D+3YBMMjOwBXFFeATayNXAOxYGrmy\nkaMorgBPhKG9y4IADGHkCkDLCcVSDACwDSiuAE9YnNAOwA5L00IprgBfWLoVB4BBdq4LUlwB3mDk\nCkCE2amtKK4AX4QsIgog6oykKIorwBuMXAGIrqU5VzZyFMUV4AlGrgBEGpcFAbScMJRYigFARFm6\no5niCvCIlcQFAFFGcQV4IgxDLS4u7nQzAKA2LgsCaDVsfwMgythbEEBrMpK4ABjEyBWAlhOG7C0I\nILKY0A6g5bAUA4BIM7S5IMUV4A07vUIAiDKKK8AXbNwMIOKsdAAprgBPWJrPAMCe0NCE9thONwDA\nNgmfWY7hcv80Sy6X0/Hjx1c819nZqUQioUQioTvvvLNpxwLQKhrLT1HKUYxcAZ6IyshVOp3WmTNn\nND4+Xn2uWCwqmUzq9OnTO9gyAGhOjqK4Ajzx1JOP6tuPfW2nm6FsNqtMJqNyuVx9rlgsanp6WqlU\nSpJ07NgxdXd371QTAeyAJx5f0KVHvtRQjN1XNt6OZuSoIFynK/uud71rRXAAraOjo0N33XVX9fHb\n3vY2Xbp0qaGYTz31lHbv3l193NfXp76+vi3HqSSue+65R5I0MzOj2dlZHTx4ULOzs0omk7pw4cKG\ncchRQOuynKPWLa4AYKsymcya5+LxuAYHB1e8ZnniWq2rq0vT09Nqa2tz1k4AftqOHMVlQQBNNTw8\nvOX3HD9+XB0dHRoeHq6ORFFYAXBhO3IUxRWAHREEQfXvIyMjSqfTymazKpVKyuVyO9gyAGgsR3FZ\nEAAAoIlY5woAAKCJKK4AAACaiOIKAACgiSiuAAAAmojiCgAAoIkorgAAAJqI4goAAKCJ/n9uebf9\nwblPUwAAAABJRU5ErkJggg==\n", | |
| "text": [ | |
| "<matplotlib.figure.Figure at 0xbd38eb8>" | |
| ] | |
| } | |
| ], | |
| "prompt_number": 47 | |
| } | |
| ], | |
| "metadata": {} | |
| } | |
| ] | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment