zur Startseite

Druckausgabe von https://privat.albicker.org
Iveco Daily 4x4, Hunde und multithematisches Blog - Bernhard Albicker

Balkendiagramm mit gnuplot erstellen

veröffentlicht am 05.03.2017

Ein Balkendiagramm ist im Prinzip ein Säulendiagramm, das um 90° gekippt ist. Es eignet sich gut dafür, Mengenverhältnisse darzustellen, z. B. Verteilung der Fotos, die in einem Jahr entstanden sind, auf die dafür benutzten Objektive.
Hinzufügen weiterer Rubriken ändert dabei nicht die Breite der Grafik, es werden lediglich in der Höhe einige “Zeilen” hinzugefügt.

Die Daten

Wie bereits erwähnt liegen die Daten als Textfile objektive.txt vor, das Format sieht folgendermaßen aus (hier am Beispiel von Fotos in einem bestimmten Zeitraum, die mit dem jeweiligen Objektiv geschossen wurden):

"2.8/400 incl. evtl. Konverter"	781
"Olympus 14-42" 	629
"2.8/70-200 incl. evtl. Konverter" 	382
2.8/24-70 	216
4/16-35 	10
"ohne Kennung" 	52

Die beiden Spalten sind jeweils durch Tabulatoren getrennt. Die Benennungen dürfen keine Leerzeichen enthalten (entweder durch Unterstriche ersetzen oder in " " einschließen).

Die Auswertung

Die Software ‘gnuplot’

Gnuplot (Eigenschreibweise: gnuplot) hatte ich an anderer Stelle bereits kurz beschrieben, sodaß ich hier gleich auf die Umsetzung des Problems eingehe.

Das Plotfile

Das Plotfile enthält alle Anweisungen an gnuplot, wie die vorliegenden Messdaten zu interpretieren und die Diagramme zu formatieren sind. Ich gebe hier den Inhalt dieser Datei abschnittsweise mit Erklärungen wieder:

# Parameter
datenfile = "objektive.txt"
bildfile = "objektive.png"
diagrammtitel = " "
xachsentitel = ""
yachsentitel = "Bild-Anzahl"
bildbreite = 600
bildhoehe = 800

Gnuplot wird zunächst in den Ausgangszustand zurückgesetzt (reset).
Als nächstes definiere ich einige Variablen. Das hat den Hintergrund, daß ich Werte, die sich ändern können, gerne am Anfang eines Files oder scripts zusammengefaßt stehen habe, weil das übersichtlicher ist.
Der aufmerksame Leser wird hier schon feststellen, daß Höhe und Breite vertauscht sind, das Bild also im Hochformat erzeugt wird. Das hat den Hintergrund, daß gnuplot zwar Säulendiagramme (vertikale Säulen), aber keine Balkendiagramme (horizontale Balken) beherrscht, sodaß das Bild hinterher gedreht werden muß.

# Diagramm formatieren
set title diagrammtitel
set xlabel xachsentitel
set ylabel yachsentitel

unset key
unset grid
unset border

set xtics rotate by 90 right
#set ytics rotate by 90 center
set boxwidth 0.7
set style fill solid

In diesem Abschnitt wird bestimmt, wie das Diagramm aussieht:

Im nächsten Abschnitt wird die Bildausgabe festgelegt: es wird eine PNG-Bilddatei erzeugt und deren Größe (in Pixeln) gesetzt, auch hier wird auf die anfangs gesetzten Variablen zurückgegriffen.

# Diagramm ausgeben
set size 1,1
set term png size bildbreite, bildhoehe
set out bildfile
plot datenfile using 2:xtic(1) with boxes

Für das Diagramm werden die Daten so gelesen:
Es werden die Werte aus der Spalte zwei aufgetragen als Säulen, als Beschriftung (xtic) wird die Spalte eins genutzt.

Ausführung und Ergebnis

gnuplot aufrufen

Im Terminal wird in das Verzeichnis gewechselt (cd /Pfad/zum/script), in dem die beiden Files objektive.txt (Auszählungs-Daten) und objektive.plt (Plotfile) liegen. Der Befehl

~/Pfad/zum/script $ gnuplot objektive.plt

startet gnuplot und veranlaßt es, das Plotfile abzuarbeiten und die Ergebnisse (Diagramme) im selben Verzeichnis abzulegen:

Beispiel-Diagramm zum obigen Plotfile

Diagramm: Azahl der Fotos pro jeweiligem Objektiv
Objektivstatistik

Schlußbemerkung

Die Beschreibung bezieht sich auf Linux. Gnuplot steht aber auch für Windows und MacOS zur Verfügung, sodaß dieses Verfahren, möglicherweise unter Anpassung des Plotfiles (insbesondere der Pfade), auch dort einsetzbar sein dürfte.