Skip to main content
drawing

Docs Docs Quality Marimo PyPI version Python GitHub stars

buy me caffeine

Scientific color maps

Scicomap helps you choose, assess, and improve scientific colormaps so your figures remain readable and faithful to the underlying data.

Blog post

Scicomap Medium blog post (free)

Official Documentation

Tutorial notebook

Installation

pip install scicomap

Quickstart

import scicomap as sc

cmap = sc.ScicoSequential(cmap="hawaii")
cmap.assess_cmap(figsize=(14, 6))
cmap.draw_example()

CLI quickstart

# list families and colormaps
scicomap list
scicomap list sequential

# diagnose and preview
scicomap check hawaii
scicomap preview hawaii --type sequential --out hawaii-assess.png

# guided workflow and environment checks
scicomap wizard
scicomap doctor --json

# compare and fix
scicomap compare hawaii viridis thermal --type sequential --out compare.png
scicomap fix hawaii --type sequential --out hawaii-fixed.png

# apply a colormap to your own image
scicomap apply thermal --type sequential --image input.png --out output.png

# explicit long-form aliases for automation
scicomap cmap assess --cmap hawaii --type sequential --out hawaii-assess.png
scicomap docs llm-assets --html-dir docs/build/html

# one-command workflow report bundle
scicomap report --cmap hawaii --type sequential --out reports/hawaii
scicomap report --cmap thermal --image input.png --goal apply --format json

# profile-driven defaults
scicomap report --profile publication --cmap hawaii
scicomap report --profile cvd-safe --cmap thermal --format json
scicomap wizard --profile quick-look

CLI profiles

  • quick-look: fast diagnosis, minimal artifacts
  • publication: quality-first defaults (improve + fix + CVD checks)
  • presentation: publication defaults with brighter lift bias
  • cvd-safe: accessibility-first, CVD checks enforced
  • agent: deterministic machine mode (--format json, non-interactive)

Profile precedence

Configuration resolution order:

  1. Profile defaults
  2. Context inference (for example, image presence)
  3. Explicit user flags
  4. Strict profile enforcement (cvd-safe, agent)

Documentation map

Development

Use uv for local development and dependency synchronization. Notebook docs rendered with nbsphinx require a pandoc binary.

# create/update the lockfile
uv lock

# create the virtual environment and install project + extras
uv sync --extra lint --extra test --extra docs

# run commands in the project environment
uv run python -m pytest
uv run ruff check src tests
uv run ruff format --check src tests

# build web docs + LLM assets
uv run sphinx-build -n -b html docs/source docs/build/html
uv run python scripts/build_llm_assets.py

Read the Docs is kept as a temporary fallback during the Pages rollout.

Contribution guidelines are available in CONTRIBUTING.md. Release notes are tracked in CHANGELOG.md and GitHub releases.

Introduction

Scicomap is a package that provides scientific color maps and tools to standardize your favourite color maps if you don't like the built-in ones. Scicomap currently provides sequential, bi-sequential, diverging, circular, qualitative and miscellaneous color maps. You can easily draw examples, compare the rendering, see how colorblind people will perceive the color maps. I will illustrate the scicomap capabilities below.

This package is heavily based on the Event Horizon Telescope Plot package and uses good color maps found in the the python portage of the Fabio Crameri, cmasher, palettable, colorcet and cmocean

Motivation

The accurate representation of data is essential. Many common color maps distort data through uneven colour gradients and are often unreadable to those with color-vision deficiency. An infamous example is the jet color map. These color maps do not render all the information you want to illustrate or even worse render false information through artefacts. Scientist or not, your goal is to communicate visual information in the most accurate and appealing fashion. Moreover, do not overlook colour-vision deficiency, which represents 8% of the (Caucasian) male population.

Color spaces

Perceptual uniformity is the idea that Euclidean distance between colors in color space should match human color perception distance judgements. For example, a blue and red that are at a distance d apart should look as discriminable as green and purple that are at a distance d apart. Scicomap uses the CAM02-UCS color space (Uniform Colour Space). Its three coordinates are usually denoted by J', a', and b'. And its cylindrical coordinates are J', C', and h'. The perceptual color space Jab is similar to Lab. However, Jab uses an updated color appearance model that in theory provides greater precision for discriminability measurements.

  • Lightness: also known as value or tone, is a representation of a color's brightness
  • Chroma: the intrinsic difference between a color and gray of an object
  • Hue: the degree to which a stimulus can be described as similar to or different from stimuli that are described as red, green, blue, and yellow

Encoding information

  • Lightness J': for a scalar value, intensity. It must vary linearly with the physical quantity
  • hue h' can encode an additional physical quantity, the change of hue should be linearly proportional to the quantity. The hue h' is also ideal in making an image more attractive without interfering with the representation of pixel values.
  • chroma is less recognizable and should not be used to encode physical information

Color map uniformization

