Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Perceptually-Uniform, coloravedly-friendly Colormaps

Éviter l’arc-en-ciel/projet

À utiliser à la place

Choisissez des cartes de couleur conçues pour changement perçu uniforme (habituellement la légèreté monotonique) et la robustesse CVD:

Choisir la bonne carte pour vos données

Recettes rapides

Matplotlib + cmocéan

Installer le port de Matplotlib:

pip install cmocean

Définir une valeur par défaut globale et un graphique :

import matplotlib.pyplot as plt
import numpy as np
import cmocean

# Set a perceptually-uniform default
plt.rcParams["image.cmap"] = "viridis"

# Example data
x = np.linspace(-3, 3, 400)
y = np.linspace(-3, 3, 400)
X, Y = np.meshgrid(x, y)
Z = np.hypot(X, Y)

# Sequential (distance field)
plt.imshow(Z, origin="lower", cmap=cmocean.cm.thermal)
plt.colorbar(label="Temperature-like quantity")
plt.title("Sequential, perceptually-uniform")
plt.show()

# Diverging (positive/negative anomaly)
Z_anom = np.sin(X) * np.cos(Y)
plt.imshow(Z_anom, origin="lower", cmap=cmocean.cm.balance, vmin=-1, vmax=1)
plt.colorbar(label="Anomaly")
plt.title("Diverging around 0")
plt.show()

# Cyclic (phase)
Z_phase = np.angle(np.exp(1j*(X)))
plt.imshow(Z_phase, origin="lower", cmap=cmocean.cm.phase)
plt.colorbar(label="Phase [rad]")
plt.title("Cyclic for wrap-around variables")
plt.show()

Pour plus d’informations sur les cmocéaniques : matplotlib.org/cmocean

Outils en cm de Fabio Crameri

Fabio Crameri developed a sophisticated toolset for scientific color maps that are universally readable by color-vision deficient and color-blind individuals, and when printed in black and white. For background information, refer to Crameri et al. (2020) (direct link) and Fabio Crameri’s EGU blogpost. The Python package cmcrameri is hosted at https://pypi.org/project/cmcrameri .

Voici un moyen rapide d’utiliser les colormaps scientifiques cmcrameri en Python:

  1. Installer

pip install cmcrameri
  1. Utilisation de base avec Matplotlib

import matplotlib.pyplot as plt
import numpy as np
import cmcrameri.cm as cm

x = np.linspace(-3, 3, 400)
y = np.linspace(-3, 3, 400)
X, Y = np.meshgrid(x, y)
Z = np.hypot(X, Y)

plt.imshow(Z, cmap=cm.batlow, origin="lower")
plt.colorbar(label="value")
plt.title("cmcrameri: batlow")
plt.tight_layout()
plt.show()

Toutes les couleurs sont disponibles sous cmcrameri.cm.<name>.

  1. Variantes inversées et catégoriques

plt.imshow(Z, cmap=cm.batlow_r)

Les versions catégoriques (discretes) utilisent un suffixe « S », par exemple cm.batlowS.

  1. Parcourez rapidement les cartes disponibles

from cmcrameri import show_cmaps
show_cmaps()

Ceci affiche toutes les cartes de couleurs de cmcrameri installées dans la session Python.

  1. Bons par défaut et conseils

    • Données séquentielles : commencez par batlow ou oslo.

    • Divergence des données centrée sur zéro : essayez vik ou broc.

Ces palettes sont conçues pour être perceptuellement ordonnées et équitables, et pour rester lisibles pour de nombreuses formes de déficience color-vision.

  1. Définir un projet par défaut (facultatif)

import matplotlib as mpl
import cmcrameri.cm as cm
mpl.rcParams["image.cmap"] = cm.batlow

Matplotlib accepte un objet Colormap pour image.cmap. Voir les documents de matplotlib pour le comportement général. ([Matplotlib][4])

Utilisez cm.<name>, ajoutez _r pour inverser, S pour classer, et show_cmaps() pour explorer.

Faites des figures en aveugle (Linux + GNOME)

Une façon pratique de simuler les déficiences communes de la vision couleur directement sur votre écran est l’extension GNOME Shell ** Filtres en aveugle**. Il applique des filtres en temps réel afin que vous puissiez prévisualiser comment vos parcelles semblent sous Deuteranopia, Protanopia, Tritanopia, etc.

Liste de contrôle des meilleures pratiques

References
  1. Crameri, F., Shephard, G. E., & Heron, P. J. (2020). The Misuse of Colour in Science Communication. Nature Communications, 11(1), 5444. 10.1038/s41467-020-19160-7