Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save dominiquesydow/38a8b1ae85843bb7abec4ff60ae750de to your computer and use it in GitHub Desktop.
Save dominiquesydow/38a8b1ae85843bb7abec4ff60ae750de to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "1d48bf93-d3eb-444c-adcc-56c21818e40c",
"metadata": {},
"source": [
"# Matplotlib color maps and norms\n",
"\n",
"- discrete data shown as sequential map\n",
"- continuous data shown as diverging map\n",
"- continous data shown as sequential map"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "406356df-a36d-4c63-8923-2822c451166f",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from matplotlib import cm, colors\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a0ed2ad4-c9c5-46c4-b79d-c70afd3fe166",
"metadata": {},
"outputs": [],
"source": [
"def colorbar(norm, cmap):\n",
" fig, ax = plt.subplots(figsize=(6, 1))\n",
" fig.subplots_adjust(bottom=0.5)\n",
"\n",
" fig.colorbar(\n",
" cm.ScalarMappable(norm=norm, cmap=cmap),\n",
" cax=ax,\n",
" orientation=\"horizontal\",\n",
" label=\"label\",\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "42f91c53-ddd4-4d03-ab6d-fd13cc84bd23",
"metadata": {},
"outputs": [],
"source": [
"data = [1.0, 3.0, 0.0, np.nan]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "7fa0b5d9-d756-4be3-97e9-e34986b71b65",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1.0, 3.0, 0.0, nan]\n",
"[1.0, 3.0, 0.0, nan]\n",
"[(0.993248, 0.906157, 0.143936, 1.0), (0.993248, 0.906157, 0.143936, 1.0), (0.267004, 0.004874, 0.329415, 1.0), (0.0, 0.0, 0.0, 0.0)]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAABICAYAAABV5CYrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEtUlEQVR4nO3dTahd1R2G8ec1ifhVFEmwQa06ECmGokZSVCjYWgidaGkGlVI66KwU02GnDhQctBMHgmBoi6KIdlA6MISiLS211YSYNqa2UgoGhfiJZlBvo38Hd1sueo3xel3rrO3zgwN7n8WFl8XhvYt1zlknVYUkqY3TegeQpM8TS1eSGrJ0JakhS1eSGrJ0JamhjScb3Jwv1hJLrbLM3oktZ/eOMCs570TvCLPx5TNf7x1hVvYfentvVe1cbeykpbvEEl/NNz6bVJ9Dr37n+t4RZmXjzS/3jjAbT171SO8Is7Jh6782f9SY2wuS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNWbqS1JClK0kNpao+ejB5DNjcLs6abQZe6R1iRpzP9eNcrq9R5vOVqtq52sBJS3cUSZ6uqmt755gL53P9OJfraw7z6faCJDVk6UpSQ3Mp3Xt7B5gZ53P9OJfra/j5nMWeriSNYi4rXUkagqUrSQ0NXbpJdiZ5LsnzSX7aO8/okuxJcizJ33tnGV2Si5M8nuRIksNJdvfONLIkZyT5a5Jnpvm8vXemtRp2TzfJBuCfwDeBo8BTwK1V9WzXYANL8jXgOPCrqtrWO8/IkmwFtlbVgSRfAPYDt/j6XJskAc6uquNJNgF/BHZX1ZOdo31iI690dwDPV9W/q2oJeAi4uXOmoVXVH4DXeueYg6p6qaoOTNdvAUeAC/umGlctOz7dbpoeQ64YRy7dC4EXVtwfxRe1FlCSS4Grgb90jjK0JBuSHASOAfuqasj5HLl0s8pzQ/7n03wlOQd4FPhJVb3ZO8/IquqdqroKuAjYkWTILbCRS/cocPGK+4uAFztlkT5k2nt8FHigqn7dO89cVNUbwBPAqgfKLLqRS/cp4PIklyU5Hfgu8JvOmSTg/2/83Accqaqf984zuiRbkpw3XZ8J3AT8o2uoNRq2dKvqBPBjYC/Lb1I8XFWH+6YaW5IHgT8DVyQ5muSHvTMN7Abg+8DXkxycHt/qHWpgW4HHkxxiecG1r6p+2znTmgz7kTFJGtGwK11JGpGlK0kNWbqS1JClK0kNWbqS1JClq4WR5PjHjF/6SU9AS/KLJLs+XTJp/Vi6ktSQpauFk+ScJL9LciDJ35KsPD1uY5JfJjmU5JEkZ01/sz3J75PsT7J3OlpRWjiWrhbRf4FvV9U1wI3Az6av1QJcAdxbVV8B3gR+NJ1xcDewq6q2A3uAOzrklj7Wxt4BpFUEuHM6VP1dlo/svGAae6Gq/jRd3w/cBjwGbAP2Td28AXipaWLpFFm6WkTfA7YA26vqf0n+A5wxjX3we+vFckkfrqrr2kWU1sbtBS2ic4FjU+HeCFyyYuxLSd4v11tZ/tmW54At7z+fZFOSK5smlk6RpatF9ABwbZKnWV71rjzC7wjwg+m0qfOBe6afa9oF3JXkGeAgcH3byNKp8ZQxSWrIla4kNWTpSlJDlq4kNWTpSlJDlq4kNWTpSlJDlq4kNfQecGAaCHRRaVcAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x72 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Discrete and sequential\n",
"norm = colors.NoNorm(vmin=min(data), vmax=max(data))\n",
"data_normed = norm(data)\n",
"\n",
"cmap = cm.get_cmap(\"viridis\", 4)\n",
"print(data)\n",
"print(data_normed)\n",
"print([cmap(i) for i in data_normed])\n",
"colorbar(norm, cmap)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7ea23287-c609-4ae7-a1ef-29b43295a6b7",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1.0, 3.0, 0.0, nan]\n",
"[0.33333333 1. 0. nan]\n",
"[(0.190631, 0.407061, 0.556089, 1.0), (0.993248, 0.906157, 0.143936, 1.0), (0.267004, 0.004874, 0.329415, 1.0), (0.0, 0.0, 0.0, 0.0)]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x72 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Continuous and sequential\n",
"norm = colors.Normalize(vmin=min(data), vmax=max(data))\n",
"data_normed = norm(data)\n",
"\n",
"cmap = cm.get_cmap(\"viridis\")\n",
"print(data)\n",
"print(data_normed)\n",
"print([cmap(i) for i in data_normed])\n",
"colorbar(norm, cmap)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "de8aa4b9-a549-48ef-8f4c-03b982f76495",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1.0, 3.0, 0.0, nan]\n",
"[0.25 1. 0. nan]\n",
"[(0.9085736255286428, 0.5926182237600922, 0.770319108035371, 1.0), (0.15294117647058825, 0.39215686274509803, 0.09803921568627451, 1.0), (0.5568627450980392, 0.00392156862745098, 0.3215686274509804, 1.0), (0.0, 0.0, 0.0, 0.0)]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x72 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Continuous and diverging\n",
"norm = colors.TwoSlopeNorm(vmin=0.0, vcenter=2.0, vmax=3.0)\n",
"data_normed = norm(data)\n",
"\n",
"cmap = cm.get_cmap(\"PiYG\")\n",
"print(data)\n",
"print(data_normed)\n",
"print([cmap(i) for i in data_normed])\n",
"colorbar(norm, cmap)"
]
}
],
"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.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment