Skip to content

Instantly share code, notes, and snippets.

@flying-sheep
Last active August 20, 2025 08:48
Show Gist options
  • Save flying-sheep/a38e925d0b0f7ad5c6eb1ada8fa5c128 to your computer and use it in GitHub Desktop.
Save flying-sheep/a38e925d0b0f7ad5c6eb1ada8fa5c128 to your computer and use it in GitHub Desktop.
Use colorspacious to make monochrome colormaps from palette colors
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "fbd22762",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from colorspacious import cspace_convert\n",
"from matplotlib import cm\n",
"from matplotlib.colors import ListedColormap"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3bd9319a",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/phil/.local/share/hatch/env/virtual/hv-anndata/O7Q68J-Z/docs/lib/python3.13/site-packages/colorspacious/ciecam02.py:333: RuntimeWarning: divide by zero encountered in divide\n",
" t = (C\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBibHVlIGNvbG9ybWFwLZswNQAAABl0RVh0RGVzY3JpcHRpb24AYmx1ZSBjb2xvcm1hcKYpoK0AAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAAB5ElEQVR4nO3WwU3sQBRE0cb2DIhEiI9ICICc2BMIW2DB0jXIUjMgUecsn7r97OF/6d6MMT5G8rQfPTw+72av4yVcftuPtvf97D5cvV32s3OYndZweYxxCme3LczC/TRbZ86Fvenc7J6/ml3hmXdLmIVz5zA7rfu//Sk8b4wxtnA/zsL9NexZZ+7Gc/m91+XY7vzM/d1l4h2XuDf8/7vwjkv6lrjn4LmDv006l77la0/6zdKe/d30U6RZ+LyR/tkevXtx98Qzf+N5s3umvmVi71XeJ+344dl3cwDgHxMAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAoU8Zpgk7wrvq3QAAAABJRU5ErkJggg==",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>blue</strong> </div><div class=\"cmap\"><img alt=\"blue colormap\" title=\"blue\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBibHVlIGNvbG9ybWFwLZswNQAAABl0RVh0RGVzY3JpcHRpb24AYmx1ZSBjb2xvcm1hcKYpoK0AAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAAB5ElEQVR4nO3WwU3sQBRE0cb2DIhEiI9ICICc2BMIW2DB0jXIUjMgUecsn7r97OF/6d6MMT5G8rQfPTw+72av4yVcftuPtvf97D5cvV32s3OYndZweYxxCme3LczC/TRbZ86Fvenc7J6/ml3hmXdLmIVz5zA7rfu//Sk8b4wxtnA/zsL9NexZZ+7Gc/m91+XY7vzM/d1l4h2XuDf8/7vwjkv6lrjn4LmDv006l77la0/6zdKe/d30U6RZ+LyR/tkevXtx98Qzf+N5s3umvmVi71XeJ+344dl3cwDgHxMAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAoU8Zpgk7wrvq3QAAAABJRU5ErkJggg==\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#bfffffff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #bfffffff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2750>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFXRFWHRUaXRsZQBvcmFuZ2UgY29sb3JtYXCC8c+OAAAAG3RFWHREZXNjcmlwdGlvbgBvcmFuZ2UgY29sb3JtYXDLZtdqAAAAMXRFWHRBdXRob3IATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3Jnhnp4VQAAADN0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnI15roQAAAa9JREFUeJzt1ltuwjAQQFE30Ie6//22C+ggGQX46D3nc+TYTgTSfVtr/azBxzD73px9DbPPE7PpLtNsrbXeN9e+H8Pssje7Xod102x6dpjdmu8+//DZ8G3uufflxJ6XF6y7Z+3uu0zrxv1O3nv3jo8++8y59+35d9PL8ffPNc2OYbaOzR/otO7W/BguvrtueuntMzZnZ58f7/iC2VPOeXv+GS87+8H7rbVuvA0A8J8JAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBv5fCA65F4IjHAAAAAElFTkSuQmCC",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>orange</strong> </div><div class=\"cmap\"><img alt=\"orange colormap\" title=\"orange\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFXRFWHRUaXRsZQBvcmFuZ2UgY29sb3JtYXCC8c+OAAAAG3RFWHREZXNjcmlwdGlvbgBvcmFuZ2UgY29sb3JtYXDLZtdqAAAAMXRFWHRBdXRob3IATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3Jnhnp4VQAAADN0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnI15roQAAAa9JREFUeJzt1ltuwjAQQFE30Ie6//22C+ggGQX46D3nc+TYTgTSfVtr/azBxzD73px9DbPPE7PpLtNsrbXeN9e+H8Pssje7Xod102x6dpjdmu8+//DZ8G3uufflxJ6XF6y7Z+3uu0zrxv1O3nv3jo8++8y59+35d9PL8ffPNc2OYbaOzR/otO7W/BguvrtueuntMzZnZ58f7/iC2VPOeXv+GS87+8H7rbVuvA0A8J8JAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBv5fCA65F4IjHAAAAAElFTkSuQmCC\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ffd160ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ffd160ff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2690>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFHRFWHRUaXRsZQBncmVlbiBjb2xvcm1hcF+1U3oAAAAadEVYdERlc2NyaXB0aW9uAGdyZWVuIGNvbG9ybWFwoer6nAAAADF0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZ4Z6eFUAAAAzdEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyNea6EAAAG7SURBVHic7dZBcsIwEABBYQOV/384eQCbKiWG03Qft7S2MJe5rbW+1+QcZo9h9tycTbu7s/vm7Or+NJu+w7t3/3J2Ovfu3d3ZJ555Dhc/h4Pn8EeP5+YP/hjOfh2vs+d5bO3ex9nr7n14xzmcO6ffsta6H9PZvf1z2D2m3d07bj7vt/1j/C3/v/f8vM1zw+wT77m0u3lurWvfbPfd4zsu3vvKfY7bcMc1nFu3YTad25td3d+ffeLeAECOAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQ9AMI5AO+nK6z8wAAAABJRU5ErkJggg==",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>green</strong> </div><div class=\"cmap\"><img alt=\"green colormap\" title=\"green\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFHRFWHRUaXRsZQBncmVlbiBjb2xvcm1hcF+1U3oAAAAadEVYdERlc2NyaXB0aW9uAGdyZWVuIGNvbG9ybWFwoer6nAAAADF0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZ4Z6eFUAAAAzdEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyNea6EAAAG7SURBVHic7dZBcsIwEABBYQOV/384eQCbKiWG03Qft7S2MJe5rbW+1+QcZo9h9tycTbu7s/vm7Or+NJu+w7t3/3J2Ovfu3d3ZJ555Dhc/h4Pn8EeP5+YP/hjOfh2vs+d5bO3ex9nr7n14xzmcO6ffsta6H9PZvf1z2D2m3d07bj7vt/1j/C3/v/f8vM1zw+wT77m0u3lurWvfbPfd4zsu3vvKfY7bcMc1nFu3YTad25td3d+ffeLeAECOAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQ9AMI5AO+nK6z8wAAAABJRU5ErkJggg==\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#a9ff98ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #a9ff98ff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2b10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAEnRFWHRUaXRsZQByZWQgY29sb3JtYXBvAxS7AAAAGHRFWHREZXNjcmlwdGlvbgByZWQgY29sb3JtYXBjK2bhAAAAMXRFWHRBdXRob3IATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3Jnhnp4VQAAADN0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnI15roQAAAcRJREFUeJzt1sFqWzEQQFE5z0naQv//c9NFlx6D7FdqyD1nOWgsYZxwL2utrzX4Ocx+D7Nfm7Mfw+xz89zH5u69s7uz983Zmd1pttZa1+39y7A7zd6G3dvZdG6eHcNrHvnM2/3r9fbc8THsvm/Ornt3rLXWcUz7w2w4N+7unnt7/vPWWus4sb+9O5y7TO8Zzo2zv5c/v/+q3btnb//eTt1zZnbnd7L97v/xxt23PLJ/6vv+x9/DK+++nLhjreE/NQDw7QkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEF/AID9A8MJw41YAAAAAElFTkSuQmCC",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>red</strong> </div><div class=\"cmap\"><img alt=\"red colormap\" title=\"red\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAEnRFWHRUaXRsZQByZWQgY29sb3JtYXBvAxS7AAAAGHRFWHREZXNjcmlwdGlvbgByZWQgY29sb3JtYXBjK2bhAAAAMXRFWHRBdXRob3IATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3Jnhnp4VQAAADN0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnI15roQAAAcRJREFUeJzt1sFqWzEQQFE5z0naQv//c9NFlx6D7FdqyD1nOWgsYZxwL2utrzX4Ocx+D7Nfm7Mfw+xz89zH5u69s7uz983Zmd1pttZa1+39y7A7zd6G3dvZdG6eHcNrHvnM2/3r9fbc8THsvm/Ornt3rLXWcUz7w2w4N+7unnt7/vPWWus4sb+9O5y7TO8Zzo2zv5c/v/+q3btnb//eTt1zZnbnd7L97v/xxt23PLJ/6vv+x9/DK+++nLhjreE/NQDw7QkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEECAACCBAAABAkAAAgSAAAQJAAAIEgAAECQAACAIAEAAEF/AID9A8MJw41YAAAAAElFTkSuQmCC\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ffad9aff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ffad9aff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2990>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFXRFWHRUaXRsZQBwdXJwbGUgY29sb3JtYXA4E0ouAAAAG3RFWHREZXNjcmlwdGlvbgBwdXJwbGUgY29sb3JtYXBxhFLKAAAAMXRFWHRBdXRob3IATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3Jnhnp4VQAAADN0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnI15roQAAAehJREFUeJzt1jFOw0AURdGJHWBF7Ij1U9AiBEVKP0ufgITEO6f8mvGMnRT3stb6XMFbGD+vl8Psfb0eZpf1cZjt4Yx9bWF2XHkNs7TutvY6e+Y1rHsK5zyGvQ9h7zXsTWeEdbf7hP17emZaF84Z771/ttZa23T/9rtnx3O38H/6zr2Hd9z2cM507/COW3je2dr03tPvM/0O83sf150+M3zH9N77dF16v+G56X63/fe/d9y7XcJ90rnHWbh2XHc2T+dMnzm+z/Bdzu79k/tMZ5f0U6f7TGc/3f9Xs/MxAPCfCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKDQF77zCWUFw+h4AAAAAElFTkSuQmCC",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>purple</strong> </div><div class=\"cmap\"><img alt=\"purple colormap\" title=\"purple\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFXRFWHRUaXRsZQBwdXJwbGUgY29sb3JtYXA4E0ouAAAAG3RFWHREZXNjcmlwdGlvbgBwdXJwbGUgY29sb3JtYXBxhFLKAAAAMXRFWHRBdXRob3IATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3Jnhnp4VQAAADN0RVh0U29mdHdhcmUATWF0cGxvdGxpYiB2My4xMC4zLCBodHRwczovL21hdHBsb3RsaWIub3JnI15roQAAAehJREFUeJzt1jFOw0AURdGJHWBF7Ij1U9AiBEVKP0ufgITEO6f8mvGMnRT3stb6XMFbGD+vl8Psfb0eZpf1cZjt4Yx9bWF2XHkNs7TutvY6e+Y1rHsK5zyGvQ9h7zXsTWeEdbf7hP17emZaF84Z771/ttZa23T/9rtnx3O38H/6zr2Hd9z2cM507/COW3je2dr03tPvM/0O83sf150+M3zH9N77dF16v+G56X63/fe/d9y7XcJ90rnHWbh2XHc2T+dMnzm+z/Bdzu79k/tMZ5f0U6f7TGc/3f9Xs/MxAPCfCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKDQF77zCWUFw+h4AAAAAElFTkSuQmCC\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ffe9ffff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ffe9ffff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2bd0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFHRFWHRUaXRsZQBicm93biBjb2xvcm1hcMe7qHwAAAAadEVYdERlc2NyaXB0aW9uAGJyb3duIGNvbG9ybWFwOeQBmgAAADF0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZ4Z6eFUAAAAzdEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyNea6EAAAHFSURBVHic7dbBitswFEBRxU7K/P8Pt4su/QLKuLTQe87yIdmWCOE+1lo/1+A1zL42Zz+m2fG4zs7r7HUe19lzmJ3n8Ja1ns/r/DmsfW2uuzM7x3XXs3y2f1p3febu887j+3vfvfs89s69+z1/et3vtXvfPa07NtfdO8v83eO7N/dP5zu2937/Ht7v37ufcd3m7LhxD589c/N8N+5xet5H333jzh7Te8bZ8D+xu/eTtdNs+u3ded7f+u5/NVtrvTkNAPA/EwAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAgn4B96YEQYkP86MAAAAASUVORK5CYII=",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>brown</strong> </div><div class=\"cmap\"><img alt=\"brown colormap\" title=\"brown\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFHRFWHRUaXRsZQBicm93biBjb2xvcm1hcMe7qHwAAAAadEVYdERlc2NyaXB0aW9uAGJyb3duIGNvbG9ybWFwOeQBmgAAADF0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZ4Z6eFUAAAAzdEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyNea6EAAAHFSURBVHic7dbBitswFEBRxU7K/P8Pt4su/QLKuLTQe87yIdmWCOE+1lo/1+A1zL42Zz+m2fG4zs7r7HUe19lzmJ3n8Ja1ns/r/DmsfW2uuzM7x3XXs3y2f1p3febu887j+3vfvfs89s69+z1/et3vtXvfPa07NtfdO8v83eO7N/dP5zu2937/Ht7v37ufcd3m7LhxD589c/N8N+5xet5H333jzh7Te8bZ8D+xu/eTtdNs+u3ded7f+u5/NVtrvTkNAPA/EwAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAgn4B96YEQYkP86MAAAAASUVORK5CYII=\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ffeadaff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ffeadaff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2c90>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBwaW5rIGNvbG9ybWFw8n0niAAAABl0RVh0RGVzY3JpcHRpb24AcGluayBjb2xvcm1hcHnPtxAAAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAAB2klEQVR4nO3Wy0oEMRRF0XQ9Wh058///VAcOcxrSliB41hpeblKhEdm3McbnCN7HxzR7G9s0ex3nNHsZxzS7h7173JtnZzh7hr3v+b60eyzO0n35bNi7hdk9v/s45909zI4jzeY797S3h2+s7oXZM7v7Pv/trJ8Ns+3n333mzvjGbb4z3bfFN4azi3uPd6+88efvSXvbM+9e/Ha689rZtbeM8eD3Wf4d59ktfHukb6ffcfXso/nq+d9+z+rsqTvT2cVZ+ld25b6r5/9q9ngMAPxnAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACj0Bf1kBE4TF9swAAAAAElFTkSuQmCC",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>pink</strong> </div><div class=\"cmap\"><img alt=\"pink colormap\" title=\"pink\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBwaW5rIGNvbG9ybWFw8n0niAAAABl0RVh0RGVzY3JpcHRpb24AcGluayBjb2xvcm1hcHnPtxAAAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAAB2klEQVR4nO3Wy0oEMRRF0XQ9Wh058///VAcOcxrSliB41hpeblKhEdm3McbnCN7HxzR7G9s0ex3nNHsZxzS7h7173JtnZzh7hr3v+b60eyzO0n35bNi7hdk9v/s45909zI4jzeY797S3h2+s7oXZM7v7Pv/trJ8Ns+3n333mzvjGbb4z3bfFN4azi3uPd6+88efvSXvbM+9e/Ha689rZtbeM8eD3Wf4d59ktfHukb6ffcfXso/nq+d9+z+rsqTvT2cVZ+ld25b6r5/9q9ngMAPxnAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACgkAACgkAAAgEICAAAKCQAAKCQAAKCQAACAQgIAAAoJAAAoJAAAoJAAAIBCAgAACgkAACj0Bf1kBE4TF9swAAAAAElFTkSuQmCC\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000100ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000100ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ffd1ffff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ffd1ffff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2d50>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBncmF5IGNvbG9ybWFw9iBr6wAAABl0RVh0RGVzY3JpcHRpb24AZ3JheSBjb2xvcm1hcH2S+3MAAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAABtElEQVR4nO3WQW7DIBRAQWrS+x+5XXQZLOE4UqS+meUXGGJn8b7GGD9j0zHn02wuZo/HY3P2vblu74wxxpir/at7765b/b75vHcu7rjau5pdWfux2XE8zc7W7v5PVs/cft6NvZf2f2jd2fvefRerdbfuuHnGlXu/+5zV8465OmPvLufPvHGfG99gd/b3zNXa189Zf5f3nnF6zvbZr9/nzve7snb/3q//b1ezr7N7L6cAwL8mAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAE/QKpewR6EnymHwAAAABJRU5ErkJggg==",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>gray</strong> </div><div class=\"cmap\"><img alt=\"gray colormap\" title=\"gray\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBncmF5IGNvbG9ybWFw9iBr6wAAABl0RVh0RGVzY3JpcHRpb24AZ3JheSBjb2xvcm1hcH2S+3MAAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAABtElEQVR4nO3WQW7DIBRAQWrS+x+5XXQZLOE4UqS+meUXGGJn8b7GGD9j0zHn02wuZo/HY3P2vblu74wxxpir/at7765b/b75vHcu7rjau5pdWfux2XE8zc7W7v5PVs/cft6NvZf2f2jd2fvefRerdbfuuHnGlXu/+5zV8465OmPvLufPvHGfG99gd/b3zNXa189Zf5f3nnF6zvbZr9/nzve7snb/3q//b1ezr7N7L6cAwL8mAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAE/QKpewR6EnymHwAAAABJRU5ErkJggg==\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#fffffeff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #fffffeff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2e10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFHRFWHRUaXRsZQBvbGl2ZSBjb2xvcm1hcOjz85oAAAAadEVYdERlc2NyaXB0aW9uAG9saXZlIGNvbG9ybWFwFqxafAAAADF0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZ4Z6eFUAAAAzdEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyNea6EAAAHQSURBVHic7dZRbtswEEBBWnLuf+T2AFwBSpUUQd7M52JpyoadvNda68+avPbReeyzj3OYvYfZxz57D3tPZpe7wzOeD/bOYW+6d9qbZpe7D17zf8zWWuu4e3747kx7t19vOnvzjqfnx2cczj75bKaza33iGX/Q3lqf+cz2xePYfwjnsf9BOc5hNlx8Dj+sae/6/P7g0944G86e49npjmF28QU/b5+/t/fVr3f9eU937/+M7t/z77PxPU9f2m+4+5je82vfe63pee7OrqYAwK8mAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAE/QXu2QPkqFnixgAAAABJRU5ErkJggg==",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>olive</strong> </div><div class=\"cmap\"><img alt=\"olive colormap\" title=\"olive\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAFHRFWHRUaXRsZQBvbGl2ZSBjb2xvcm1hcOjz85oAAAAadEVYdERlc2NyaXB0aW9uAG9saXZlIGNvbG9ybWFwFqxafAAAADF0RVh0QXV0aG9yAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZ4Z6eFUAAAAzdEVYdFNvZnR3YXJlAE1hdHBsb3RsaWIgdjMuMTAuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZyNea6EAAAHQSURBVHic7dZRbtswEEBBWnLuf+T2AFwBSpUUQd7M52JpyoadvNda68+avPbReeyzj3OYvYfZxz57D3tPZpe7wzOeD/bOYW+6d9qbZpe7D17zf8zWWuu4e3747kx7t19vOnvzjqfnx2cczj75bKaza33iGX/Q3lqf+cz2xePYfwjnsf9BOc5hNlx8Dj+sae/6/P7g0944G86e49npjmF28QU/b5+/t/fVr3f9eU937/+M7t/z77PxPU9f2m+4+5je82vfe63pee7OrqYAwK8mAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAECQAACBIAABAkAAAgSAAAQJAAAIAgAQAAQQIAAIIEAAAE/QXu2QPkqFnixgAAAABJRU5ErkJggg==\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#ffff67ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #ffff67ff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2ed0>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBjeWFuIGNvbG9ybWFwgnk/4gAAABl0RVh0RGVzY3JpcHRpb24AY3lhbiBjb2xvcm1hcAnLr3oAAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAABz0lEQVR4nO3WQY7TQBBA0R7HGWbDqbj/PbgFLFi6BnVkBBL/vWWpy92Rsvhva60fa/L+7Tr7+H6dPYfd5zHMzmH2uM7O4dw4G3bv7j/+9LnN3c/Obn/zH83u7h+7u8P/6c4dr9xz5427u8fm73vpnr/wnlfePZ69zo7hjV+H3Y/hni/Duffh3HM4N83WWusc9s/h7Dm8+zH8vmn3cWt3fvfuN48b75nunmbzHZfRr7O7f+W9v9P+996Gc9fR+uTZ22en2Z3dO9/73RwA+I8JAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBPwGXSwUPKksZDgAAAABJRU5ErkJggg==",
"text/html": [
"<div style=\"vertical-align: middle;\"><strong>cyan</strong> </div><div class=\"cmap\"><img alt=\"cyan colormap\" title=\"cyan\" style=\"border: 1px solid #555;\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAABACAYAAABsv8+/AAAAE3RFWHRUaXRsZQBjeWFuIGNvbG9ybWFwgnk/4gAAABl0RVh0RGVzY3JpcHRpb24AY3lhbiBjb2xvcm1hcAnLr3oAAAAxdEVYdEF1dGhvcgBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmeGenhVAAAAM3RFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHYzLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcjXmuhAAABz0lEQVR4nO3WQY7TQBBA0R7HGWbDqbj/PbgFLFi6BnVkBBL/vWWpy92Rsvhva60fa/L+7Tr7+H6dPYfd5zHMzmH2uM7O4dw4G3bv7j/+9LnN3c/Obn/zH83u7h+7u8P/6c4dr9xz5427u8fm73vpnr/wnlfePZ69zo7hjV+H3Y/hni/Duffh3HM4N83WWusc9s/h7Dm8+zH8vmn3cWt3fvfuN48b75nunmbzHZfRr7O7f+W9v9P+996Gc9fR+uTZ22en2Z3dO9/73RwA+I8JAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBAgAAggQAAAQJAAAIEgAAECQAACBIAABAkAAAgCABAABBPwGXSwUPKksZDgAAAABJRU5ErkJggg==\"></div><div style=\"vertical-align: middle; max-width: 514px; display: flex; justify-content: space-between;\"><div style=\"float: left;\"><div title=\"#000000ff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #000000ff;\"></div> under</div><div style=\"margin: 0 auto; display: inline-block;\">bad <div title=\"#00000000\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #00000000;\"></div></div><div style=\"float: right;\">over <div title=\"#92ffffff\" style=\"display: inline-block; width: 1em; height: 1em; margin: 0; vertical-align: middle; border: 1px solid #555; background-color: #92ffffff;\"></div></div></div>"
],
"text/plain": [
"<matplotlib.colors.ListedColormap at 0x7f453a7c2f90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# space, min_l, max_l, idx = \"CAM02-UCS\", 0, 100, 0\n",
"# space, min_l, max_l, idx = \"XYZ1\", 0, 1, 1\n",
"space, min_l, max_l, idx = \"JCh\", 0, 100, 0\n",
"\n",
"colors = cspace_convert(cm.tab10.colors, \"sRGB1\", space)\n",
"names = [\n",
" *[\"blue\", \"orange\", \"green\", \"red\", \"purple\"],\n",
" *[\"brown\", \"pink\", \"gray\", \"olive\", \"cyan\"],\n",
"]\n",
"\n",
"\n",
"def color_range(color: np.ndarray, n: int = 100) -> np.ndarray:\n",
" new = np.zeros((n, 3))\n",
" a_idx, b_idx = (i for i in range(3) if i != idx)\n",
" new[:, idx] = np.linspace(min_l, max_l, n)\n",
" new[:, [a_idx, b_idx]] = color[[a_idx, b_idx]]\n",
" return new\n",
"\n",
"\n",
"cmaps = [\n",
" ListedColormap(\n",
" np.clip(cspace_convert(color_range(color), space, \"sRGB1\"), 0, 1), name\n",
" )\n",
" for name, color in zip(names, colors, strict=True)\n",
"]\n",
"\n",
"for cmap in cmaps:\n",
" display(cmap)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "hv-anndata",
"language": "python",
"name": "hv-anndata"
},
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment