Mit Lowcharts und Co. Plots im Terminal ausgeben

Aus LinuxUser 02/2022

Mit Lowcharts und Co. Plots im Terminal ausgeben

© Kheng Guan Toh / 123RF.com

Punkt, Komma, Strich

Meist plottet man Daten in hochauflösenden Grafiken. Mit Lowcharts und Konsorten sorgen Sie im Terminal für ansprechende Linien-, Balken- und Kuchendiagramme.

Grafiken ermöglichen eine eingängige Anzeige von Daten. Verfügt ein System aber lediglich über begrenzte Möglichkeiten in Bezug auf die Ausgabegeräte, brauchen Sie andere Werkzeuge als die gängige Tabellenkalkulation. Farbige Grafiken und Diagramme lassen sich durchaus auch im Terminal erstellen.

Werkzeuge, die Bilder im Terminal anzeigen, wandeln zunächst die Bilddaten in ASCII- oder Unicode-Zeichen sowie ANSI-Farbcodes um und geben diese anschließend im Terminal aus [1]. Solche Lösungen haben wir schon in früheren Ausgaben vorgestellt [2]. Diesmal geht es aber um die Frage, wie man Daten ohne Umwandeln von PNG nach ASCII/Unicode im Terminal plottet. Welche Diagrammtypen lassen sich so umsetzen, und wie ergänzt man sie um Zusatzinformationen?

Die Antwort lautet: Mit den passenden Tools geht fast alles. Sie benötigen lediglich ein Terminal, das die passenden Zeichensätze und Farbe unterstützt sowie entsprechende Werkzeuge und Bibliotheken.

Einsatzgebiet

Zunächst einmal stellt sich jedoch die Frage nach dem Warum – schließlich sind grafische Oberflächen und entsprechende Programme schon seit Jahren Standard auf dem PC.

Das gilt allerdings nur für Desktop-Rechner; bei Servern, insbesondere bei solchen mit anderen Prozessorarchitekturen als x86, sieht das schon ganz anders aus. Hier hilft ein schneller ASCII-Plot, sich einen groben Überblick über gesammelte Daten zu verschaffen, vor allem, wenn Sie das System nur via SSH erreichen, aber trotzdem eine Grafik nutzen wollen.

Mitunter bieten auch Prozessor oder Display nur begrenzte Möglichkeiten, etwa wenn Sie Linux auf dem Mikrocontroller eines Embedded-Systems ausführen [3] und darauf für eine grafische Ausgabe auf der Basis des X-Window-Systems kein Platz mehr bleibt.

Werkzeugübersicht

Ausgangspunkt für die Recherche war das Lowcharts-Projekt [4], das vielfältige Funktionen mitbringt. Stück für Stück kamen weitere Werkzeuge und Bibliotheken hinzu. Die Tabelle “Tools im Überblick” vermittelt einen Überblick und listet Werkzeuge auf, die eine solche Ausgabe zum einen möglich machen (etwa als zusätzliche Variante) und sich zum anderen dazu eignen, um Daten im Terminal zu plotten.

Generalist

Gnuplot [10]

Spezialisten

Lowcharts [4], Asciichart [11], Plotext [12], Plotille [13], Termgraph [14], Ervy [15], Terminal-bar [16]

Bibliotheken

Termplotlib [17], Bashplotlib [18]

Die Liste ist nicht vollständig. Kennen Sie weitere Werkzeuge, die hier noch fehlen, freut sich der Autor auf Ihr Feedback. Außen vor bleiben GNU Octave [5] und SageMath [6], die ausschließlich eine grafische Ausgabe unterstützen.

Gnuplot

Der Veteran Gnuplot gilt seit Langem als ausgereift und äußerst vielfältig. Viele kennen den grafischen Modus mit einer umfassenden Liste an Kommandos. Dass das Programm aber zusätzlich die Ausgabe via Text unterstützt, fällt oft unter den Tisch.

Bei Gnuplot bauen Sie die Plots aus einzelnen Befehlen zusammen, die das Programm dann Schritt für Schritt interpretiert [7]. Für eine Ausgabe als ASCII-Zeichen sorgt das Kommando set terminal dumb (Listing 1).

Listing 1

Liniendiagramm mit Gnuplot

set terminal dumb
set datafile separator ","
plot "diagrammdaten.csv" with lines

Abbildung 1 zeigt eine Beispielausgabe für Daten, die als kommaseparierte, ganzzahlige Werte in der Datei diagrammdaten.csv vorliegen. In den Tests plottete Gnuplot fast alle Diagrammtypen auch im Terminal. Eine farbige Ausgabe beherrscht die Software jedoch nicht, die Grafiken bleiben schwarz-weiß.

Abbildung 1: Gnuplot verfügt über einen Modus, mit dem Sie Daten im Terminal in Form von ASCII-Zeichen ausgeben.

Abbildung 1: Gnuplot verfügt über einen Modus, mit dem Sie Daten im Terminal in Form von ASCII-Zeichen ausgeben.

Lowcharts

Mehr Farbe bringt Lowcharts ins Spiel. Das in Rust [8] programmierte Werkzeug steht über die Projektseite auf Github zum Download bereit. Im Test kam Version 0.4.2 zum Einsatz. Nach dem Übersetzen aus dem Quelltext mittels make release erzeugte es wie gewünscht die Diagramme. Die Tabelle “Kommandos” listet auf, mit welchen Parametern Sie die jeweilige Ausgabe erzeugen.

common-hist

Histogramm mit den gebräuchlichen Angaben

