Dans le domaine de l’ingénierie des données et de l’analyse scientifique, la communication visuelle constitue le vecteur privilégié de transmission du savoir empirique. La transposition de jeux de données massifs ou multidimensionnels au sein d’un espace cartésien bidimensionnel repose fondamentalement sur l’intégrité sémiotique des systèmes de coordonnées. Au cœur de cette médiation entre les abstractions numériques et l’appareil cognitif de l’observateur se dressent les graduations, communément désignées sous l’anglicisme ticks dans l’écosystème de programmation scientifique. Bien loin de n’être que de simples artifices typographiques ou des ornements marginaux, ces repères discrets régissent l’étalonnage métrique de la pensée computationnelle. Ils délimitent la trame spatiale, imposent le rythme de lecture et définissent les échelles de grandeur à partir desquelles s’opèrent les déductions critiques, la vérification des hypothèses statistiques et l’évaluation des ordres de grandeur.
La bibliothèque logicielle Matplotlib, conçue à l’origine par John D. Hunter, s’est imposée depuis plus de deux décennies comme le socle paradigmatique de la visualisation graphique au sein de l’environnement scientifique Python. Érigée sur une architecture logicielle inspirée de l’environnement MATLAB mais pleinement intégrée aux structures de calcul vectoriel de NumPy, cette bibliothèque offre un contrôle granulaire sans équivalent sur chacun des éléments constitutifs d’une figure. Cependant, cette flexibilité architecturale s’accompagne d’un paradoxe récurrent : le moteur de rendu par défaut adopte des règles heuristiques automatisées qui, si elles s’avèrent pertinentes pour l’exploration rapide, faillissent fréquemment dès lors qu’il s’agit de satisfaire aux exigences drastiques des publications scientifiques de premier plan, de l’impression typographique ou de l’ergonomie cognitive des tableaux de bord interactifs.
La maîtrise de la densité des graduations représente ainsi un passage obligé pour quiconque aspire à transcender les rendus génériques et standardisés. Ajuster avec rigueur le nombre de repères affichés sur les axes des abscisses et des ordonnées relève autant de l’artisanat logiciel que de la psychologie de la perception. Un sous-dimensionnement des intervalles génère une incertitude métrologique et contraint le lecteur à des extrapolations hasardeuses, tandis qu’une surabondance de marques sature l’espace visuel, provoquant collisions typographiques et fatigue cognitive. Le présent traité a pour vocation d’explorer exhaustivement les soubassements théoriques, algorithmiques et syntaxiques du contrôle du nombre de graduations dans Matplotlib, en guidant le chercheur, l’ingénieur et le statisticien vers une pratique réfléchie, reproductible et visuellement irréprochable.
- 1. Fondements théoriques : Définition et rôle perceptif des graduations dans Matplotlib
- 2. Syntaxe fondamentale et sémantique de plt.locator_params()
- 3. Ajustement simultané du nombre de graduations sur les deux axes cartésiens
- 4. Contrôle unilatéral du nombre de graduations sur l’axe des abscisses (Axe X)
- 5. Modulation unilatérale du nombre de graduations sur l’axe des ordonnées (Axe Y)
- 6. Le paradigme orienté objet : ax.locator_params() et la manipulation des sous-graphiques
- 7. Algorithmes sous-jacents : Analyse approfondie de la classe MaxNLocator
- 8. Graduations majeures versus mineures : Granularité et hiérarchie visuelle
- 9. Psychologie cognitive de la visualisation : Déterminer la densité idéale de repères
- 10. Cas complexes : Échelles logarithmiques, dates et axes asymétriques
- 11. Diagnostic des anomalies, conflits de style et résolution de bugs
- 12. Protocole méthodologique et standardisation pour la recherche scientifique
- Références
1. Fondements théoriques : Définition et rôle perceptif des graduations dans Matplotlib
L’étude systématique de la visualisation de données requiert une déconstruction formelle des éléments constitutifs de l’espace graphique. L’axe cartésien, bien que perçu intuitivement comme une entité monolithique par l’utilisateur profane, représente en réalité un agencement hautement hiérarchisé de modules logiciels et de primitives géométriques interconnectées au sein du pipeline de rendu graphique.
1.1 Anatomie d’un axe Matplotlib : Repères, étiquettes et localisateurs
Au sein de l’architecture logicielle de Matplotlib, une distinction structurelle fondamentale doit être immédiatement établie entre l’objet englobant Axis, les repères géométriques ponctuels (les ticks) et les glyphes alphanumériques qui leur sont assignés (les tick labels). L’axe, modélisé par la classe matplotlib.axis.Axis, gère la projection unidimensionnelle des valeurs continues du domaine de données vers l’espace coordonné discret de l’écran ou de la page imprimée. Cette tâche ne s’effectue pas de manière arbitraire : elle est déléguée à deux sous-systèmes fonctionnels autonomes mais coordonnés, à savoir le localisateur (Locator) et le formateur (Formatter), tous deux hébergés au sein du sous-module spécialisé matplotlib.ticker.
Le Locator possède la charge algorithmique exclusive de déterminer la position spatiale des graduations le long de l’étendue métrique de l’axe. Il répond formellement à la question : où doivent se matérialiser les repères ? Le Formatter, quant à lui, intervient en aval de cette discrétisation spatiale pour traduire la valeur numérique brute en une chaîne de caractères lisible par l’être humain, en gérant la notation scientifique, le nombre de décimales, la typographie mathématique ou les symboles d’unités associées. Les graduations physiques consistent en de courts segments linéaires orthogonaux à la ligne d’axe, agissant comme des ancres géométriques. L’étiquette textuelle s’aligne ensuite sur ce repère selon des règles de transformation affine prédéfinies.
La distribution spatiale de ces repères influence directement la facilité avec laquelle le lecteur décode les coordonnées cartésiennes d’un point ou d’une tendance. D’un point de vue mathématique, la graduation opère une discrétisation régulière ou semi-régulière d’une variable continue sous-jacente. Si le maillage spatial engendré par les graduations est déficient, la capacité de l’œil à projeter mentalement un point situé au centre du panneau graphique vers l’axe correspondant est compromise. L’intelligibilité des coordonnées dépend d’une chaîne de repérage robuste où le localisateur fournit une grille conceptuelle harmonieuse garantissant une fidélité d’interprétation immédiate.
1.2 Perception visuelle et charge cognitive face à la densité des graduations
L’évaluation de la qualité d’une figure ne saurait être dissociée de la théorie de la charge cognitive, formulée initialement par John Sweller, et des travaux fondateurs de William S. Cleveland et Robert McGill sur la perception graphique élémentaire. Lorsqu’un individu analyse un graphique, sa mémoire de travail traite concurremment le tracé des données (le signal utile) et l’ensemble des éléments de contextualisation métrique (le bruit nécessaire). Une surabondance d’intervalles numériques engendre un phénomène pernicieux de saturation perceptive. Au lieu de faciliter l’inférence quantitative, une multitude resserrée de graduations fragmente l’attention visuelle de l’observateur.
Chaque repère supplémentaire impose une micro-tâche cognitive d’identification, de lecture textuelle et d’évaluation différentielle. Les lois de la psychophysique démontrent que l’œil humain n’évalue pas les variations spatiales de façon infiniment continue ; il opère par paliers et par sauts saccadiques. Lorsque l’espacement inter-graduations descend sous un seuil critique, le gain de précision théorique obtenu par la présence d’une valeur chiffrée supplémentaire s’annule devant l’encombrement graphique engendré. Ce compromis entre résolution géométrique et lisibilité globale du tracé constitue la pierre angulaire de l’éthique de la visualisation, telle que promue par Edward Tufte sous le concept de ratio encre-données (data-ink ratio).
L’objectif visé lors de la configuration du nombre de repères consiste à minimiser la charge cognitive extrinsèque — c’est-à-dire l’effort d’interprétation purement imputable à la disposition graphique — tout en maximisant la charge germane, qui soutient l’intégration conceptuelle de l’information. Un tracé scientifique optimal présente une discrétisation suffisamment aérée pour éviter la redondance textuelle, tout en préservant un nombre suffisant de points d’ancrage pour permettre une estimation quantitative précise sans extrapolation hasardeuse.

