{"id":2084,"date":"2018-08-10T21:15:36","date_gmt":"2018-08-10T19:15:36","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=2084"},"modified":"2018-08-13T07:48:56","modified_gmt":"2018-08-13T05:48:56","slug":"ein-gnuplot-tutorial","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/ein-gnuplot-tutorial\/","title":{"rendered":"Ein Gnuplot-Tutorial"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><em><strong>Gnuplot<\/strong> (Eigenschreibweise: gnuplot) ist ein <a href=\"https:\/\/de.wikipedia.org\/wiki\/Skriptsprache\">skript<\/a>&#8211; bzw. <a href=\"https:\/\/de.wikipedia.org\/wiki\/Kommandozeile\">kommandozeilengesteuertes<\/a> Computerprogramm zur grafischen Darstellung von Messdaten und mathematischen <a href=\"https:\/\/de.wikipedia.org\/wiki\/Funktion_(Mathematik)\">Funktionen<\/a> (<a href=\"https:\/\/de.wikipedia.org\/wiki\/Funktionenplotter\">Funktionenplotter<\/a>). Das Projekt Gnuplot wird seit 1986 kontinuierlich von einem internationalen Team ehrenamtlicher Entwickler vorangetrieben. Der Quellcode wird seit 2000 \u00fcber <a href=\"https:\/\/de.wikipedia.org\/wiki\/SourceForge\">SourceForge<\/a> verwaltet.<\/em><\/p><cite><em><a href=\"https:\/\/de.wikipedia.org\/wiki\/Gnuplot\" target=\"_blank\" rel=\"noreferrer noopener\">Wikipedia<\/a> (letzter Abruf: 04.08.2018)<\/em><\/cite><\/blockquote>\n\n\n\n<p>Da die auf der <a href=\"http:\/\/www.gnuplot.info\/help.html\" target=\"_blank\" rel=\"noopener\">offiziellen Projekt-Homepage<\/a> verlinkten deutschsprachigen Tutorials allesamt auf eine Fehlerseite (404 &#8211; Page Not Found) f\u00fchren, m\u00f6chte ich hier ein eigenes Tutorial in deutscher Sprache anbieten. Darin werde ich zeigen, wie Messdaten aus Text- bzw. CSV-Dateien grafisch dargestellt und in den Formaten <a href=\"https:\/\/de.wikipedia.org\/wiki\/Encapsulated_PostScript\" target=\"_blank\" rel=\"noopener\">EPS<\/a>, <a href=\"https:\/\/de.wikipedia.org\/wiki\/Portable_Network_Graphics\" target=\"_blank\" rel=\"noopener\">PNG<\/a> und <a href=\"https:\/\/de.wikipedia.org\/wiki\/Scalable_Vector_Graphics\" target=\"_blank\" rel=\"noopener\">SVG<\/a> ausgegeben werden k\u00f6nnen. Das Tutorial schlie\u00dft mit einem Beispiel zur Histogramm-Erstellung.<br\/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voraussetzungen<\/h2>\n\n\n\n<p>Um die Inhalte dieses Tutorials nachvollziehen zu k\u00f6nnen, ben\u00f6tigt Ihr eine gnuplot-Installation auf dem eigenen Rechner.<\/p>\n\n\n\n<p>Benutzer von Linux k\u00f6nnen gnuplot f\u00fcr gew\u00f6hnlich \u00fcber die Paketverwaltung ihrer Distribution installieren. Benutzer von Windows und anderer Betriebssysteme k\u00f6nnen unter <a href=\"http:\/\/www.gnuplot.info\/download.html\" target=\"_blank\">gnuplot download<\/a> nachschauen.<\/p>\n\n\n\n<p>Die in diesem Tutorial verwendeten Beispiel-Dateien k\u00f6nnen direkt von dieser Seite heruntergeladen werden, um die Beispiele nachzuvollziehen.<br\/><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 1: Darstellung der Energiekostenentwicklung<\/h2>\n\n\n\n<p>Um dieses Beispiel nachvollziehen zu k\u00f6nnen, wird folgende Datei ben\u00f6tigt:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Energiepreise_Heizoel_Strom.csv\">Energiepreise_Heizoel_Strom.csv<\/a><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Energiepreise_Heizoel_Strom.csv\" class=\"wp-block-file__button\" download=\"Energiepreise_Heizoel_Strom.csv\">Download<\/a><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code># Energiepreise_Heizoel_Strom.csv\n# https:\/\/www.destatis.de\/DE\/Publikationen\/Thematisch\/Preise\/Energiepreise\/Energiepreisentwicklung.html\n# Elektrischer Strom in Cent\/kWh inkl. Steuern\n# Leichtes Heiz\u00f6l Cent\/l inkl. Mineral\u00f6lsteuer und Erd\u00f6lbevorratungsbeitrag, ohne Mehrwertsteuer\n# Jahresdurchschnitt\n# Berichtsjahr;leichtes Heiz\u00f6l;Strom\n2000;35,30;\n2001;32,06;\n2002;30,27;\n2003;30,75;\n2004;34,41;\n2005;45,11;\n2006;50,32;\n2007;49,73;\n2008;64,08;21,72\n2009;43,77;22,88\n2010;54,87;24,07\n2011;69,26;25,3\n2012;75,33;26,36\n2013;70,36;29,2\n2014;64,37;29,78\n2015;48,79;29,49\n2016;40,94;29,73\n2017;47,51;30,48\n2018;53,74;<\/code><\/pre>\n\n\n\n<p>Das obige Listing zeigt den Inhalt der Datei Energiepreise_Heizoel_Strom.csv.<\/p>\n\n\n\n<p>Die Datei enth\u00e4lt zu Beginn einige Kommentarzeilen (beginnend mit #) mit beschreibendem Text. Darunter befinden sich die drei Spalten Berichtsjahr, leichtes Heiz\u00f6l und Strom, welche durch ein Semikolon voneinander getrennt sind. Diese Werte sollen nun in einem anschaulichen Diagramm dargestellt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Daten mit gnuplot grafisch darstellen<\/h3>\n\n\n\n<p>Um die Daten aus obiger Datei grafisch darstellen zu k\u00f6nnen, sind zuerst folgende Schritte auszuf\u00fchren:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>\u00d6ffne ein Terminal<\/li><li>Wechsle in das Verzeichnis, in dem die Datei Energiepreise_Heizoel_Strom.csv liegt<\/li><li>Starte gnuplot durch Eingabe des entsprechenden Kommandos<\/li><\/ol>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"547\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_gnuplot.png\" alt=\"\" class=\"wp-image-2088\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_gnuplot.png 655w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_gnuplot-300x251.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_gnuplot-624x521.png 624w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><figcaption>Bildschirmfoto vom Verzeichniswechsel und Start von gnuplot<\/figcaption><\/figure>\n<\/div>\n\n\n<p>Wir befinden uns jetzt im interaktiven Eingabemodus. Durch Eingabe der folgenden Befehle erhalten wir eine erste grafische Darstellung unserer Daten. Die gezeigten Befehle werden im Einzelnen nach der folgenden Abbildung erl\u00e4utert.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"625\" height=\"479\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_1.png\" alt=\"\" class=\"wp-image-2091\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_1.png 625w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_1-300x230.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_1-624x478.png 624w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption>Erster Plot des Diagramms<\/figcaption><\/figure>\n<\/div>\n\n\n<pre class=\"wp-block-code\"><code>gnuplot> set datafile separator \";\"\ngnuplot> set autoscale\ngnuplot> set xlabel \"Jahr\"\ngnuplot> set ylabel \"Preis in Cent\"\ngnuplot> plot \"Energiepreise_Heizoel_Strom.csv\" using 1:2 title \"leichtes Heiz\\U+FFC3\\U+FFB6l Cent\/l\", \"Energiepreise_Heizoel_Strom.csv\" using 1:3 title \"elektrischer Strom Cent\/kWh\"\ngnuplot><\/code><\/pre>\n\n\n\n<p>Das obige Listing stellt die Befehle zum Plot des Diagramms im Bild dar\u00fcber dar.<\/p>\n\n\n\n<p>In der ersten Zeile wird das verwendete Trennzeichen angegeben. In diesem Fall handelt es sich dabei um das Semikolon, welches die einzelnen Spalten in unserer CSV-Datei voneinander trennt.<\/p>\n\n\n\n<p>Zeile 2 gibt an, dass sich Gnuplot selbst um eine sinnvolle Skalierung der Achsen im Diagramm k\u00fcmmern soll. Wie man die Skalierung manuell vorgibt, wird in einem sp\u00e4teren Beispiel gezeigt. Mit `set xlabel\/ylabel` wird die Achsenbeschriftung festgelegt.<\/p>\n\n\n\n<p>In der letzten Zeile wird schlie\u00dflich der Befehl zum Zeichnen des Diagramms eingegeben. Eingeleitet wird die Zeile vom Kommando &#8222;plot&#8220;, gefolgt von der Angabe des Dateinamens. Mit &#8222;using 1:2&#8220; wird angegeben, dass Gnuplot die Spalten 1 und 2 aus der Datei darstellen soll. Dabei wird der erste Wert an der X-Achse und der zweite Wert an der Y-Achse abgetragen. Mit dem Schl\u00fcsselwort &#8222;title&#8220; kann noch eine Graphenbeschriftung f\u00fcr die Legende vergeben werden. Nach dem Komma wird die Angabe wiederholt. Hier sollen die Daten der ersten und dritten Spalte aus der Datei visualisiert werden. Man k\u00f6nnte an dieser Stelle auch eine andere Datei angeben, aus der man Werte im Diagramm darstellen m\u00f6chte. Dazu ist lediglich der entsprechende Dateiname zu \u00e4ndern.<\/p>\n\n\n\n<p>Selbstverst\u00e4ndlich kann auch die Darstellungsform der Graphen beeinflusst werden. Das folgende Beispiel zeigt, wie man den Graphen f\u00fcr leichtes Heiz\u00f6l als Linie und den f\u00fcr elektrischen Strom als Linie mit Punkten darstellt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gnuplot> plot \"Energiepreise_Heizoel_Strom.csv\" using 1:2 with lines title \"leichtes Heizl Cent\/l\", \"Energiepreise_Heizoel_Strom.csv\" using 1:3 with linespoints title \"elektrischer Strom Cent\/kWh\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"625\" height=\"479\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_2.png\" alt=\"\" class=\"wp-image-2092\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_2.png 625w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_2-300x230.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Plot_2-624x478.png 624w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption>Diagramm mit Linie und Linienpunkten<\/figcaption><\/figure>\n\n\n\n<p>Wie man im\u00a0 Listing sieht, kann hinter dem Schl\u00fcsselwort &#8222;with&#8220; der zu verwendende Linientyp angegeben werden. Um zu sehen, welche Darstellungsformen m\u00f6glich sind, kann man die eingebaute Hilfe aufrufen, indem man z.B. `help with` eingibt.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Gnuplot_help.png\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"427\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Gnuplot_help.png\" alt=\"\" class=\"wp-image-2093\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Gnuplot_help.png 655w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Gnuplot_help-300x196.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Bildschirmfoto_Gnuplot_help-624x407.png 624w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/a><figcaption>Gnuplot-Hilfe f\u00fcr die Funktion &#8222;with&#8220;<\/figcaption><\/figure>\n\n\n\n<p>Die Hilfe in Gnuplot ist sehr umfangreich und bietet neben umfassenden Informationen zu allen Kommandos, Funktionen und Schl\u00fcsselw\u00f6rtern auch einige sch\u00f6ne Beispiele. An ihr erkennt man in meinen Augen den hohen Reifegrad dieses Programms. Eine derart gute Dokumentation sucht man bei vielen anderen Projekten leider noch vergebens.<\/p>\n\n\n\n<p>Die Entwickler von Gnuplot haben auch an die Tippmuffel unter uns gedacht. So l\u00e4sst sich die Schreibweise etlicher Funktionen in Gnuplot abk\u00fcrzen. Die beiden Zeilen im folgenden Listing sind \u00e4quivalent und f\u00fchren zur gleichen Ausgabe.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gnuplot> plot \"Energiepreise_Heizoel_Strom.csv\" using 1:2 with lines title \"leichtes Heizl Cent\/l\", \"Energiepreise_Heizoel_Strom.csv\" using 1:3 with linespoints title \"elektrischer Strom Cent\/kWh\"\n\ngnuplot> plot \"Energiepreise_Heizoel_Strom.csv\" u 1:2 w lines t \"leichtes Heizl Cent\/l\", \"Energiepreise_Heizoel_Strom.csv\" u 1:3 w lines t \"elektrischer Strom Cent\/kWh\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Einstellungen speichern<\/h3>\n\n\n\n<p>Um nun nicht jedes Mal, wenn man Gnuplot startet, alle Einstellungen erneut eintippen zu m\u00fcssen, k\u00f6nnen diese gespeichert werden.<br\/><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gnuplot> save \"Energiepreise_Heizoel_Strom.gp\"<\/code><\/pre>\n\n\n\n<p>Diese Einstellungen k\u00f6nnen nun in einer neuen Gnuplot-Konsole mit <code>load \"Energiepreise_Heizoel_Strom.gp\"<\/code>geladen werden. Das Diagramm wird dabei automatisch mit den gespeicherten Einstellungen gezeichnet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ausgabe in PNG, SVG und EPS<\/h3>\n\n\n\n<p>Gnuplot bietet die M\u00f6glichkeit, Diagramme in verschiedensten Formaten auszugeben. Dazu wird in der interaktiven Gnuplot-Konsole das entsprechende Ausgabe-Terminal definiert und anschlie\u00dfend das Diagramm gezeichnet. Das folgende Listing zeigt den Code f\u00fcr Ausgabe des obigen Diagramms als PNG, SVG und EPS. Die Ergebnisse der Ausgabe befinden sich im aktuellen Arbeitsverzeichnis auf eurem Endger\u00e4t.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gnuplot> set terminal pngcairo size 640,480 enhanced font 'Verdana,10'\nTerminal type set to 'pngcairo'\nOptions are ' background \"#ffffff\" enhanced font \"Verdana,10\" fontscale 1.0 size 640, 480 '\ngnuplot> set output 'Energiepreise.png'\ngnuplot> replot\n\ngnuplot> set terminal svg size 640,480 fname 'Verdana' fsize 10\nTerminal type set to 'svg'\nOptions are 'size 640,480 fixed enhanced fname 'Verdana'  fsize 10 butt dashlength 1.0 '\ngnuplot> set output 'Energiepreise.svg'\ngnuplot> replot\n\ngnuplot> set terminal postscript eps size 3.2,2.4 enhanced color font 'Helvetica,20' linewidth 2\nTerminal type set to 'postscript'\nOptions are 'eps enhanced defaultplex \\\n   leveldefault color colortext \\\n   dashlength 1.0 linewidth 2.0 butt noclip \\\n   nobackground \\\n   palfuncparam 2000,0.003 \\\n   size 3.20in, 2.40in \"Helvetica\" 20  fontscale 1.0 '\ngnuplot> set output 'Energiepreise.eps'\ngnuplot> replot\ngnuplot><\/code><\/pre>\n\n\n\n<p>Die Gr\u00f6\u00dfenangaben (size) k\u00f6nnen selbstverst\u00e4ndlich den eigenen Bed\u00fcrfnissen angepasst werden.<\/p>\n\n\n\n<p>Ist die Postscript-Ausgabe f\u00fcr ein Dokument bestimmt, welches in schwarz-wei\u00df gedruckt werden soll, empfiehlt sich folgende Terminal-Konfiguration. Gnuplot bereitet dabei die Darstellung der Graphen f\u00fcr den Schwarz-Wei\u00df-Druck auf.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gnuplot> set terminal postscript eps size 3.2,2.4 monochrome font 'Helvetica,20' linewidth 2\nTerminal type set to 'postscript'\nOptions are 'eps enhanced defaultplex \\\n   leveldefault monochrome colortext \\\n   dashlength 1.0 linewidth 2.0 butt noclip \\\n   nobackground \\\n   palfuncparam 2000,0.003 \\\n   size 3.20in, 2.40in \"Helvetica\" 20  fontscale 1.0 '\ngnuplot> set output 'Energiepreise_sw.eps'gnuplot> replot<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 2: Darstellung einer Messreihe mit Zeitabtrag an der X-Achse<\/h2>\n\n\n\n<p>Dieses Beispiel setzt den Schwerpunkt bei der Abtragung von Datum und Uhrzeit an der X-Achse mit entsprechender Formatierung. Daneben wird gezeigt, wie man selbst die anzuzeigenden Intervalle an X- und Y-Achse konfiguriert.<\/p>\n\n\n\n<p>Um dieses Beispiel nachvollziehen zu k\u00f6nnen, wird folgende Datei ben\u00f6tigt:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22data.csv\">dht22data.csv<\/a><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22data.csv\" class=\"wp-block-file__button\" download=\"dht22data.csv\">Download<\/a><\/div>\n\n\n\n<p>In der Datei befinden sich Messwerte von drei DHT22-Sensoren, welche Temperatur und Luftfeuchtigkeit messen k\u00f6nnen. Die Datei besteht aus insgesamt 3983 Zeilen und besitzt folgenden Aufbau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ head -n6 dht22data.csv \n#Date,Temp1,Humd1,Temp2,Humd2,Temp3,Humd3\n2018-06-04T17:57:26,23.80,61.50,23.90,51.50,22.70,52.80\n2018-06-04T18:02:26,23.80,61.60,23.90,51.50,22.70,52.80\n2018-06-04T18:07:27,23.80,61.50,23.90,51.50,22.70,52.80\n2018-06-04T18:12:27,23.80,61.60,23.90,51.50,22.70,52.80\n2018-06-04T18:17:28,23.80,61.30,23.90,51.50,22.70,52.80<\/code><\/pre>\n\n\n\n<p>In der ersten Spalte findet sich ein Zeitstempel, gefolgt von den jeweiligen Messwerten der drei Sensoren. Als Spaltentrennzeichen wird in dieser Datei das Komma verwendet. Als Dezimaltrennzeichen findet der Punkt Verwendung.<\/p>\n\n\n\n<p>Im zu erstellenden Diagramm sollen Datum und Uhrzeit auf der X-Achse abgetragen werden. Auf der Y-Achse sollen die Temperaturwerte der drei Sensoren dargestellt werden. Die Luftfeuchtigkeit bleibt in diesem Beispiel unber\u00fccksichtigt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set datafile separator \",\"\nset xdata time\nset timefmt \"%Y-%m-%dT%H:%M:%S\"\nset xrange [ \"2018-06-04T17:57:26\" : \"2018-07-11T12:44:50\" ]\nset yrange [ 18:25 ]\nset format x \"%m-%d\\n%H:%M\"\nplot \"dht22data.csv\" u 1:2 title \"Sensor 1\", \"dht22data.csv\" u 1:4 title \"Sensor 2\", \"dht22data.csv\" u 1:6 title \"Sensor 3\"<\/code><\/pre>\n\n\n\n<p>Im obigen Listing wird zuerst das Spaltentrennzeichen definiert. In der zweiten Zeile wird Gnuplot mitgeteilt, dass auf der X-Achse Datum und Zeit abgetragen werden soll. <em>Hinweis:<\/em> Intern rechnet Gnuplot ausschlie\u00dflich in Sekunden.<\/p>\n\n\n\n<p>Zeile 3 teilt Gnuplot mit, in welchem Format Datum und Uhrzeit in der Datei vorliegen. In Zeile 4 werden die Grenzen definiert. F\u00fcr die Angabe wurde der erste und der letzte Zeitstempel aus der Beispieldatei verwendet.<\/p>\n\n\n\n<p>Mit <code>set yrange [ 18:25 ]<\/code> wird ein Intervall f\u00fcr die Y-Achse definiert, welches f\u00fcr eine Temperaturkurve sinnvoll erscheint. Das Kommando <code>set format x \"%m-%d\\n%H:%M\"<\/code> gibt an, wie Datum und Uhrzeit an der X-Achse dargestellt werden sollen. In diesem Beispiel sollen erst Monat und Tag und nach einem Zeilenumbruch Stunde und Minute dargestellt werden. Der letzte Befehl zeichnet dann das folgende Diagramm.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps-1.png\" alt=\"\" class=\"wp-image-2099\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps-1.png 640w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps-1-300x225.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps-1-624x468.png 624w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Darstellung der Messwerte f\u00fcr die Temperatur<\/figcaption><\/figure>\n\n\n\n<p>In der grafischen Darstellung ist auf den ersten Blick zu erkennen, dass es eine L\u00fccke in der Messreihe gibt. Hierbei handelt es sich nicht um einen Fehler. Es fand in dem Zeitraum tats\u00e4chlich keine Messung statt. Zoomt man nun in das Diagramm hinein, kann man sehen, dass die Werte an der X-Achse automatisch skaliert werden.<\/p>\n\n\n\n<ul class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom1.png\" alt=\"\" data-id=\"2100\" data-link=\"https:\/\/www.my-it-brain.de\/wordpress\/?attachment_id=2100\" class=\"wp-image-2100\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom1.png 640w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom1-300x225.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom1-624x468.png 624w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Zoomansicht 1<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom2.png\" alt=\"\" data-id=\"2101\" data-link=\"https:\/\/www.my-it-brain.de\/wordpress\/?attachment_id=2101\" class=\"wp-image-2101\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom2.png 640w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom2-300x225.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temps_zoom2-624x468.png 624w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Zoomansicht 2<\/figcaption><\/figure><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 3: Zweite Y-Achse<\/h2>\n\n\n\n<p>Im vorangegangenen Beispiel wurden nur die Temperaturwerte aus der Beispieldatei betrachtet. In diesem Beispiel soll die von einem Sensor gemessene Temperatur an der Y-Achse (links) und die Luftfeuchtigkeit an einer zweiten Y-Achse (rechts) abgetragen werden. Aus Gr\u00fcnden der \u00dcbersichtlichkeit wird dabei nur ein Ausschnitt der Werte f\u00fcr den ersten Sensor dargestellt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>set datafile separator \",\"\nset xdata time\nset timefmt \"%Y-%m-%dT%H:%M:%S\"\nset xrange [ \"2018-06-04T17:57:26\" : \"2018-07-11T12:44:50\" ]\nset yrange [ 23:25 ]\nset y2range [ 40:65 ]\nset y2tic\nset format x \"%m-%d\\n%H:%M\"\nplot \"dht22data.csv\" u 1:2 title \"Temp 1\" axes x1y1, \"dht22data.csv\" u 1:3 title \"Humd 1\" axes x1y2<\/code><\/pre>\n\n\n\n<p>Mit <code>set y2range [ 40:65 ]<\/code> wird ein Intervall f\u00fcr die zweite Y-Achse festgelegt und mit <code>set y2tic<\/code> die Beschriftung der Achse aktiviert. Die letzte Zeile stellt den Plot-Befehl dar. Hier ist zu erkennen, dass bei Verwendung von zwei Y-Achsen stets mit anzugeben ist, an welcher Achse ein Wert abgetragen werden soll.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temp_and_humd.png\" alt=\"\" class=\"wp-image-2103\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temp_and_humd.png 640w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temp_and_humd-300x225.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/dht22_temp_and_humd-624x468.png 624w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Darstellung von Temperatur und Luftfeuchtigkeit in einem Diagramm<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel 4: Erstellung eines Histogramms<\/h2>\n\n\n\n<p>In diesem Beispiel wird aus den Daten einer CSV-Datei ein Histogramm erstellt. Die Datei selbst hat folgenden Aufbau und kann wie gewohnt von dieser Seite heruntergeladen werden, um das Beispiel nachvollziehen zu k\u00f6nnen.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/file.csv\">file.csv<\/a><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/file.csv\" class=\"wp-block-file__button\" download=\"file.csv\">Download<\/a><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>Datum,0-6 Uhr,6-12 Uhr,12-18 Uhr,18-24 Uhr\n2018-07-17,2,4,6,4\n2018-07-18,1,5,5,2\n2018-07-19,0,8,4,3\n2018-07-20,0,3,7,6<\/code><\/pre>\n\n\n\n<p>Das Komma wird als Spaltentrennzeichen verwendet. Die erste Zeile enth\u00e4lt Spalten\u00fcberschriften, gefolgt von den darzustellenden Werten in den folgenden Zeilen.<\/p>\n\n\n\n<p>In diesem Beispiel wird dargestellt, wie viele Ereignisse pro Tag und Zeitraum erfasst wurden. Das Ergebnis soll dann wie folgt aussehen.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Ereignisse_pro_Tag_und_Zeitraum.png\" alt=\"\" class=\"wp-image-2110\" srcset=\"https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Ereignisse_pro_Tag_und_Zeitraum.png 640w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Ereignisse_pro_Tag_und_Zeitraum-300x225.png 300w, https:\/\/www.my-it-brain.de\/wordpress\/wp-content\/uploads\/2018\/08\/Ereignisse_pro_Tag_und_Zeitraum-624x468.png 624w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption>Darstellung von einer Anzahl Ereignisse pro Tag und Zeitraum<\/figcaption><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>set datafile separator \",\"\nset grid\nset key top right outside vertical autotitle columnhead\nset xtics rotate by 90 right out nomirror\nset ytics out\nset style fill solid border -1\nset boxwidth 0.5 relative\nset title \"Ereignisse pro Tag und Zeitraum\"\nset style data histograms\nset style histogram rowstacked\nplot for [col=2:5] 'file.csv' u col:xticlabels(1)<\/code><\/pre>\n\n\n\n<p>Zu Beginn wird das Spaltentrennzeichen definiert. Die folgende Angabe schaltet ein Gitternetz innerhalb des Histogramms ein. Dies dient der besseren \u00dcbersicht.<\/p>\n\n\n\n<p>Die dritte Zeile im Quelltext gibt an, dass die erste Zeile in der Beispieldatei genutzt werden soll, um passende Spalten\u00fcberschriften zu generieren und als vertikale Legende rechts au\u00dferhalb des Diagramms darzustellen. M\u00f6chte man dies nicht verwenden, ist die erste Zeile der Beispieldatei auszukommentieren, da Gnuplot andernfalls einen Fehler meldet.<\/p>\n\n\n\n<p>Da ein Histogramm mit einer wachsenden Anzahl Balken erstellt wird, ist die Beschriftung der X-Achse (mit den Werten aus Spalte 1) etwas anzupassen. Der Code in Zeile 4 dreht die Bezeichner um 90\u00b0 und richtet sie rechtsb\u00fcndig am dazugeh\u00f6rigen Balken aus. Die drei folgenden Zeilen k\u00fcmmern sich um die Formatierung der Y-Achse und das Aussehen der Balken bzw. der Boxen in den Balken. Spielen Sie ruhig mit den Werten, um zu sehen, wie sich \u00c4nderungen auf die Darstellung auswirken.<\/p>\n\n\n\n<p>Mit <code>set title<\/code> wird das Diagramm mit einem Titel \u00fcberschrieben.<\/p>\n\n\n\n<p>In den beiden vorletzten Zeilen wird angegeben, dass ein Histogramm gezeichnet werden soll und das die Daten Zeilenweise verarbeitet werden. Dies bedeutet, dass die in einer Zeile enthaltenen Werte anschlie\u00dfend als Boxen in einem Balken dargestellt werden. Pro Zeile wird ein Balken gezeichnet.<\/p>\n\n\n\n<p>Die letzte Zeile zeichnet dann das Histogramm. Durch <code>for [col=2:5]<\/code> wird angegeben, dass die Werte in den Spalten 2 bis 5 als Boxen in einem Balken dargestellt werden. Mit <code>col:xticlabels(1)<\/code> wird erreicht, dass ein Balken einem Datum aus Spalte 1 zugeordnet wird.<\/p>\n\n\n\n<p>Nat\u00fcrlich k\u00f6nnen auch die Einstellungen aus diesem Beispiel mit <code>load \"dateiname.gp\"<\/code> gespeichert und sp\u00e4ter wiederverwendet werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Ich selbst bin erst vor relativ kurzer Zeit auf Gnuplot aufmerksam geworden, doch m\u00f6chte ich es heute nicht mehr missen.<\/p>\n\n\n\n<p>Hat man sich erstmal an die Bedienung gew\u00f6hnt, lassen sich schnell und effizient anschauliche Diagramme produzieren, ohne eine Tabellenkalkulation bem\u00fchen zu m\u00fcssen.<br\/><\/p>\n\n\n\n<p>Ich hoffe, dieses kleine Gnuplot-Tutorial hat euch gefallen und konnte euer Interesse an einem sch\u00f6nen und leistungsstarken Werkzeug wecken.<\/p>\n\n\n\n<p><em><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Da die auf der offiziellen Projekt-Homepage verlinkten deutschsprachigen Tutorials allesamt auf eine Fehlerseite (404 &#8211; Page Not Found) f\u00fchren, m\u00f6chte ich hier ein eigenes Tutorial in deutscher Sprache anbieten. Darin werde ich zeigen, wie Messdaten aus Text- bzw. CSV-Dateien grafisch dargestellt und in den Formaten EPS, PNG und SVG ausgegeben werden k\u00f6nnen. Das Tutorial schlie\u00dft mit einem Beispiel zur Histogramm-Erstellung.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[3],"tags":[501,430,305],"class_list":["post-2084","post","type-post","status-publish","format-standard","hentry","category-tutorials","tag-gnuplot","tag-osbn","tag-planet"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2084"}],"version-history":[{"count":13,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2084\/revisions"}],"predecessor-version":[{"id":2113,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2084\/revisions\/2113"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}