1 points par GN⁺ 2024-06-28 | 1 commentaires | Partager sur WhatsApp
  • eplot est un paquet destiné à tracer des graphiques simples à partir de données numériques directement dans Emacs, né des limites d’affichage des axes et d’ergonomie de chart.el et de la combinaison Org/Gnuplot
  • La principale difficulté concerne les graduations de l’axe Y : il faut gérer naturellement des chiffres agréables à lire de la série 1·2·5, ainsi que des échelles extrêmes et des intervalles temporels
  • En transposant dans Emacs Lisp une expérience acquise avec une bibliothèque de graphiques en PHP, l’auteur a implémenté des effets comme les dégradés en SVG et le mode sombre, mais certains effets nécessitant un traitement au pixel près ont été laissés de côté
  • En lançant M-x eplot dans un buffer contenant beaucoup de nombres, un buffer de graphique s’ouvre, et les headers avec C-c C-c permettent de modifier rapidement les réglages et d’en voir le résultat
  • Le code est publié sur GitHub, mais il s’agit encore d’un work in progress écrit rapidement en une semaine autour de cas de test ; l’organisation des chemins de code et la lisibilité restent à améliorer

Pourquoi vouloir tracer des graphiques directement dans Emacs

  • Après avoir longtemps cherché un moyen simple de créer des tracés, l’auteur a essayé chart.el, intégré à Emacs, en écrivant un billet lié aux notes de films
  • chart.el est inclus dans Emacs, mais cette fonctionnalité provient à l’origine d’un outil de test pour eieio, ce qui en fait un outil à l’usage limité
  • Il permettait globalement de faire ce qu’il fallait, mais l’affichage de l’axe Y était particulièrement insatisfaisant

Les graduations d’axe, décisives pour la qualité d’un graphique

  • Un mauvais affichage des axes saute vite aux yeux, mais produire quelque chose de naturel exige en réalité de traiter soigneusement de nombreux cas limites
  • Google Finance utilisait autrefois un axe peu naturel où la graduation supérieure de l’axe Y correspondait à la plus grande valeur, puis ajoutait des lignes à intervalles réguliers en direction de l’origine
    • L’auteur pense que ce type de graphique existait encore jusqu’aux alentours de 2021
    • Le site a ensuite été réimplémenté dans son ensemble et a obtenu de meilleurs axes
  • L’auteur a déjà implémenté une bibliothèque de graphiques vers 1997, alors qu’il travaillait dans une société de courtage
  • Le problème des graduations d’axe tient moins d’un problème mathématique difficile que d’un choix soigné de chiffres lisibles et de plages exceptionnelles
    • Les chiffres agréables à lire sont en général des multiples à différentes échelles de 1, 2, 5
    • Dans les graphiques boursiers, on peut rencontrer des plages comme $0.00001~$0.00002 ou 1e9~1e10
    • Pour l’axe du temps, il faut prendre en compte les années, les semestres, les trimestres, les mois, les semaines, et même le découpage des mois en semaines

Pourquoi il est difficile de réutiliser tel quel les outils existants

  • La bibliothèque de graphiques PHP créée auparavant est pratique pour générer des résultats côté serveur web, mais elle n’est pas adaptée à l’expérimentation sur des nombres directement dans Emacs
  • Comme le montrent la popularité d’Excel et de Jupyter Notebook, le processus d’ajustement interactif des données jusqu’à obtenir le graphique souhaité est important
  • Org propose aussi des fonctions de tracé, mais Org plot utilise Gnuplot comme backend
  • Gnuplot est généralement utilisable, mais il peut devenir contraignant dès qu’on veut modifier les valeurs par défaut, par exemple le format des nombres sur l’axe Y dans l’exemple

Implémentation d’eplot et fonctions visuelles

  • Le nom chart étant déjà pris, le nouveau paquet a été nommé eplot
  • L’auteur ne comptait pas forcément retranscrire toutes les fonctions de la bibliothèque PHP existante, mais en commençant l’implémentation, il a fini par en recréer la plupart
  • La nouvelle version inclut aussi des fonctions comme le mode sombre
  • Les dégradés de la bibliothèque PHP étaient réalisés à la main, et l’auteur se souvient qu’elle incluait même des ressources comme une palette de couleurs GIF
  • La version Emacs Lisp utilise SVG
    • Comme SVG prend en charge les dégradés, la combinaison de polygones et de dégradés permet de produire un effet similaire
    • On peut ainsi obtenir un résultat proche de l’original PHP
  • Un autre dégradé plus inhabituel n’a pas été implémenté
    • Il nécessiterait une implémentation au pixel près, ou au moins ligne par ligne, ce qui complique beaucoup la tâche
    • Des calculs mathématiques seraient peut-être nécessaires, d’où son exclusion

Flux d’utilisation et mode de configuration

  • En lançant M-x eplot dans un buffer contenant beaucoup de nombres, le graphique s’affiche dans un buffer séparé
  • Pour ajuster le graphique à la forme voulue, l’auteur a introduit le concept de headers
  • La plupart des options utiles peuvent être contrôlées via les headers
    • Après avoir ajouté des headers, il suffit d’appuyer sur C-c C-c pour voir immédiatement le résultat
    • Un eplot mode existe aussi pour faciliter cela
  • Un exemple simple est fourni sous la forme d’un petit graphique, et la plupart des variantes montrées dans la première image de l’article sont elles aussi produites via des headers