1.3 Comportement natif de Matplotlib dans l’attribution automatique des graduations
Par défaut, l’environnement Matplotlib déploie des stratégies d’optimisation automatisées pour configurer les graduations des axes lors de l’exécution des méthodes de traçage. Pour les axes cartésiens linéaires standards, l’infrastructure graphique initialise de manière implicite un localisateur de type AutoLocator. Ce dernier hérite des propriétés fondamentales de la classe MaxNLocator, conçue pour choisir dynamiquement un pas d’intervalle intuitif (typiquement des multiples de 1, 2, 2.5, 5 ou 10) tout en respectant une limite supérieure préprogrammée sur le décompte total des repères générés.
Dans le cas des séries temporelles exploitant les structures de dates, la bibliothèque instancie automatiquement l’objet AutoDateLocator. Ce mécanisme tente d’adapter l’échelle de temps à la volée, basculant des millisecondes aux siècles en passant par les jours ou les mois en fonction des bornes extrêmes fournies. Toutefois, ces algorithmes d’attribution automatique se heurtent rapidement à des limites structurelles insurmontables dès lors qu’ils sont confrontés à des jeux de données denses, asymétriques ou distribués sur des intervalles non standardisés. L’automatisation repose sur des hypothèses géométriques par défaut fondées sur les dimensions standard d’une figure Matplotlib (habituellement 6,4 par 4,8 pouces).
Lorsque l’utilisateur redimensionne la figure, exporte l’image dans un format vectoriel destiné à une colonne étroite d’un article scientifique, ou trace des données dont les ordres de grandeur varient de manière abrupte, l’algorithme automatique échoue fréquemment à prévenir le chevauchement typographique des étiquettes textuelles (tick collision). Ce phénomène conduit à des empilements de caractères illisibles et dégrade substantiellement la rigueur esthétique et scientifique de la communication. L’intervention humaine manuelle devient alors un impératif méthodologique incontournable.
2. Syntaxe fondamentale et sémantique de plt.locator_params()
Face à la nécessité de contraindre l’agencement métrique des tracés sans avoir à réécrire intégralement la logique des localisateurs sous-jacents, l’interface procédurale de haut niveau propose une fonction dédiée : plt.locator_params(). Cette directive permet d’ajuster les paramètres du localisateur actif de manière directe et concise.
2.1 Décomposition des paramètres de la fonction plt.locator_params()
L’appel à la fonction plt.locator_params() agit directement sur l’objet Axes courant au sein de la machine à états de Pyplot. Sa signature accepte une série d’arguments nommés permettant de restreindre ou d’élargir la granularité de discrétisation des axes. L’argument directeur le plus fréquemment sollicité est incontestablement nbins, un entier qui spécifie le nombre maximal de bacs ou d’intervalles que le localisateur est autorisé à générer le long de la dimension ciblée.
L’argument axis joue un rôle de ciblage directionnel sélectif. En acceptant les chaînes de caractères littérales 'x', 'y' ou 'both', il autorise une modulation chirurgicale soit sur la dimension horizontale, soit sur la dimension verticale, soit simultanément sur l’intégralité du plan cartésien. Parallèlement, des arguments booléens complémentaires permettent d’affiner drastiquement le comportement arithmétique de la discrétisation :
- tight : valeur booléenne qui, lorsqu’elle est positionnée à
True, ordonne au localisateur d’étirer l’affichage des repères jusqu’aux frontières exactes de la plage de données, réduisant ainsi les marges intérieures par rapport aux limites d’axes fixées. - integer : indicateur booléen stipulant de manière impérative que les positions des graduations doivent impérativement coïncider avec des nombres entiers relatifs, éliminant formellement toute subdivision fractionnaire ou décimale.
- prune : paramètre permettant d’élaguer sélectivement les graduations situées aux extrémités absolues de l’axe (
'lower','upper'ou'both'), empêchant ainsi les étiquettes extrêmes d’interférer avec le cadre ou les axes adjacents.
Cette interaction transparente entre l’interface procédurale et le gestionnaire interne de figures s’avère particulièrement puissante pour les scripts de traitement rapide, garantissant une flexibilité immédiate tout en limitant la verbosité syntaxique.
2.2 La nature heuristique de l’argument nbins
Une incompréhension persistante parmi les développeurs et les chercheurs concerne la nature mathématique stricte du paramètre nbins. Il est fondamental d’assimiler que nbins ne constitue en aucune manière une directive impérative exigeant l’affichage d’un nombre exact de graduations. Il s’agit formellement d’une borne supérieure recommandée, transmise à un algorithme d’optimisation numérique heuristique. L’objectif premier de Matplotlib n’est pas de diviser mécaniquement l’intervalle par un facteur entier arbitraire, mais de privilégier l’intelligibilité des nombres choisis.
Pour un esprit humain, une graduation marquant des valeurs telles que 10, 20, 30 est infiniment plus lisible qu’une graduation divisée strictement en 7 segments égaux menant à des repères positionnés à 14.28, 28.57 ou 42.85. L’algorithme de localisation explore donc un sous-ensemble discret de pas admissibles, généralement structurés selon des facteurs décimaux ou des subdivisions harmoniques (1, 2, 2.5, 5 et leurs multiples par dix), afin de trouver la combinaison qui maximise la régularité sans excéder le seuil imposé par nbins.
Par conséquent, assigner nbins=5 peut se traduire par l’apparition effective de 4, 5 ou 6 graduations sur l’axe final en fonction des limites réelles de la plage de données. Cette divergence entre la valeur passée en paramètre et le décompte visuel réel n’est point une anomalie logicielle ou un dysfonctionnement computationnel ; elle matérialise l’arbitrage délibéré du moteur graphique en faveur de l’ergonomie visuelle et de la clarté décimale.
3. Ajustement simultané du nombre de graduations sur les deux axes cartésiens
Dans la configuration standard d’une figure scientifique bidimensionnelle, l’harmonisation de l’échelle perceptuelle requiert une synchronisation minutieuse entre l’axe horizontal et l’axe vertical. Une disparité excessive de densité entre les deux coordonnées crée un déséquilibre sémiotique qui oriente inconsciemment le regard et peut induire en erreur l’interprétation des gradients de dispersion.
3.1 Mise en œuvre conjointe par appels successifs de la fonction
La première stratégie d’ajustement global repose sur l’exécution canonique séquentielle de la directive plt.locator_params() pour l’abscisse puis pour l’ordonnée. Cette formulation explicite, bien que plus verbeuse, confère au concepteur une granularité de contrôle optimale en lui permettant de moduler les contraintes de chaque dimension de manière indépendante tout en conservant une lecture limpide du flux d’instructions.
Considérons un scénario analytique typique impliquant un nuage de points modélisant la distribution d’une mesure biologique en fonction de la température ambiante. L’appel séquentiel consiste à spécifier d’abord plt.locator_params(axis='x', nbins=6) suivi immédiatement sur la ligne subséquente de plt.locator_params(axis='y', nbins=4). Lors de l’exécution, l’interpréteur applique successivement les contraintes aux deux instances de localisation distinctes hébergées par l’axe courant.
Ce procédé garantit que les particularités géométriques de la boîte englobante (l’aspect ratio) soient scrupuleusement respectées. Si le graphique présente une largeur substantiellement supérieure à sa hauteur — format panoramique prédominant dans les visualisations de séries chronologiques ou d’analyses de survie — le ratio d’intervalles entre X et Y se trouve ainsi proportionné pour éviter l’écrasement ou l’étirement excessif de la trame de lecture.
3.2 Utilisation de l’argument global axis=’both’
Lorsque la figure s’inscrit dans un ratio d’aspect parfaitement carré (1:1) ou lorsqu’une normalisation visuelle uniforme est requise à travers les dimensions, l’utilisation de l’argument synthétique axis='both' offre une économie de code appréciable. L’instruction unique plt.locator_params(axis='both', nbins=5) applique de manière isomorphe la même enveloppe de contrainte aux deux dimensions du repère.
Toutefois, cette commodité syntaxique doit être maniée avec circonspection sur le plan méthodologique. L’application d’un quota rigoureusement identique de repères sur des axes aux longueurs graphiques disparates engendre inévitablement une rupture de la régularité spatiale perçue. Sur un tracé rectangulaire large, une valeur de nbins=5 sur l’axe des abscisses produit des espacements considérables entre repères, tandis que cette même valeur sur un axe des ordonnées restreint peut générer une sensation de confinement ou de proximité excessive des étiquettes.
De surcroît, les ordres de grandeur physiques des variables représentées diffèrent fréquemment. L’égalisation aveugle du nombre de compartiments d’échelle peut convenir à des représentations spatiales géographiques ou des tracés de diagrammes de phases, mais s’avère souvent inadaptée à la confrontation de grandeurs physiques hétérogènes (par exemple, une durée en millisecondes confrontée à un potentiel d’action en microvolts).