hist

einfaches Histogramm

matches

Balkendiagramm mit Häufigkeitsverteilung

plot

2D-Graph, Y-Werte bilden den Durchschnitt der Eingabewerte

split-timehist

Histogramm basierend auf der Trefferanzahl, Aufteilung nach der Trefferanzahl

timehist

Histogramm basierend auf der Trefferanzahl

Die beiden nachfolgenden Beispiele erzeugen Balkendiagramme. Grundlage bilden die Log-Dateien der Paketverwaltung. Das Diagramm zeigt, wie viele Aufrufe zu Installationen, Aktualisierungen und Entfernungen von Paketen stattgefunden haben (Abbildung 2). Für den Aufruf kommt das Unterkommando matches zum Einsatz, auf das die vier Schlüsselworte Update Upgrade Install Remove folgen.

Abbildung 2: Füttern Sie Lowcharts mit den Daten zu Aktualisierungen sowie Installationen und Deinstallationen, erstellt es mit dem passenden Aufruf daraus einen Graphen.

Abbildung 2: Füttern Sie Lowcharts mit den Daten zu Aktualisierungen sowie Installationen und Deinstallationen, erstellt es mit dem passenden Aufruf daraus einen Graphen.

Lowcharts zählt daraufhin alle Zeilen, in denen eines der Schlüsselworte vorkommt, und erzeugt daraus ein Balkendiagramm, wobei es jedem Begriff einen Balken zuordnet. Über der Ausgabe steht die Summe aller Treffer sowie die Information, wie viele Treffer ein rotes Quadrat repräsentiert (hier: 1 Quadrat pro Treffer).

Andere Unterkommandos erzeugen statistische Auswertungen der Daten, erfordern aber aufgrund der überschaubaren Dokumentation des Werkzeugs einige Experimente. Der Einsatz regulärer Ausdrücke sah in der Dokumentation spannend aus, führte jedoch im Test zu keinen brauchbaren Ergebnissen.

Daher zeigt das zweite Beispiel nur eine Auswertung einer Datendatei mit erfassten Werten und deren Häufigkeit (Abbildung 3) mittels des Unterkommandos hist. Über den Schalter --intervals 5 legen Sie fest, dass die Ausgabe nur fünf Zeilen umfasst.

Abbildung 3: Eine einfache Statistik erstellen Sie mit Lowchart im Handumdrehen.

Abbildung 3: Eine einfache Statistik erstellen Sie mit Lowchart im Handumdrehen.

Alternativen

Bei Bashplotlib, Termplotlib, Plotext, Termgraph und Plotille handelt es sich um kleine Python-Module, die alle sehr ähnlich funktionieren. Haben Sie Bashplotlib via Pip lokal installiert, steht es ohne weiteren Aufwand über die beiden Werkzeuge Hist und Scatter bereit. Das nachfolgende Beispiel benutzt die bereits zuvor in Abbildung 3 verwendeten Daten und generiert damit ein kleines Diagramm mittels Hist. Im Aufruf kommt zusätzlich die Option -t zum Tragen, die das Diagramm um einen Titel ergänzt (Abbildung 4).

Abbildung 4: Die Ausgabe mit Bashplotlib vermittelt ebenfalls auf den ersten Blick alle wichtigen Informationen aus den Daten.

Abbildung 4: Die Ausgabe mit Bashplotlib vermittelt ebenfalls auf den ersten Blick alle wichtigen Informationen aus den Daten.

Terminal-bar ähnelt Bashplotlib, die Art und Weise der Ausgaben beider Tools unterscheidet sich nicht groß. Plotext, Plotille und Termgraph weisen hingegen Parallelen zu Matplotlib [9] auf. Asciichart fällt in dieselbe Werkzeugkategorie, setzt aber nicht auf Python auf, sondern stattdessen auf Javascript und eignet sich damit zur Integration in eine Webseite.

Ervy benutzt ebenfalls Javascript. Es bietet mehr Möglichkeiten als Asciichart und glänzt durch Balken- und Tortendiagramme sowie verschiedene Ladebalken. Abbildung 5 zeigt die unterschiedlichen Balkentypen, die Ervy kennt.

Abbildung 5: Balkendiagramme lassen sich mit Ervy schnell erstellen. Dank Javascript als Grundlage für die Software wäre eine Integration in eine Webseite möglich.

Abbildung 5: Balkendiagramme lassen sich mit Ervy schnell erstellen. Dank Javascript als Grundlage für die Software wäre eine Integration in eine Webseite möglich.

Fazit

Ein Plot im Terminal ist keine Hexerei. Die Vielfalt der Bibliotheken und Werkzeuge erlaubt das Andocken und Integrieren in nahezu jeden Workflow auf der Kommandozeile. Bei den gängigen Distributionen fehlen die vorgestellten Werkzeuge oft in den Paketquellen, sodass ihr Einsatz etwas Handarbeit voraussetzt. Das sollte aber kein großes Hindernis darstellen, da sich der Aufwand für das Kompilieren der Werkzeuge in engen Grenzen hält. (agr)

Danksagung

Der Auto bedankt sich bei Harald König für Rat und Anmerkungen beim Erstellen des Artikels, insbesondere zu Gnuplot.

Über den Autor

Frank Hofmann arbeitet zumeist von unterwegs aus als Entwickler, Trainer und Autor. Seine bevorzugten Arbeitsorte sind Berlin, Genf und Kapstadt. Er gehört zu den Verfassern des Buchs zum Debian-Paketmanagement.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 02/2022 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben