{ "cells": [ { "cell_type": "markdown", "id": "e3190b5e", "metadata": {}, "source": [ "# Interpolating hexadecimal colour values\n", "\n", "_by A. Maurits van der Veen_ \n", "_2022-01-28_ \n", "\n", "In visualizations, it is often desirable to be able to display gradations of colour, or to interpolate from one colour to another. \n", "\n", "When plotting data from a dataframe, we would like to be able to do this automatically from any one colour to any other colour. For instance, if we want to plot a number of distinct colours but want the transition from one to the next to be gradual.\n", "\n", "This notebook shows how to do this easily and neatly." ] }, { "cell_type": "markdown", "id": "c7f58f9c", "metadata": {}, "source": [ "### 1. Import modules" ] }, { "cell_type": "code", "execution_count": 1, "id": "876a74ff", "metadata": {}, "outputs": [], "source": [ "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd \n" ] }, { "cell_type": "markdown", "id": "f4d633b5", "metadata": {}, "source": [ "### 2. Interpolation functions\n", "\n", "Two functions handle the interpolation; both are built on/inspired by very helpful Stack Overflow answers:\n", "- `colorFader_array` is an array-based version of Marcus Dutschke's answer here: https://stackoverflow.com/questions/25668828/how-to-create-colour-gradient-in-python \n", "\n", "- `interpolate_hexcolor_df` is an adaptation of jdehesa's answer here: https://stackoverflow.com/questions/41895857/creating-a-custom-interpolation-function-for-pandas" ] }, { "cell_type": "code", "execution_count": 2, "id": "28a6e36d", "metadata": {}, "outputs": [], "source": [ "def colorFader_array(c1, c2, mix=0):\n", " \"\"\"Fade (linear interpolate) from color c1 (at mix=0) to c2 (mix=1).\n", " \n", " Array-based version of Marcus Dutschke answer here:\n", " https://stackoverflow.com/questions/25668828/how-to-create-colour-gradient-in-python\n", " \"\"\"\n", " return np.array([mpl.colors.to_hex((1-mix_i) * np.array(mpl.colors.to_rgb(c1_i)) \\\n", " + mix_i * np.array(mpl.colors.to_rgb(c2_i))) \\\n", " for c1_i, c2_i, mix_i in zip(c1, c2, mix)])\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "1e63c8b1", "metadata": {}, "outputs": [], "source": [ "def interpolate_hexcolor_df(df):\n", " \"\"\"Take a dataframe with columns that are color values, \n", " with missing values (NaN) inbetween that are to be filled by interpolation.\n", " \n", " Interpolate by \"averaging\" the colors over the missing range.\n", " \n", " Inspired by the answer by jdehesa at\n", " https://stackoverflow.com/questions/41895857/creating-a-custom-interpolation-function-for-pandas\n", " \"\"\"\n", " # Extract into numpy array\n", " vals = df.values.copy()\n", "\n", " # Produce a mask of the elements that are NaN\n", " empty = np.any(pd.isnull(vals), axis=1)\n", "\n", " # Positions of the valid values\n", " valid_loc = np.argwhere(~empty).squeeze(axis=-1)\n", "\n", " # Indices (e.g. time) of the valid values\n", " valid_index = df.index[valid_loc].values\n", "\n", " # Positions of the missing values\n", " empty_loc = np.argwhere(empty).squeeze(axis=-1)\n", "\n", " # Discard missing values before first or after last valid\n", " empty_loc = empty_loc[(empty_loc > valid_loc.min()) & (empty_loc < valid_loc.max())]\n", "\n", " # Index value for missing values\n", " empty_index = df.index[empty_loc].values\n", "\n", " # Get valid values to use as interpolation ends for each missing value\n", " interp_loc_end = np.searchsorted(valid_loc, empty_loc)\n", " interp_loc_start = interp_loc_end - 1\n", "\n", " # The indices (e.g. time) of the interpolation endpoints\n", " interp_t_start = valid_index[interp_loc_start]\n", " interp_t_end = valid_index[interp_loc_end]\n", "\n", " # The share of the distance between the two endpoints represented by each index location\n", " share_of_distance = (empty_index - interp_t_start)/(interp_t_end - interp_t_start)\n", "\n", " # Now apply to values, 1 column at a time\n", " newcolors = []\n", " valsT = vals.transpose()\n", " for column in valsT:\n", "\n", " # Select the valid values\n", " valid_vals = column[valid_loc]\n", "\n", " # These are the actual values of the interpolation ends\n", " interp_q_start = valid_vals[interp_loc_start]\n", " interp_q_end = valid_vals[interp_loc_end]\n", "\n", " newcolors.append(colorFader_array(interp_q_start, interp_q_end, mix=share_of_distance))\n", "\n", " newcolors = np.array(newcolors)\n", " newvals = newcolors.transpose()\n", "\n", " # Put the interpolated values into place\n", " interpolated_df = df.copy()\n", " interpolated_df.iloc[empty_loc] = newvals\n", "\n", " return interpolated_df" ] }, { "cell_type": "markdown", "id": "ad23b4eb", "metadata": {}, "source": [ "### 3. Application\n", "\n", "To illustrate the process, we'll create a df with some arbitrary colors, and create room to interpolate by adding blank intermediate rows." ] }, { "cell_type": "code", "execution_count": 4, "id": "3d25a9ab", "metadata": {}, "outputs": [], "source": [ "# Pick some arbitrary colours\n", "setofcolours1 = ['red', 'blue', 'yellow', 'gray', 'green']\n", "setofcolours2 = ['teal', 'darkviolet', 'orange', 'brown', 'ivory']\n", "\n", "# Set up the data frame\n", "df = pd.DataFrame(zip(setofcolours1, setofcolours2), columns=['colour1', 'colour2'])\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "b5bcddf8", "metadata": {}, "outputs": [], "source": [ "# Create blank rows inbetween\n", "emptyrowstoadd = 12\n", "df.index = df.index * (emptyrowstoadd + 1)\n", "new_index = range(df.index[-1] + 1)\n", "df = df.reindex(new_index)\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "69ca9a1b", "metadata": {}, "outputs": [], "source": [ "# Replace the NaN values with interpolated colours\n", "newdf = interpolate_hexcolor_df(df)" ] }, { "cell_type": "markdown", "id": "27a4dc92", "metadata": {}, "source": [ "### 4. Test\n", "\n", "Draw simple plots to check that the interpolation worked." ] }, { "cell_type": "code", "execution_count": 7, "id": "e40b46d5", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(8, 5))\n", "for x in newdf['colour1']:\n", " ax.axvline(x, color=x, linewidth=6) \n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 8, "id": "6023a33a", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(8, 5))\n", "for x in newdf['colour2']:\n", " ax.axvline(x, color=x, linewidth=6) \n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "f31335d1", "metadata": {}, "outputs": [], "source": [] } ], "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.9.9" } }, "nbformat": 4, "nbformat_minor": 5 }