{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4f1597a3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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RLznnTt3zpQrT548ZgSa5Pz50JGX9Hk6ulFcjRs3NuuXLVsWb31iowqpIUOGmNGRdOQe3f7tt9/GjpqjozElpMc1sdF/Eop77HXfOjpRpUqVXM8//7xr8+bN1vMTlk9Hb+revburcuXK5rU6As4999xjjrOO/BSXjiykZdLzlDNnTlf58uXjjWZ1o3Ooo+68/fbbripVqphRnnSkJR1ZR0d2OnDgQOzzjh496mrSpIkrICDAlDPuKFUXL150DRs2zJRPR6QKCgoyn7Vfv37xRu25kc8//9wcbx0pSEfxyps3r6thw4ZmpKPo6OjY5509e9Ycl8KFC5vnaTn0HLpHu0pq1COlI1h16NDBlT9/fvN91PLqyFdxfxfc50HXJ/Ud15G/4krq+CY28tibb77pKl68uMvf399Vrlw518yZMxP93XGPmqUjT+kITFpePS9z585N1vEEAG+XSf/j6bACAICv0eZJPXv2vGmtEAD4KvooAAAAALAQFAAAAABY6MwMAEAq0HIXgNP5RI2CjiKho6boCB462sp3333n6SIBAAAAjub1QUGH+dOh/YYOHWrGXn/wwQfNEI46rB8AAACAtOH1ox7p2N733nuvGbvdrVy5cvLoo4+aWUIBAAAAZLA+CleuXJEdO3bI4MGD461v0qSJbNq0KdHXREdHm8VNJxU6d+6cmZE07kybAAAATuCeMFJnutfJML3B33//ba7j0pLOoq7N0pFBg8Kff/4p169fN7OYxqWPT58+nehrtJZBZwgFAADISHQm8SJFinhFSCiYp5BERkek6fsEBgaaWdM1HOmcJrogAwUFt4Q1AZqck6odGDJkiPTv3z/2cUREhBQrVkyq9p0jWfxzilPtGNdWxjebIU7W76vnZX+hYHGycqdPSvXQReJk+l11+mdU/E4653eSvzvO+H1sOrexONW1y9fkm27fSkBAgHgDrUnQkDC28XuSPWuONHmPv69FyZBVL5lwpIEBGTAoFChQQLJkyWLVHpw5c8aqZXDz9/c3S0IaErL65xIny5EtbX4ZvUmAl1SppiWnf08zymdU/E46A393nCFbzmzidN7WxFpDQkb4O+hkXn3VpW3PdDjUVatWxVuvj2vXru2xcgEAAABO59U1CkqbEXXq1Elq1KghtWrVkhkzZpihUbt37+7pogEAAACO5fVB4fHHH5ezZ8/KqFGj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",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.colors import BoundaryNorm, ListedColormap\n",
    "\n",
    "# Generate sample data: a 2D array of integers representing discrete categories\n",
    "np.random.seed(42)\n",
    "# Create a 10x10 grid with random integer values from 0 to 3\n",
    "data = np.random.randint(0, 4, size=(10, 10))\n",
    "\n",
    "# Define the discrete levels (boundaries) and the corresponding colors\n",
    "levels = [0, 1, 2, 3, 4]          # boundaries: data in [0,1), [1,2), [2,3), [3,4)\n",
    "n_levels = len(levels) - 1        # number of discrete categories\n",
    "\n",
    "# Choose a qualitative colormap with exactly n_levels distinct colors\n",
    "# Option 1: Use a built-in colormap with a limited number of colors\n",
    "# colors = plt.cm.viridis(np.linspace(0, 1, n_levels))\n",
    "# Option 2: Define custom colors (e.g., red, green, blue, magenta)\n",
    "custom_colors = ['#e41a1c', '#4daf4a', '#377eb8', '#984ea3']\n",
    "cmap = ListedColormap(custom_colors)\n",
    "\n",
    "# Create a BoundaryNorm to map data to discrete color indices\n",
    "norm = BoundaryNorm(levels, ncolors=len(cmap.colors), clip=False)\n",
    "\n",
    "# Create the plot\n",
    "fig, ax = plt.subplots(figsize=(8, 6))\n",
    "mesh = ax.pcolormesh(data, cmap=cmap, norm=norm, edgecolors='k', linewidth=0.5)\n",
    "\n",
    "# Add a colorbar showing the discrete intervals\n",
    "cbar = plt.colorbar(mesh, ax=ax, ticks=[0.5, 1.5, 2.5, 3.5])\n",
    "cbar.set_ticklabels(['Class 0', 'Class 1', 'Class 2', 'Class 3'])\n",
    "cbar.set_label('Discrete Category')\n",
    "\n",
    "# Add labels and title\n",
    "ax.set_xlabel('X axis')\n",
    "ax.set_ylabel('Y axis')\n",
    "ax.set_title('2D Plot with Discrete Colormap')\n",
    "\n",
    "# Optionally, invert Y axis to match matrix indexing (optional)\n",
    "ax.invert_yaxis()\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "cmip7validate-env",
   "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.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
