Une bibliothèque de graphiques peut être rapide en dessinant plus vite. XY essaie surtout de dessiner moins de choses inutiles.
Le projet open source de Reflex est une bibliothèque Python de dataviz interactive. Pour les petits jeux de données, chaque point peut partir au navigateur. Pour les très gros, son cœur Rust calcule un niveau de détail adapté à la résolution de la vue, puis envoie au frontend une représentation bornée par ce que l’écran peut réellement montrer.
Le zoom redemande ensuite une vue plus précise.
L’idée paraît évidente après coup : une fenêtre de 1400 pixels n’a aucune raison de recevoir cent millions de marqueurs individuels pour produire une vue générale.
Les données restent exactes côté Python
XY conserve les colonnes canoniques en f64 côté Python. Le cœur natif choisit ensuite entre plusieurs chemins : points directs, décimation ou surface de densité.
Le navigateur reçoit une spécification légère et des buffers binaires typés. Le rendu utilise WebGL2 pour les marques, Canvas pour certains éléments et le DOM pour l’interface.
Quand l’utilisateur zoome ou sélectionne une zone, le système peut revenir aux lignes originales plutôt que d’interagir uniquement avec une image agrégée.
C’est ce qui distingue la technique d’un simple raster pré-calculé. Le résumé visuel change avec le viewport, mais la donnée source reste accessible.
Le benchmark maison est spectaculaire, donc à lire comme un benchmark maison
Le README affiche des chiffres très agressifs.
Sur la machine de test annoncée, un Apple M5 Pro, XY maintient autour de 0,08 seconde entre 10 000 et 100 millions de points lorsque son mode de densité prend le relais. Le projet explique ce plateau par le fait qu’au-delà d’un seuil il ne dessine plus un marqueur par ligne.
Il annonce aussi avoir rendu l’ensemble d’OpenStreetMap, soit environ dix milliards de points dans son exemple.
Ces résultats sont produits par l’équipe elle-même, avec son protocole et ses choix de comparaison. Ils ne doivent pas devenir « XY est 177 fois plus rapide » dans l’absolu.
Le mécanisme est plus intéressant que le podium : le coût de la vue générale cesse d’être proportionnel au nombre brut de points affichables.
Le zoom devient une requête de détail
Ce modèle ressemble davantage à une carte qu’à un scatter plot traditionnel.
Sur une carte mondiale, personne ne charge la géométrie de chaque fenêtre de chaque bâtiment avant de montrer le continent. On utilise des niveaux de détail, puis on raffine quand l’utilisateur se rapproche.
XY applique cette logique aux graphiques analytiques.
Une vue dense peut être agrégée en surface. Une plage plus étroite redemande des données plus précises. Le hover, le pan et la sélection suivent cette transformation.
Le résultat change la question de conception. Au lieu de demander « combien de points WebGL peut dessiner ? », on peut demander « quelle information visuelle est encore distinguable à cette échelle ? ».
Pour un designer de données, c’est une meilleure question.
La compatibilité Matplotlib sert de porte d’entrée
XY propose aussi un shim inspiré de matplotlib.pyplot.
L’objectif est de permettre à certains scripts existants de changer d’import avant de migrer progressivement vers son API déclarative. Toutes les fonctions Matplotlib ne sont pas encore couvertes, et le dépôt est explicitement en alpha.
Le projet supporte déjà plusieurs familles de graphiques, notamment lignes, scatter, barres, histogrammes, heatmaps, box plots, violons, contours, facettes et quelques primitives scientifiques. Sa roadmap vise ensuite finance, cartes, 3D et visualisation volumique.
L’ambition est énorme. L’état alpha impose donc de ne pas confondre roadmap et produit disponible.
Une visualisation est déjà une compression
La bonne idée de XY dépasse finalement sa stack Rust/WebGL.
Un graphique est lui-même une compression d’information. On transforme des milliers ou millions de valeurs en une forme que l’œil peut comprendre.
Envoyer chaque ligne au navigateur avant de la compresser visuellement est parfois une habitude d’implémentation, pas une nécessité conceptuelle.
XY rapproche le traitement de la limite réelle : la résolution de la sortie.
Ce n’est pas toujours adapté. Pour certaines analyses, chaque point individuel doit rester immédiatement visible et inspectable. Pour d’autres, la densité ou la décimation peuvent masquer des structures si elles sont mal choisies.
Mais la règle est intéressante : quand une sortie possède une capacité perceptive finie, optimiser en fonction de cette capacité peut être plus efficace que d’accélérer indéfiniment le transport de détails impossibles à voir.