Skip to main content

Nicopal: colour palettes designed by a protanopic student.

Project description

Nicopal

Contexte

Ces palettes de couleurs ont été créées par Nicolas Tharaud en s’inspirant de la méthode de Fabio Crameri [1]. Elles ont pour but de représenter des variables climatiques de la façon la plus juste possible sans sur ou sous interprétation visuelle. Une palette de couleur doit être judicieusement choisie en fonction de la variable à représenter afin que celle-ci soit interprétée de la même manière par chaque observateur. Les palettes de couleurs ont été créées par un daltonien protanope (déficience couleur rouge). Par ailleurs, le contraste de certaines palettes sera plus visible pour un daltonien protanope, que pour une personne possédant une vision « normale » ou bien ayant un autre type de daltonisme et inversement.


Méthodologie de validation des palettes et création d'un score de validité scientifique

Les palettes de couleurs incluses dans Nicopal ont été évaluées à l’aide d’un protocole de validation perceptuelle inspiré des principes des Scientific Colour Maps et de la colorimétrie perceptuelle.

Les tests reposent principalement sur l’espace colorimétrique CIELAB et sur la métrique de différence perceptuelle CIEDE2000 (ΔE), qui permet d’estimer la distance perceptuelle entre deux couleurs telle qu’elle est perçue par l’oeil humain.

Différentes procédures de validation sont appliquées selon le type de palette :

  • Palettes séquentielles
  • Palettes divergentes
  • Palettes hybrides

L’objectif est de proposer des palettes qui soient :

  • perceptuellement cohérentes
  • lisibles pour la visualisation de données
  • robustes face aux différents types de daltonismes

Validation des palettes séquentielles

Test de monotonie de la luminosité (L*)

La composante L* de l’espace CIELAB représente la luminosité perceptuelle (0 = noir, 100 = blanc).

Pour une palette séquentielle correcte, la luminosité doit évoluer de manière monotone le long de la palette. Cela garantit qu'une augmentation de la valeur des données correspond à une progression visuelle cohérente.

Ce test permet d’éviter les inversions perceptuelles, où certaines valeurs pourraient apparaître plus claires ou plus sombres que leurs voisines.


Test d’uniformité perceptuelle (ΔE)

La différence perceptuelle ΔE CIEDE2000 est calculée entre chaque paire de couleurs consécutives.

Une palette est considérée comme perceptuellement régulière lorsque les valeurs de ΔE restent relativement constantes. Cette régularité est évaluée à l’aide du coefficient de variation :

r = sigma_ΔE / mu_ΔE

où :

  • sigma_ΔE est l'écart-type des différences perceptuelles
  • mu_ΔE est leur moyenne

Un ratio faible indique des transitions de couleurs homogènes.


Test de sauts perceptuels

Ce test vise à détecter des transitions trop abruptes entre deux couleurs adjacentes.

Pour cela, le ΔE maximal est comparé au ΔE moyen :

ΔE_max < 3 × ΔE_mean

Cette contrainte permet d’éviter l’apparition d'artefacts visuels dans la palette.


Test en niveaux de gris

Les couleurs de la palette sont converties en niveaux de gris afin de vérifier que la progression reste perceptible sans couleur.


Test de robustesse aux différents daltonismes

Afin d’évaluer l’accessibilité des palettes, des simulations de déficiences de la vision des couleurs sont réalisées pour les trois types de daltonisme :

  • Deuteranomaly
  • Protanomaly
  • Tritanomaly

La régularité perceptuelle des transitions de couleurs est ensuite évaluée pour chaque simulation.


Étendue perceptuelle

L’étendue perceptuelle correspond à la distance perceptuelle cumulée ΔE le long de la palette.

Cette valeur représente la variation perceptuelle totale de la palette. Une étendue trop faible signifie que les couleurs sont trop proches perceptuellement, tandis qu’une étendue plus large permet une meilleure discrimination des valeurs.


Score Nicopal Sequential

Les résultats des différents tests sont combinés dans un Score Nicopal Sequential, qui regrouppe les critères suivants :

  • monotonie de la luminosité L*
  • uniformité perceptuelle ΔE
  • absence de sauts perceptuels
  • cohérence en niveaux de gris
  • robustesse au daltonisme
  • étendue perceptuelle

Le score final est normalisé sur 10 points et doit être supérieur à 8 pour que la palette séquentielle soit considérée comme valide scientifiquement.


Validation des palettes divergentes

Les palettes divergentes sont utilisées pour représenter des données centrées autour d’une valeur de référence (par exemple zéro).

Leur validation inclut des contraintes supplémentaires liées à leur structure symétrique.


Monotonie de la luminosité autour du centre

Une palette divergente est divisée en deux branches autour d’un point central.

La luminosité doit évoluer de manière monotone de part et d’autre du centre afin de préserver une progression perceptuelle cohérente.


Neutralité du centre

Le centre d’une palette divergente doit être quasi neutre, c’est-à-dire proche du gris dans l’espace CIELAB.

La neutralité est évaluée à partir de la chroma :

C = sqrt(a^2 + b^2)

Une chroma faible indique une couleur proche du gris.


Symétrie perceptuelle

Une palette divergente équilibrée doit présenter une distance perceptuelle similaire entre le centre et les deux extrémités de la palette.

Cette propriété est évaluée en comparant les distances cumulées ΔE de chaque côté du centre.


Uniformité perceptuelle

La régularité des transitions est également évaluée séparément pour chaque branche de la palette afin de garantir une progression visuelle homogène.


Symétrie de teinte

Les deux branches de la palette doivent idéalement correspondre à des teintes opposées dans l’espace colorimétrique.