3.3 Étude de cas : Normalisation visuelle d’un repère bi-dimensionnel
Pour appréhender concrètement l’impact visuel de cette régulation, il convient d’analyser la métamorphose d’une figure standard avant et après le paramétrage restrictif des graduations. Par défaut, sur un ensemble de données distribué sur l’intervalle [0, 100] sur les deux axes, Matplotlib déploie fréquemment entre 6 et 10 repères par dimension, aboutissant à un quadrillage virtuel dense pouvant comporter jusqu’à une centaine de sous-zones perceptuelles.
En imposant plt.locator_params(axis='both', nbins=4), la scène visuelle s’épure instantanément. Les localisateurs sélectionnent des pas arrondis de 25 ou 50 unités. Le bruit graphique de fond est drastiquement réduit, permettant aux singularités du nuage de points — telles que des regroupements (clusters), des valeurs aberrantes ou des ruptures de pente — d’émerger au premier plan de la perception visuelle de l’analyste.
Ce travail d’épuration garantit l’intégrité des proportions mathématiques tout en soulageant l’effort de focalisation. L’observateur n’est plus contraint d’assimiler une succession ininterrompue d’étiquettes numériques marginales, mais dispose d’un canevas synthétique sur lequel la structure interne des données acquiert une lisibilité immédiate et pérenne.
4. Contrôle unilatéral du nombre de graduations sur l’axe des abscisses (Axe X)
L’axe horizontal cristallise une vulnérabilité typographique majeure dans la mise en page des visualisations : la largeur physique intrinsèque des étiquettes textuelles. Contrairement à l’axe vertical où les textes s’empilent verticalement le long d’une colonne, les étiquettes de l’axe X s’alignent côte à côte le long de la ligne de base, entrant facilement en collision dès lors que la résolution ou la taille de la figure diminue.
4.1 Isolement de l’axe horizontal via axis=’x’
L’isolation délibérée de la dimension horizontale s’obtient au moyen de l’expression plt.locator_params(axis='x', nbins=N). Cette spécification unilatérale préserve scrupuleusement l’état du localisateur de l’axe vertical tout en contraignant le partitionnement horizontal. Elle répond idéalement aux problématiques soulevées par les variables continues étendues sur un domaine spatial ou chronologique particulièrement vaste.
La présence de valeurs numériques composées de nombreux chiffres significatifs (comme les indices boursiers, les coordonnées géographiques en virgule flottante ou les timestamps étendus) rend le risque de chevauchement extrêmement critique. En réduisant drastiquement nbins sur l’axe X (souvent à des valeurs comprises entre 4 et 6), le concepteur libère un espace horizontal suffisant pour que chaque chaîne de caractères dispose d’une marge de respiration adéquate sans devoir altérer la structure de l’ordonnée.
Ce cloisonnement analytique s’avère particulièrement pertinent dans les contextes de publication multicanale, où un même script produit à la fois des visualisations pour des écrans haute résolution et des vignettes pour des rapports imprimés compacts. L’ajustement ciblé de l’axe X garantit la résilience du rendu face aux variations drastiques d’échelle de mise en page.
4.2 Gestion des espaces restreints et orientation typographique
Dans des configurations géométriques extrêmes où le nombre de graduations horizontales demeure incompressible sous peine de dénaturer la compréhension du phénomène physique sous-jacent, la modulation de nbins doit impérativement s’associer à des techniques complémentaires d’aménagement spatial. La rotation angulaire des étiquettes d’abscisse représente le levier de conciliation par excellence.
L’application d’un paramètre nbins=6 conjugué à une instruction de rotation typographique, telle que plt.xticks(rotation=45, ha='right'), métamorphose la projection textuelle. L’inclinaison des glyphes modifie le rectangle de délimitation (bounding box) de l’étiquette, réduisant drastiquement son emprise sur l’axe horizontal au profit d’un empiétement vertical facilement absorbable par la marge inférieure de la figure.
Cette synergie entre compression algorithmique du nombre de pas et réorientation géométrique préserve la continuité perceptive le long de la ligne de base. Elle optimise l’ergonomie de lecture, en évitant les heurts visuels tout en conservant une chaîne séquentielle cohérente, particulièrement précieuse lors du tracé de distributions chronologiques ordonnées où la rupture de régularité est immédiatement pénalisante.
5. Modulation unilatérale du nombre de graduations sur l’axe des ordonnées (Axe Y)
L’axe des ordonnées régit l’interprétation des amplitudes, des hauteurs de distribution et des taux de variation. Sa manipulation exige une rigueur statistique sans faille, car une réduction excessive ou mal calibrée du nombre de graduations peut gommer visuellement des variations critiques ou induire des interprétations biaisées de la variance expérimentale.
5.1 Restriction ciblée de la hauteur d’échelle via axis=’y’
La manipulation chirurgicale de la dimension verticale s’opère via plt.locator_params(axis='y', nbins=N). Cette démarche trouve sa justification première dans les contextes où l’amplitude numérique des données présente une grande stabilité, mais où l’algorithme natif a indûment multiplié les subdivisions intermédiaires en générant des étiquettes décimales superflues.
Il existe néanmoins un seuil critique en deçà duquel la simplification de l’axe Y nuit gravement à la restitution scientifique des faits. Abaisser nbins à une valeur trop faible (par exemple 2 ou 3) sur une courbe représentant une réponse cinétique subtile lisse artificiellement la perception de l’observateur. L’absence de repères intermédiaires empêche l’œil d’évaluer la convexité d’une trajectoire ou la dispersion des résidus statistiques.
Le calibrage de l’ordonnée doit ainsi respecter la structure intrinsèque du signal mesuré. Pour des variations exponentielles ou logistiques, le localisateur doit conserver suffisamment d’intervalles pour que l’asymptote et le point d’inflexion soient immédiatement corrélés à des grandeurs tangibles sur l’axe vertical, préservant ainsi l’intelligibilité fonctionnelle de la modélisation mathématique.
5.2 Préservation des métriques de référence et du zéro absolu
Un danger méthodologique majeur guettant le praticien modifiant nbins sur l’axe Y réside dans la disparition inopinée des métriques de référence cardinales, au premier rang desquelles figure l’origine nulle (le zéro absolu). Dans de nombreux diagrammes en barres ou représentations de grandeurs physiques positives (masses, concentrations, durées), l’omission ou le déplacement du repère zéro altère radicalement le contrat de lecture sémiotique en déformant la proportion apparente des hauteurs géométriques.
Lorsque le moteur MaxNLocator recalcule les graduations sous la contrainte d’un nbins réduit, il peut être tenté mathématiquement, pour optimiser l’espacement décimal, d’ancrer l’intervalle inférieur sur une valeur arbitraire non nulle (par exemple 10 ou 20) si les données commencent à ces niveaux, tronquant ainsi la base visuelle. Ce biais d’illusion d’échelle dramatise artificiellement des fluctuations mineures au détriment de la perspective d’ensemble.
Il incombe donc au chercheur de conjuguer l’usage de locator_params avec une vérification stricte des bornes d’affichage via plt.ylim(). Si la neutralité métrologique exige la présence du zéro absolu, la configuration des paramètres de graduation doit impérativement forcer l’inclusion de ce pivot géométrique fondamental, garantissant ainsi que la simplification esthétique ne se traduise jamais par une distorsion de la vérité statistique.
6. Le paradigme orienté objet : ax.locator_params() et la manipulation des sous-graphiques
Si l’interface procédurale basée sur l’état global de Pyplot convient aux scripts linéaires éphémères, le développement d’architectures logicielles pérennes, de pipelines de traitement de données distribués et de figures multipanneaux complexes exige l’adoption sans concession du paradigme orienté objet de Matplotlib.
6.1 Transition méthodologique : de l’état global pyplot à l’objet Axes
L’interface impérative globale plt.locator_params() opère par le biais d’un mécanisme d’état mutable implicite : elle cible systématiquement l’axe réputé « courant » (renvoyé par plt.gca() pour Get Current Axes). Ce paradigme hérité des interfaces interactives des années 1980 s’avère particulièrement fragile lors de l’automatisation d’analyses complexes, car toute modification inattendue de l’ordre d’exécution des cellules de code ou des fonctions peut induire des effets de bord dévastateurs en modifiant un axe non désiré.
La transition vers la programmation orientée objet consiste à instancier explicitement des objets de classe Figure et Axes (généralement via fig, ax = plt.subplots()), puis à invoquer directement la méthode membre ax.locator_params(). Cette encapsulation structurelle garantit une isolation parfaite de la logique de configuration visuelle : chaque conteneur graphique gère ses propres composants d’échelle sans risquer de corrompre l’état des conteneurs voisins.
La méthode ax.locator_params() présente une signature strictement isomorphe à celle de son homologue procédurale, mais son invocation explicite confère au code une modularité logicielle et une maintenabilité infiniment supérieures, conformes aux exigences modernes du génie logiciel appliqué à la science des données.
6.2 Application individualisée au sein de grilles de sous-graphiques (Subplots)
La puissance conceptuelle du paradigme orienté objet se révèle pleinement lors de l’orchestration de visualisations multifacettes (small multiples), structurées sous forme de matrices de sous-graphiques. Dans de telles architectures, la gestion individualisée ou mutualisée des graduations devient un déterminant architectural central de la lisibilité.
Lorsqu’une grille est générée avec des axes partagés via les options sharex=True ou sharey=True, toute altération des paramètres de graduation sur un panneau d’axe propage automatiquement ses contraintes géométriques à l’intégralité de la rangée ou de la colonne associée. Toutefois, dans les configurations où les dimensions ne sont pas partagées — par exemple lorsqu’un panneau présente une distribution de probabilité tandis que son voisin illustre une série chronologique brute —, la méthode orientée objet permet d’itérer de manière programmatique et propre sur le tableau à deux dimensions d’objets Axes :

