Back in Full Circle # 171 (July 2021), we looked at Plotext, a Python package that plots directly to a terminal. Over the past 16 months, much has changed in Plotext. It has gone from version 4.1.1 to 5.2.8, and while there are many internal code changes, there is also some new functionality. Their repository page is located at https://github.com/piccolomo/plotext. Of course, as always, you need to install and/or upgrade the package using pip. pip3 install –upgrade plotext Once you have done this, you can start trying it out using Python in a terminal. If, on the other hand, you want to write the program, it would look something like that shown top right. Besides the scatter plot, there are line plots, log plots, stem plots, plots with multiple data sets and multiple axes, vertical bar plots, horizontal bar plots, multiple bar plots, stacked bar plots, histogram plots, datetime plots and candlestick plots – all without the need of using matplotlib.
Dans le numéro 171 de Full Circle (juillet 2021), nous avons examiné Plotext, un paquet pour Python qui permet de tracer directement dans un terminal. Au cours des 16 derniers mois, beaucoup de choses ont changé dans Plotext. Il est passé de la version 4.1.1 à la 5.2.8 et, bien qu'il y ait de nombreux changements au code interne, il y a aussi de nouvelles fonctionnalités. La page de leur dépôt est située à l'adresse https://github.com/piccolomo/plotext.
Bien sûr, comme toujours, vous devez installer et/ou mettre à jour le paquet en utilisant pip.
pip3 install –upgrade plotext
Une fois que vous avez fait cela, vous pouvez commencer à l'essayer en utilisant Python dans un terminal.
Si, en revanche, vous voulez écrire le programme, il ressemblera à ce qui est montré en haut à droite.
Outre le nuage de points, il existe des diagrammes linéaires, des diagrammes logarithmiques, des diagrammes à tiges, des diagrammes avec plusieurs ensembles de données et plusieurs axes, des diagrammes à barres verticales, des diagrammes à barres horizontales, des diagrammes à barres multiples, des diagrammes à barres empilées, des diagrammes d'histogrammes, des diagrammes de datetime et des diagrammes en chandelier, le tout sans avoir besoin d'utiliser matplotlib.
When I originally found Plotext, I was interested in using the package to display plots within a Tkinter program using a standard widget like a Tk Label widget. It took a while, but digging through the online documentation and the source code, I was able to find a way by saving the plot to a file, then reading it in as text into the label object. The biggest problem that I had was that the size of the plot was based strictly on the size of the terminal when you ran the plot. Things didn’t always line up, especially when you were running the program within an IDE. I contacted the author, and happily, he was able to provide a fix which ended up in version 4.1.1. So I was very interested in the new version. When I tried to run the new version, there was an issue that caused the plot to be displayed as a mess. I contacted the author again, this time on a Sunday morning, and within 30 minutes, I was provided a work-around that required only a one-line change. There were a few small things that also needed to be rearranged a bit, but in the end, the process was very similar to the 4.1.1 version. Take, for example, the code to produce a simple sine wave and display it in a Tk Label widget.
Lorsque j'ai découvert Plotext, j'étais intéressé par l'utilisation de ce paquet pour afficher des graphiques dans un programme Tkinter en utilisant un widget standard comme le widget Tk Label. Cela m'a pris un certain temps, mais en fouillant dans la documentation en ligne et dans le code source, j'ai pu trouver un moyen d'enregistrer le tracé dans un fichier, puis de le lire en tant que texte dans l'objet label. Le plus gros problème que j'ai rencontré était que la taille du tracé était strictement basée sur la taille du terminal lorsque vous avez exécuté le tracé. Les choses ne s'alignaient pas toujours, surtout lorsque vous exécutiez le programme dans un IDE.
J'ai contacté l'auteur, et heureusement, il a été en mesure de fournir un correctif qui s'est retrouvé dans la version 4.1.1.
J'étais donc très intéressé par la nouvelle version. Lorsque j'ai essayé de l'exécuter, il y avait un problème qui faisait que le tracé s'affichait en pagaille.
J'ai recontacté l'auteur, cette fois un dimanche matin et, en 30 minutes, j'ai obtenu une solution de contournement qui ne nécessitait que le changement d'une ligne. Quelques petites choses ont également dû être réarrangées un peu, mais, au final, le processus était très similaire à celui de la version 4.1.1.
Prenons, par exemple, le code permettant de produire une onde sinusoïdale simple et de l'afficher dans un widget Tk Label.
Shown top right, line 1 is the plotext command to create the plot with whichever marker the user has selected. Next, we tell the library not to limit the plot to the size of the terminal. There are two boolean values, one for the x dimensions and one for the y. We then tell the library the size we want the plot to be, and then clear the color data (plt.clc()). Finally, we get to the workaround – which is to build the plot in the uncolorized mode – and assign it to an object which is finally sent to the Label widget via the textvar parameter. Of course, some of the plots are more complicated, so the first line becomes multiple lines, but the last five lines are the same for every type of standard plot. There are two new plot types available or greatly upgraded since the first version that I tried, image plots and video plots. Image plots take an image in .jpg format (and I believe others as well), and display it directly into a terminal window. Their sample code is shown bottom right. Which downloads, displays then deletes a .jpg image in the terminal.
En haut à droite, la ligne 1 est la commande plotext qui crée le tracé avec le marqueur sélectionné par l'utilisateur. Ensuite, nous indiquons à la bibliothèque de ne pas limiter le tracé à la taille du terminal. Il y a deux valeurs booléennes, une pour les dimensions x et une pour les y. Nous indiquons ensuite à la bibliothèque la taille que nous voulons pour le tracé, puis nous effaçons les données de couleur (plt.clc()). Enfin, nous arrivons à la solution de contournement - qui consiste à construire le tracé en mode non coloré - et à l'affecter à un objet qui est finalement envoyé au widget Label via le paramètre textvar.
Bien sûr, certains tracés sont plus compliqués, la première ligne devient alors multiple, mais les cinq dernières lignes sont les mêmes pour chaque type de tracé standard.
Il y a deux nouveaux types de graphiques disponibles ou grandement améliorés depuis la première version que j'ai essayée, les graphiques d'images et les graphiques vidéo. Les tracés d'image prennent une image au format .jpg (et d'autres aussi, je crois), et l'affichent directement dans une fenêtre de terminal. Leur exemple de code est montré en bas à droite.
Celui-ci télécharge, affiche puis supprime une image .jpg dans le terminal.
Which admittedly, doesn’t do a great job with the default settings, but when set properly, will give you something like this. You can also use it (with a few changes to the code) to view animated GIF images and to view youtube videos or .mp4 videos. While I’m not really sure why one would want to do these things, it does show the power of the Plotext library. The bottom line is that Plotext is a great add-on library for Python, and if you need to do light-weight plotting either in a terminal or to a Tkinter GUI, you can’t do better! Until next time, as always; stay safe, healthy, positive and creative!
Ce qui, il faut l'admettre, n'est pas très efficace avec les paramètres par défaut, mais qui, s'il est correctement configuré, vous donnera quelque chose comme ceci.
Vous pouvez également l'utiliser (avec quelques modifications du code) pour afficher des images GIF animées et des vidéos youtube ou .mp4.
Bien que je ne sache pas vraiment pourquoi on voudrait faire ces choses-là, cela montre la puissance de la bibliothèque Plotext.
En conclusion, Plotext est une excellente bibliothèque complémentaire pour Python et, si vous avez besoin de faire des tracés légers dans un terminal ou dans une interface graphique Tkinter, vous ne pouvez pas faire mieux !
Jusqu'à la prochaine fois, comme toujours : restez en sécurité, en bonne santé, positif et créatif !