État de publication et travail restant

  • L’auteur a rédigé un README.md documentant différentes possibilités
  • Le code est publié sur Microsoft Github
  • Dans son état actuel, il s’agit toujours d’un work in progress
  • Le paquet semble déjà pouvoir être utile dans une certaine mesure, mais comme il a été écrit et modifié en continu pendant une semaine, il est difficile d’en garantir la stabilité
  • Le code a été écrit de manière inefficace en fonction des cas de test et nécessite une réorganisation
    • Plusieurs chemins de code doivent être unifiés
    • La lisibilité du code doit être améliorée
  • L’auteur l’a poussé en l’état pour faire une pause, mais les utilisateurs réels doivent encore rester prudents

1 commentaires

 
GN⁺ 2024-06-28
Avis sur Hacker News
  • Propre ! La façon d’intégrer les dégradés est à la fois simple et ingénieuse.
    Comme j’aime bien ce domaine, j’ajoute un conseil général : quand je travaillais comme ingénieur sur la bibliothèque Grapher de Our World in Data (https://github.com/owid/owid-grapher) avec Max Roser et Hannah Ritchie, j’ai beaucoup appris sur la manière de faire de bons graphiques.
    En regardant les exemples, je dirais qu’il ne faut pas négliger le titre, le sous-titre et la légende. Comme vous avez déjà prévu un « en-tête simple », cela devrait être facile à bien intégrer, et quelques courtes phrases peuvent faire une grande différence. Je recommande aussi “Storytelling with Data” de Cole Nussbaumer Knaflic.
    Si vous continuez à le faire évoluer, vous aurez sans doute envie un jour d’y ajouter une bibliothèque de flux de données et un DSL. Le dplyr de Hadley Wickham pour R était excellent, et je m’en suis inspiré aussi dans mon outil Ohayo et dans la bibliothèque CoreTable d’OWID Grapher (https://github.com/owid/owid-grapher/tree/master/packages/%4...). Arquero, la bibliothèque relativement récente de Jeffrey Heer (https://idl.uw.edu/arquero/), relève aussi de cette famille.
    Ces derniers temps, je regarde le nouvel outil Plot de Mike Bostock (https://observablehq.com/plot/). Je ne l’ai encore utilisé qu’un jour ou deux, mais il est prometteur. Je n’utilise pas Emacs en ce moment, mais j’espère que tout cela sera utile.
  • C’est donc pour ça que je n’arrivais pas à retrouver récemment l’article « 10 % des bugs d’Emacs corrigés ». En fait, il était en train de fabriquer ça. C’est superbe, et c’est vraiment un maître d’Emacs.
  • Ça a l’air chouette ! Utiliser la fonctionnalité de variables locales aux fichiers et aux répertoires d’Emacs pour configurer les graphiques pourrait offrir une expérience utilisateur plus flexible.
    Par exemple, on peut être en train de générer un fichier de données et ne pas vouloir le modifier manuellement avant de tracer le graphique, ou vouloir visualiser au fil de l’eau des fichiers dans un grand répertoire de données sans ajouter à la main un en-tête à chacun.
  • Pour tracer des graphes dans org mode, on peut aussi utiliser Python et matplotlib. Gnuplot n’est pas la seule option.
    • L’API de Matplotlib est déjà assez pénible ; je ne pense pas qu’ajouter un wrapper elisp par-dessus en ferait quelque chose d’agréable à utiliser.
      Comme le dit l’article, on risque fort de se retrouver avec plus de code nécessaire que si l’on implémentait directement ce dont on a besoin.
    • Ce qui m’a toujours gêné avec matplotlib et gnuplot, c’est qu’il semble littéralement y avoir une commande ou un appel de fonction distinct pour tout.
      Si l’on veut changer la taille des graduations de troisième niveau sur l’axe Y, on appelle quelque chose comme set_third_level_y_ticks(). Ce n’est pas forcément mauvais, et c’est peut-être inévitable, mais tout donne l’impression d’être traité comme un cas particulier, avec un manque d’orthogonalité.
    • Il y a aussi ESS (Emacs Speaks Statistics). Il intègre fortement R/Julia à org-mode, ce qui permet d’utiliser des outils comme ggplot2 ou makie.
      Cela dit, je respecte la tentative de construire quelque chose en pur elisp.
    • On peut aussi utiliser R et ses bibliothèques graphiques.
  • Voilà du vrai hacking. J’aime particulièrement la partie sur les dégradés.
    Le fait que ces tracés soient en SVG, et donc exportables vers LaTeX ou un navigateur web, est aussi un gros avantage. Pour le premier cas, cela devient un candidat assez sérieux quand il faut produire des graphiques à insérer dans un article scientifique. Beau résultat.
  • C’est la première fois que je vois les deux mots « Microsoft Github » accolés aussi explicitement, et même si c’est vrai depuis des années, ça me met mal à l’aise.
    • Je ne comprends toujours pas pourquoi autant de projets libres et open source utilisent cette plateforme. GitHub a très bien réussi à faire en sorte que les gens ne voient pas le préfixe Microsoft.
      Cela dit, Codeberg semble enfin commencer à gagner une certaine traction parmi les projets libres et open source.
    • C’est probablement pour ça que GitHub essaie encore de se présenter comme l’ancienne startup indépendante qu’il était. Beaucoup de développeurs indépendants ressentent les choses de la même manière, et penchent davantage du côté des valeurs de liberté logicielle que de la valeur actionnariale ou du capitalisme des grandes entreprises tech.
      Je viens d’ouvrir la page d’accueil de github.com et de chercher « Microsoft » avec Ctrl-F : 0 résultat.
    • J’ai eu exactement la même réaction. J’espère qu’ils ne feront jamais un rebranding en MS GitHub.