Grâce à des boucles vectorielles ou des compréhensions de listes sur le conteneur axes.flat, le programmeur applique dynamiquement des valeurs de nbins distinctes selon la position relative du panneau au sein du canevas global. Il devient ainsi trivial d’élaguer les repères intérieurs superflus tout en conservant une discrétisation précise sur les bordures périphériques, unifiant la composition visuelle tout en éliminant les redondances graphiques.
6.3 Modélisation comparative procédurale versus orientée objet
D’un point de vue de l’ingénierie logicielle et de la reproductibilité scientifique, la confrontation entre l’approche procédurale et l’approche orientée objet met en lumière des divergences fondamentales en matière de robustesse d’exécution et de clarté algorithmique. Bien que le coût computationnel brut en mémoire et en temps CPU demeure strictement comparable — les deux approches résolvant in fine le même système d’équations géométriques au moment du tracé — l’approche procédurale induit une dette technique considérable.
Dans un script procédural étendu comportant plusieurs dizaines de tracés intercalés, le suivi mental de l’axe actif impose une charge cognitive inutile au développeur, augmentant statistiquement la survenue de bugs silencieux où des paramètres de graduation sont assignés au mauvais graphique. À l’inverse, l’approche orientée objet ancre chaque mutation d’état au sein d’une référence nommée transparente, favorisant la factorisation du code au sein de classes personnalisées ou de fonctions de rendu modulaires.
Les recommandations actuelles émanant des comités scientifiques de développement de la bibliothèque Matplotlib convergent unanimement vers l’abandon de l’interface d’état globale de Pyplot pour toute production logicielle pérenne, réservant l’usage de plt.locator_params() à l’exploration ponctuelle sous invite de commande interactive.
7. Algorithmes sous-jacents : Analyse approfondie de la classe MaxNLocator
Pour exploiter avec une parfaite maîtrise le contrôle du nombre de graduations, il est indispensable de disséquer la machinerie algorithmique interne gouvernant ces ajustements. L’instruction locator_params() ne constitue en réalité qu’une façade (facade design pattern) masquant l’instanciation implicite ou la reconfiguration directe de la classe fondamentale matplotlib.ticker.MaxNLocator.
7.1 Fonctionnement interne du moteur de localisation MaxNLocator
La classe MaxNLocator hérite des interfaces abstraites définies par Locator et TickHelper. Son rôle algorithmique fondamental est de déterminer un intervalle régulier optimal d’écartement entre repères successifs, désigné sous le terme d’étape (step size), de telle sorte que le nombre total d’intervalles créés sur la plage [vmin, vmax] ne surpasse pas la contrainte nbins.
Pour accomplir cette tâche, l’algorithme ne sélectionne pas un pas arbitraire continu. Il calcule d’abord l’écart brut (vmax - vmin) / nbins, puis normalise ce pas préliminaire sous la forme d’un nombre mantisse compris entre 1 et 10 multiplié par une puissance de dix entière. Ensuite, le moteur confronte cette mantisse à un ensemble fini de pas admissibles définis par le paramètre structurel steps. Par défaut, ce tableau ordonné de pas acceptables correspond à la liste [1, 2, 2.5, 5, 10].
L’algorithme projette la mantisse calculée vers le multiple admissible immédiatement supérieur ou le plus proche garantissant la contrainte d’inégalité stricte. Cette élégante formulation mathématique assure que, quel que soit le domaine numérique d’entrée — qu’il s’agisse de nanogrammes ou d’années-lumière —, les repères finaux se verrouillent systématiquement sur des échelons décimaux perçus comme naturels et harmonieux par le cerveau humain.
7.2 Configuration avancée des contraintes d’entiers et d’intervalles stricts
Au-delà de la modulation basique de nbins, MaxNLocator encapsule des fonctionnalités mathématiques avancées destinées à résoudre des contraintes d’analyse de données spécifiques. L’argument integer=True constitue un garde-fou impératif lorsqu’il s’agit de représenter des variables discrètes ou de comptage pur (comme le nombre d’occurrences d’un événement, le décompte de patients ou des itérations de processus discret).
En l’absence de ce paramètre, confronté à une plage de données restreinte (par exemple entre 1 et 4) combinée à une valeur par défaut de nbins, le localisateur générerait immanquablement des fractions décimales (1.0, 1.5, 2.0, etc.), créant une aberration sémiotique dans le cas de mesures insécables. L’activation de la contrainte entière réoriente instantanément l’algorithme vers l’exclusion de tout pas non entier, quitte à réduire drastiquement le nombre de graduations affichées sous le plafond nbins.
De surcroît, la directive prune résout avec brio la problématique topologique des intersections orthogonales d’axes. Dans les figures multipanneaux adjacentes à coordonnées non partagées, l’étiquette de la graduation maximale de l’axe X horizontal vient fréquemment buter contre l’étiquette minimale de l’axe vertical adjacent. En configurant prune='lower', prune='upper' ou prune='both', le localisateur purge sélectivement les bornes terminales, éliminant tout télescopage à l’angle géométrique du canevas sans altérer l’espacement intérieur de la métrique.
7.3 Comparaison technique avec LinearLocator et IndexLocator
Pour mesurer la supériorité adaptative de MaxNLocator, il est constructif de confronter son comportement à d’autres localisateurs linéaires standard intégrés au module matplotlib.ticker, tels que LinearLocator et IndexLocator. Le tableau conceptuel suivant formalise les divergences fonctionnelles et opérationnelles de ces composants :
- MaxNLocator :
- Mode opératoire : Flexibilité heuristique basée sur des échelons arrondis (1, 2, 2.5, 5, 10).
- Respect du quota : Le paramètre
nbinsagit comme un plafond supérieur indicatif ; le nombre réel varie. - Idéal pour : La quasi-totalité des tracés cartésiens continus linéaires généraux.
- LinearLocator :
- Mode opératoire : Partitionnement arithmétique rigide sans considération d’arrondi décimal intuitif.
- Respect du quota : Le paramètre
numticksimpose un nombre impératif et immuable de repères. - Idéal pour : Les tracés surfaciques tridimensionnels ou les projections géométriques rigoureusement contraintes.
- IndexLocator :
- Mode opératoire : Progression arithmétique basée sur un pas fixe et un décalage spatial (offset).
- Respect du quota : Absence de contrôle direct sur le nombre global ; tributaire strict de la longueur du tableau.
- Idéal pour : Les séries de données indexées de manière catégorielle ou indicielle uniforme.
Cette distinction met en évidence pourquoi l’usage aveugle de LinearLocator pour forcer un nombre exact de repères aboutit le plus souvent à un désastre esthétique : en divisant géométriquement l’axe, il contraint le formateur de texte à afficher des décimales aberrantes, ruinant l’effort d’abstraction cognitive de la figure.
8. Graduations majeures versus mineures : Granularité et hiérarchie visuelle
Une visualisation d’ingénierie ou de physique théorique de haute précision ne saurait se contenter d’un niveau unique de discrétisation. L’architecture graphique de Matplotlib intègre une dualité fonctionnelle profonde articulée autour des graduations majeures (Major Ticks) et des graduations mineures (Minor Ticks).
8.1 Différenciation structurelle et manipulation par ax.xaxis.set_major_locator()
Au niveau le plus profond de l’API de Matplotlib, la méthode locator_params() n’est qu’un raccourci agissant sur le système de repères majeurs. L’accès programmatique fondamental s’exécute par l’invocation directe des méthodes ax.xaxis.set_major_locator() et ax.yaxis.set_major_locator(), en leur passant explicitement une instance configurée de MaxNLocator. Les graduations majeures incarnent les jalons structurels de l’axe : elles portent les étiquettes textuelles et guident les lignes principales de la grille cartésienne (grid).
La hiérarchie sémiotique exige que ces repères cardinaux se distinguent immédiatement des subdivisions secondaires. Cette distinction s’opère par le biais de propriétés stylistiques gérées par ax.tick_params() :
- La longueur physique du segment de repère (généralement fixée entre 5 et 8 points typographiques pour le niveau majeur).
- L’épaisseur du trait (linewidth), substantiellement plus marquée que celle des éléments mineurs.
- La présence exclusive des labels numériques, évitant l’encombrement textuel qui résulterait de l’étiquetage des pas intermédiaires.
En assignant explicitement une instance de MaxNLocator(nbins=5) au gestionnaire majeur, le concepteur fixe les piliers de référence indispensables, libérant le canal visuel secondaire pour une finesse d’estimation accrue via les graduations mineures.
8.2 Contrôle indépendant du nombre de repères secondaires
L’intégration ordonnée des graduations mineures enrichit considérablement la lisibilité métrique sans accroître la charge cognitive textuelle. En effet, ces repères discrets ne portent aucune étiquette alphanumérique ; ils agissent comme de simples sous-divisions visuelles linéaires guidant l’estimation oculaire des positions intermédiaires.
La manipulation de cette couche s’effectue via ax.xaxis.set_minor_locator() ou ax.yaxis.set_minor_locator(). L’outil algorithmique d’élection pour ce registre est la classe matplotlib.ticker.AutoMinorLocator. Ce composant analyse dynamiquement l’intervalle majeur établi par MaxNLocator et insère automatiquement un nombre harmonieux de subdivisions secondaires (habituellement 4 ou 5 divisions, créant des sous-pas de 0.2 ou 0.25 selon la parité du pas majeur).
Il est possible de paramétrer explicitement le diviseur mineur via l’argument n de AutoMinorLocator(n=2) ou (n=5). Cette orchestration fine garantit une gradation visuelle irréprochable : les repères majeurs fournissent la macro-structure quantitative tandis que les repères mineurs offrent la haute résolution métrologique nécessaire aux documents scientifiques destinés à l’impression haute définition, éliminant toute ambiguïté de lecture lors de l’extraction manuelle de valeurs sur le graphique.
9. Psychologie cognitive de la visualisation : Déterminer la densité idéale de repères
Le paramétrage numérique de nbins ne relève pas d’une simple convenance esthétique arbitraire. Il s’ancre dans les théories fondamentales de la perception visuelle humaine, notamment la psychologie de la forme (théorie de la Gestalt) et les limites neurophysiologiques de la mémoire de travail.
9.1 Lois de la Gestalt et groupement visuel sur les axes cartésiens
La théorie de la Gestalt met en lumière les principes organisationnels selon lesquels le système visuel humain structure spontanément les stimuli perceptifs en formes globales et cohérentes. Parmi ces principes, les lois de proximité spatiale et de continuité directionnelle s’appliquent directement à la conception des axes cartésiens.
Lorsque des repères et leurs étiquettes numériques respectives sont positionnés trop près les uns des autres en raison d’un nbins démesuré, la loi de proximité conduit le cerveau à regrouper inconsciemment ces symboles disparates en une seule bande textuelle texturée et confuse. L’individualité sémantique de chaque repère est alors anéantie au profit d’un motif répétitif perçu comme un bruit de fond parasite.
À l’inverse, un espacement savamment proportionné permet d’activer la loi de la bonne continuité : l’œil balaie aisément l’axe le long de sa trajectoire directrice, extrayant instantanément les valeurs d’ancrage sans achopper sur des agglutinations typographiques. Les graduations ne doivent pas rivaliser avec le tracé principal de la courbe expérimentale ; elles doivent constituer une toile de fond sélectivement sollicitable lorsque l’observateur opère une focalisation métrique volontaire.
9.2 Loi de Miller et limites de la mémoire de travail de l’observateur
Les recherches empiriques en psychologie cognitive, synthétisées magistralement dans l’article séminal de George A. Miller (1956), démontrent que la capacité de traitement simultané d’informations discrètes au sein de la mémoire de travail humaine se limite à une constante opérationnelle de sept éléments, plus ou moins deux unités (le fameux Miller’s magical number seven). Cette contrainte neurobiologique trouve une application directe et féconde dans le calibrage des représentations graphiques.
Transposée à la conception d’un axe de données, cette règle empirique suggère qu’un découpage présentant entre 5 et 9 graduations majeures représente l’optimum absolu d’intelligibilité. Un sous-dimensionnement extrême (moins de 3 repères) entraîne une incertitude métrologique aiguë, obligeant l’observateur à mobiliser des ressources cognitives excessives pour calculer mentalement des interpolations géométriques incertaines.
À l’opposé, excéder 9 ou 10 repères majeurs sature instantanément l’empan mnésique de travail. L’analyste se trouve incapable de mémoriser simultanément les jalons d’abscisse et d’ordonnée tout en inspectant la topologie de la courbe de données. Il en résulte des allers-retours oculaires saccadés, une fatigue perceptive prématurée et une diminution mesurable de la vitesse d’extraction des corrélations scientifiques.
9.3 Adaptation de l’affichage selon les profils cognitifs des utilisateurs
La densité optimale de graduation n’est pas une constante immuable ; elle est fonction du profil cognitif de l’audience ciblée et du support matériel de diffusion. Le chercheur chevronné explorant des relevés spectrophotométriques en laboratoire recherche une fidélité absolue et tolérera une densité de repères supérieure pour identifier des anomalies locales à haute fréquence.
Dans un contexte de restitution synthétique — tel qu’une conférence grand public, une publication exécutive ou un tableau de bord d’aide à la décision —, la priorité bascule vers l’instantanéité de la compréhension. Les graduations doivent alors être réduites à leur plus simple expression fonctionnelle (nbins=3 ou 4), privilégiant les grandes tendances macroscopiques au détriment du détail local infinitésimal.
De plus, l’accessibilité visuelle universelle impose de prendre en compte les déficiences visuelles légères et les contraintes d’affichage des terminaux mobiles. Des étiquettes aérées, rendues possibles par une modération stricte du nombre de bacs de graduation, autorisent une augmentation substantielle de la taille de police (fontsize), garantissant une inclusion perceptive irréprochable conformément aux standards contemporains du design d’information.
10. Cas complexes : Échelles logarithmiques, dates et axes asymétriques
Bien que l’instruction plt.locator_params() résolve avec élégance la majorité des configurations linéaires, son exécution aveugle sur des espaces mathématiques non gaussiens ou non linéaires déclenche des dysfonctionnements majeurs qu’il importe de théoriser et de contourner méthodiquement.
10.1 Limites de locator_params() sur les axes non linéaires
L’une des déconvenues techniques les plus déroutantes pour le praticien réside dans l’incompatibilité fondamentale entre plt.locator_params() et les échelles logarithmiques ou symétriques logarithmiques. Lorsqu’un axe subit une transformation via ax.set_xscale('log'), le moteur graphique remplace silencieusement le MaxNLocator sous-jacent par une instance spécialisée de matplotlib.ticker.LogLocator.
Or, LogLocator ne dispose pas de la méthode set_params() acceptant nbins de la même manière sémantique qu’un localisateur linéaire. L’émission d’un appel standard à plt.locator_params(nbins=5) sur un tel axe provoquera invariablement un avertissement logiciel (UserWarning) ou une levée d’exception explicite, Matplotlib signalant son inaptitude à appliquer une heuristique de partition linéaire sur une distribution géométrique.
Pour moduler la densité de graduations sur une échelle logarithmique couvrant de multiples décades, la méthode appropriée consiste à interagir directement avec l’instance de LogLocator. Il convient de paramétrer l’argument subs (définissant les multiples de décades autorisés, comme [1.0] pour afficher uniquement les puissances strictes de 10) ou d’exploiter matplotlib.ticker.SymmetricalLogLocator pour les domaines intégrant des valeurs négatives ou nulles, garantissant ainsi un contrôle mathématique rigoureux sans conflit d’architecture.
10.2 Contrôle du nombre de repères sur les axes chronologiques et temporels
Le traitement des séries chronologiques présente une complexité structurelle analogue. Lorsqu’une séquence temporelle (comme des objets datetime de la bibliothèque standard ou des index temporels de la bibliothèque Pandas) est tracée, Matplotlib délègue la gestion des repères au module matplotlib.dates, initialisant dynamiquement la classe AutoDateLocator.
L’utilisation directe de plt.locator_params(axis='x', nbins=N) sur de tels axes s’avère au mieux inopérante, au pire destructrice pour la sémantique calendaire. Le temps humain ne se discrétise point selon une logique décimale standard : une heure comporte soixante minutes, un jour vingt-quatre heures, une année douze mois hétérogènes. Forcer aveuglément un découpage à pas de 2.5 sur une échelle de temps engendre des absurdités conceptuelles absolues.
La réduction du nombre de repères temporels requiert une approche hybride mobilisant des localisateurs calendaires dédiés :
matplotlib.dates.YearLocatorpour les analyses macroscopiques pluriannuelles.matplotlib.dates.MonthLocatoravec assignation d’un intervalle explicite via son argumentinterval(par exemple tous les 3 ou 6 mois).matplotlib.dates.DayLocatorpour les séries quotidiennes resserrées.
En couplant ces localisateurs spécifiques avec AutoDateLocator(maxticks=N), le chercheur préserve l’intégrité de la sémantique chronologique tout en plafonnant efficacement le nombre total d’étiquettes à une densité respectant la largeur de la figure.
11. Diagnostic des anomalies, conflits de style et résolution de bugs
Dans la pratique courante du développement scientifique, l’ajustement du nombre de graduations interagit avec d’autres directives graphiques de mise en page, générant occasionnellement des comportements aberrants, des disparitions d’étiquettes ou des échecs d’actualisation géométrique.
11.1 Absence de prise en compte apparente de la valeur nbins
Un cas de dysfonctionnement récurrent réside dans l’absence d’effet visuel perceptible après l’appel explicite à plt.locator_params(nbins=N). Cette anomalie découle presque systématiquement d’un problème d’ordonnancement séquentiel des instructions au sein du script Python.
Si la directive locator_params est exécutée avant l’appel à une fonction modifiant drastiquement les limites des données — telle que plt.xlim(), plt.ylim() ou des méthodes de mise à l’échelle automatique (autoscale) ultérieures —, le moteur de redimensionnement de Matplotlib peut être amené à réinitialiser le localisateur sur ses configurations par défaut pour s’adapter à la nouvelle boîte englobante. De même, l’utilisation concurrente de bibliothèques de haut niveau telles que Seaborn réapplique fréquemment ses propres styles par-dessus les modifications manuelles si l’ordre d’appel n’est pas scrupuleusement maîtrisé.
Pour neutraliser ce phénomène, la règle méthodologique consiste à toujours positionner les directives d’ajustement des graduations en toute fin de chaîne de conception graphique, immédiatement avant l’appel d’exportation plt.savefig() ou de visualisation plt.show(). Cette chronologie garantit que l’algorithme MaxNLocator résolve les intervalles sur l’espace d’états définitif et stabilisé de la figure.
11.2 Graduations tronquées, étiquettes superposées et bordures de canvas
Un autre désagrément fréquent concerne l’amputation typographique des graduations périphériques par les bordures extérieures du canevas de rendu (le bounding canvas). Ce problème est particulièrement aigu sur les graphiques exportés dans des formats matriciels (PNG, TIFF) de faibles résolutions lorsque la réduction de nbins a conduit le localisateur à pousser un repère au ras de la bordure extrême de l’axe.
La résolution de cette anomalie requiert une coordination étroite entre la logique de localisation et les moteurs d’agencement automatique d’espace de Matplotlib. L’invocation systématique de plt.tight_layout() en fin de pipeline calcule dynamiquement les marges d’inclusion nécessaires pour héberger la totalité des étiquettes textuelles sans rognage. Pour les cas plus complexes de grilles de sous-graphiques déséquilibrées, l’ajustement explicite via fig.subplots_adjust() permet de réallouer manuellement les espacements inter-panneaux.
Enfin, pour déboguer efficacement un localisateur récalcitrant, le développeur gagne à inspecter programmatiquement la liste des positions générées via l’instruction console ax.xaxis.get_majorticklocs(). Cette introspection technique fournit le vecteur brut des coordonnées sélectionnées par l’algorithme, dissociant immédiatement les éventuels problèmes de localisation pure des dysfonctionnements liés au formatage textuel ou au moteur de rendu typographique.
12. Protocole méthodologique et standardisation pour la recherche scientifique
Pour assurer la pérennité, la reproductibilité et la conformité esthétique des visualisations produites au sein d’un laboratoire ou d’un consortium de recherche, la configuration empirique au coup par coup doit céder le pas à une standardisation logicielle rigoureuse et centralisée.
12.1 Élaboration d’une fonction réutilisable pour la standardisation des graduations
L’implémentation d’une fonction utilitaire canonique encapsulant les meilleures pratiques éditoriales permet d’uniformiser la production graphique à travers des dizaines de publications scientifiques sans dupliquer des blocs d’instructions redondants. Cette fonction doit agir de manière polymorphique sur n’importe quel objet Axes passé en argument :
Une telle routine d’ingénierie prend en charge de façon autonome la détection de la plage dynamique des données, configure les instances de MaxNLocator avec un nbins optimal calibré pour la largeur de colonne visée, applique les contraintes d’élagage (prune) sur les angles critiques, et instancie harmonieusement les AutoMinorLocator pour préserver la précision de lecture. En intégrant cette standardisation au sein d’un module partagé interne au laboratoire, les chercheurs s’assurent d’une homogénéité visuelle absolue à travers l’ensemble des figures d’une thèse doctorale ou d’un article de recherche multipanneaux.
Cette approche systématique élimine les disparités graphiques souvent constatées lors de la fusion des travaux de plusieurs coauteurs, garantissant que chaque graphique réponde scrupuleusement aux critères stricts imposés par les comités éditoriaux des revues scientifiques internationales les plus exigeantes.
12.2 Intégration dans le fichier de configuration globale matplotlibrc
Le degré ultime de standardisation logicielle au sein de l’écosystème Matplotlib consiste à inscrire les directives de calibrage directement au sein du fichier de configuration globale matplotlibrc. Ce fichier de paramètres permet de surcharger les valeurs par défaut de la bibliothèque sans nécessiter la moindre ligne de code spécifique dans les scripts d’analyse quotidiens.
En ajustant des directives clés telles que :
axes.autolimit_mode : datapour contraindre les marges d’échelle.xtick.major.size : 6etytick.major.size : 6pour standardiser la dimension des repères majeurs.xtick.minor.visible : Trueetytick.minor.visible : Truepour imposer l’activation systématique des subdivisions secondaires.xtick.direction : inououtselon les chartes graphiques éditoriales (l’orientation vers l’intérieur étant traditionnellement privilégiée en physique et en astronomie).
Cette centralisation stylistique garantit qu’une équipe entière de chercheurs collabore dans un environnement graphique parfaitement synchronisé. Le tableau décisionnel suivant résume les choix d’implémentation recommandés en fonction des scénarios d’usage analytiques :
- Exploration rapide en console ou carnet interactif : Usage exclusif de
plt.locator_params(nbins=N)pour une réactivité immédiate sans verbosité. - Séries temporelles continues standards : Abandon de
locator_paramsau profit dematplotlib.dates.AutoDateLocator(maxticks=N)couplé à unConciseDateFormatter. - Publications académiques imprimées en colonnes étroites : Paradigme orienté objet explicite avec
ax.locator_params(nbins=4, prune='both')et adjonction deAutoMinorLocator. - Visualisations web dynamiques et dashboards interactifs : Fixation de contraintes d’entiers stricts
ax.locator_params(integer=True)pour prévenir les fractions inintelligibles sur des données de comptage.
En adoptant ces règles d’ingénierie sémiotique et logicielle, le concepteur transforme la graduation d’un axe d’un simple détail technique en un instrument de précision intellectuelle, optimisant l’impact communicationnel de la recherche et magnifiant la beauté géométrique des données du monde réel.
Références
Bertin, J. (1967). Sémiologie graphique : Les diagrammes, les réseaux, les cartes. Éditions Gauthier-Villars.
Cleveland, W. S., & McGill, R. (1984). Graphical perception: Theory, experimentation, and application to the development of graphical methods. Journal of the American Statistical Association, 79(387), 531–554. https://doi.org/10.1080/01621459.1984.10478080
Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. Computing in Science & Engineering, 9(3), 90–95. https://doi.org/10.1109/MCSE.2007.55
Miller, G. A. (1956). The magical number seven, plus or minus two: Some limits on our capacity for processing information. Psychological Review, 63(2), 81–97. https://doi.org/10.1037/h0043158
Sweller, J. (1988). Cognitive load during problem solving: Effects on learning. Cognitive Science, 12(2), 257–285. https://doi.org/10.1207/s15516709cog1202_4
Tufte, E. R. (2001). The visual display of quantitative information (2e éd.). Graphics Press.
Waskom, M. L. (2021). Seaborn: statistical data visualization. Journal of Open Source Software, 6(60), 3021. https://doi.org/10.21105/joss.03021