Following the references and the theories, the uniformization is performed by

  • Making the color map linear in J'
  • Lifting the color map (making it lighter, i.e. increasing the minimal value of J')
  • Symmetrizing the chroma to avoid further artefacts
  • Avoid kinks and edges in the chroma curve
  • Bitonic symmetrization or not

Scicomap

Choosing the right type of color maps

Scicomap provides a bunch of color maps for different applications. The different types of color map are

import scicomap as sc
sc_map = sc.SciCoMap()
sc_map.get_ctype()
dict_keys(['diverging', 'sequential', 'multi-sequential', 'circular', 'miscellaneous', 'qualitative'])

I'll refer to the The misuse of colour in science communication for choosing the right scientific color map

Get the matplotlib cmap

plt_cmap_obj = sc_map.get_mpl_color_map()

Choosing the color map for a given type

Get the color maps for a given type

sc_map = sc.ScicoSequential()
sc_map.get_color_map_names()
dict_keys(['afmhot', 'amber', 'amber_r', 'amp', 'apple', 'apple_r', 'autumn', 'batlow', 'bilbao', 'bilbao_r', 'binary', 'Blues', 'bone', 'BuGn', 'BuPu', 'chroma', 'chroma_r', 'cividis', 'cool', 'copper', 'cosmic', 'cosmic_r', 'deep', 'dense', 'dusk', 'dusk_r', 'eclipse', 'eclipse_r', 'ember', 'ember_r', 'fall', 'fall_r', 'gem', 'gem_r', 'gist_gray', 'gist_heat', 'gist_yarg', 'GnBu', 'Greens', 'gray', 'Greys', 'haline', 'hawaii', 'hawaii_r', 'heat', 'heat_r', 'hot', 'ice', 'inferno', 'imola', 'imola_r', 'lapaz', 'lapaz_r', 'magma', 'matter', 'neon', 'neon_r', 'neutral', 'neutral_r', 'nuuk', 'nuuk_r', 'ocean', 'ocean_r', 'OrRd', 'Oranges', 'pink', 'plasma', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'rain', 'rainbow', 'rainbow-sc', 'rainbow-sc_r', 'rainforest', 'rainforest_r', 'RdPu', 'Reds', 'savanna', 'savanna_r', 'sepia', 'sepia_r', 'speed', 'solar', 'spring', 'summer', 'tempo', 'thermal', 'thermal_r', 'thermal-2', 'tokyo', 'tokyo_r', 'tropical', 'tropical_r', 'turbid', 'turku', 'turku_r', 'viridis', 'winter', 'Wistia', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd'])

Assessing a color map

In order to assess if a color map should be corrected or not, scicomap provides a way to quickly check if the lightness is linear, how asymmetric and smooth is the chroma and how the color map renders for color-deficient users. I will illustrate some of the artefacts using classical images, as the pyramid and specific functions for each kind of color map.

An infamous example

import scicomap as sc
import matplotlib.pyplot as plt

# the thing that should not be
ugly_jet = plt.get_cmap("jet")
sc_map =  sc.ScicoMiscellaneous(cmap=ugly_jet)
f=sc_map.assess_cmap(figsize=(22,10))

Clearly, the lightness is not linear, has edges and kinks. The chroma is not smooth and asymmetrical. See the below illustration to see how bad and how many artefacts the jet color map introduces

Correcting a color map - Example

Sequential color map

Let's assess the built-in color map hawaii without correction:

sc_map = sc.ScicoSequential(cmap='hawaii')
f=sc_map.assess_cmap(figsize=(22,10))

The color map seems ok, however, the lightness is not linear and the chroma is asymmetrical even if smooth. Those small defects introduce artefact in the information rendering, as we can visualize using the following example

f=sc_map.draw_example()

We can clearly see the artefacts, especially for the pyramid for which our eyes should only pick out the corners in the pyramid (ideal situation). Those artefacts are even more striking for color-deficient users (this might not always be the case). Hopefully, scicomap provides an easy way to correct those defects:

# fixing the color map, using the same minimal lightness (lift=None), 
# not normalizing to bitone and 
# smoothing the chroma
sc_map.unif_sym_cmap(lift=None, 
                     bitonic=False, 
                     diffuse=True)

# re-assess the color map after fixing it                     
f=sc_map.assess_cmap(figsize=(22,10))

After fixing the color map, the artefacts are less present

All the built-in color maps

Sequential

Diverging

Mutli-sequential

Miscellaneous

Circular

Qualitative

References

Release files for scicomap 1.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for scicomap 1.1.1
File Size Uploaded
scicomap-1.1.1.tar.gz 2.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for scicomap 1.1.1
File Interpreter ABI Platform
scicomap-1.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 4.3 MB

Release files / scicomap-1.1.1.tar.gz

Download URL scicomap-1.1.1.tar.gz
Size 2.1 MB
Tags Source
SHA-256 checksum
How to use checksums
dd53a29bf51608a9dff13aa6d0074f33a67c12f4f967c331fe9e27e039367cd9
BLAKE2b-256 checksum
How to use checksums
127fd97f55c8388749cfd472acc49d2312e58fed4ac6cc1815047840d1980959
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.

Transparency log

Release files / scicomap-1.1.1-py3-none-any.whl

Download URL scicomap-1.1.1-py3-none-any.whl
Size 2.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
2378e1e4847dac82c8dc4f5f7af1125d3696d0878e73bfb690ce7e2cad83da04
BLAKE2b-256 checksum
How to use checksums
1d3d171bd260f2d16e49a8514b3e384552996f5da5ac204e9a510234b914c978
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.1 This release

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.4.1

2 release files

0.4

2 release files

0.3

2 release files

0.2

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page