Cette propriété est évaluée à partir de l’angle de teinte moyen de chaque côté de la palette.


Robustesse au daltonisme

Comme pour les palettes séquentielles, des simulations de vision altérée sont réalisées afin de vérifier que la structure divergente reste perceptible.


Score Nicopal Diverging

Le score global combine les critères suivants :

  • monotonie de L*
  • neutralité du centre
  • symétrie perceptuelle
  • uniformité ΔE
  • absence de sauts perceptuels
  • symétrie de teinte
  • robustesse au daltonisme

Le score final est normalisé sur 10 points et doit être supérieur à 7 pour que la palette divergente soit considérée comme valide scientifiquement.


Validation des palettes hybrides

Les palettes hybrides combinent des propriétés catégorielles et perceptuelles. Elles sont généralement utilisées pour représenter un nombre limité de classes tout en conservant une cohérence visuelle.


Distance perceptuelle minimale

La différence perceptuelle ΔE CIEDE2000 est calculée entre les couleurs consécutives.

Afin de garantir une distinction visuelle suffisante entre les catégories, la condition suivante est appliquée :

ΔE ≥ 15

Ce seuil correspond à une différence perceptuelle clairement identifiable pour la plupart des observateurs.


Robustesse au daltonisme

La même contrainte de séparation perceptuelle (ΔE ≥ 15) est appliquée après simulation des principales déficiences de la vision des couleurs (deuteranomaly, protanomaly, tritanomaly).


Score Nicopal Hybrid

Le score final est basé sur :

  • la proportion de transitions respectant la condition ΔE ≥ 15 dans la palette originale
  • la même proportion évaluée après simulation de daltonisme

Le score est normalisé sur 10 points et doit être supérieur à 7 pour que la palette hybride soit considérée comme valide scientifiquement.


Bibliographie :

[1] Crameri, Fabio, Grace E. Shephard, and Philip J. Heron. 2020. ‘The Misuse of Colour in Science Communication’. Nature Communications 11(1): 5444. doi:10.1038/s41467-020-19160-7.

[2] Yang, Yang, Jun Ming, and Nenghai Yu. 2012. ‘Color Image Quality Assessment Based on CIEDE2000’. Advances in Multimedia 2012: 1–6. doi:10.1155/2012/273723.

La partie Méthodologie a été co-écrite avec l'agréable collaboration de ChatGPT.


Installation

Dans une console ou un terminal Python :

pip install nicopal


Utilisation

0. Chargement du package

import nicopal as ncp


1. Afficher la version du package

print(ncp.__version__)

Affiche la version et la description complète du package.


2. Tester rapidement toutes les palettes

print(ncp.pal_test())

Vérifie que toutes les palettes se chargent correctement.
Affiche un message de confirmation si tout est valide.


3. Lister les palettes disponibles

print(ncp.pal_list())

Affiche tous les noms de palettes disponibles dans Nicopal.


4. Visualiser une palette

print(ncp.pal_show("Lithium"))

Affiche un gradient de la palette choisie. pal_show peut être utilisé pour toutes les palettes de pal_list().


5. Visualiser toutes les palettes

print(ncp.pal_all())

Affiche toutes les palettes et leurs noms associés.

6. Charger une palette en liste HEX

colors = ncp.pal_hex("Lithium")
print(colors)

Renvoie la palette en codes HEX correspondant.


7. Utiliser une palette comme colormap

colormap = ncp.pal("Lithium")
colormap_r = ncp.pal("Lithium", reverse=True)

ax.contourf(x, y, z, cmap=colormap)

reverse=True permet d’inverser la colormap.
ax.contourf peut être remplacé par toute autre fonction Matplotlib acceptant un colormap.
x, y et z sont vos données à visualiser.


8. Extraire des couleurs d'une palette

sample = ncp.pal_sample("Carbon", 6) x = ["A","B","C","D","E","F"] y = [3,7,5,6,4,8] plt.bar(x, y, color=sample) plt.show()

Renvoie n couleurs discrètes extraites de la palette.


9. Démonstration d'une palette

print(ncp.pal_demo("Lithium")

Affiche un exemple de visualisation utilisant la palette choisie.


Nom des palettes

Boron | Carbon | Chlorine | Cobalt | Iodine | Iron | Lithium | Magnesium | Manganese | Nitrogen | Oxygen | Selenium | Silicon | Sodium | Sulfur | Vanadium |

:) NT


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nicopal-0.3.1.tar.gz (192.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nicopal-0.3.1-py3-none-any.whl (192.7 kB view details)

Uploaded Python 3

File details

Details for the file nicopal-0.3.1.tar.gz.

File metadata

  • Download URL: nicopal-0.3.1.tar.gz
  • Upload date:
  • Size: 192.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.12

File hashes

Hashes for nicopal-0.3.1.tar.gz
Algorithm Hash digest
SHA256 722a2046eeb07afacbe7bd2cd96a29ab6793879574caeea0d7f413a1107d2fb0
MD5 74e0ca293bb3a808deec0cae347a973a
BLAKE2b-256 bb5da13930b4712ca4e9d31c9e2bda122d034658e36e0c8b0e2156efe88689c5

See more details on using hashes here.

File details

Details for the file nicopal-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: nicopal-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 192.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.12

File hashes

Hashes for nicopal-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b6d9afec306f9d49cf0f6df0d8d13f72b6aa8e23c221c7b521fbb182ebe8539c
MD5 3a87ac14b6a88b385796328e4a362160
BLAKE2b-256 6d945043084202e5e388c46dc73a4da9f66e471648065105e9680e991b2e0284

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page