Angeregt durch einen Beitrag auf be-jo.net über eine kurze Einführung in Gnuplot möchte ich hier an dieser Stelle noch ein paar Funktionen Vorstellen, die ich letztens benötigt hatte.
Ich habe vier Kurven dargestellt, die einen Leistungsverlauf darstellen als Differenz aus Last eines Netzkunden und der eingespeisten Photovoltaikleistung. Die Leistung liegt als 15-Minuten-Mittelwerte vor. Weiterhin soll bei der Kurve, die negative Leistungswerte enthält, die Fläche zwischen der Kurve und der Abszisse für den Bereich farbig dargestellt werden, der unterhalb der Abszisse liegt. Nachfolgend mein gewünschtes Ergebnis als Bild:
Meine Rohdaten liegen in einer CSV-Datei vor, deren Spalten durch ein Semikolon getrennt sind. In der ersten Spalte liegen die Uhrzeit in 15-Minuten-Abständen von 00:00 Uhr bis 23:45 Uhr vor. Die zweite bis vierte Spalte enthält die Leistungswerte, die als Kurve dargestellt werden sollen. Um die gefüllte Fläche darstellen lassen zu können, habe ich in der Rohdatendatei noch den Ordinatenwert der Abszisse angeben (y=0 für alle x auf der Abszisse). In Spalte sechs ist die Aufsummierung der Fläche zwischen der vierten Kurve und der Ordinate für die Leistungswerte, die unter Null liegen angegeben. Den letzten Wert der Aufsummierung habe ich auch in dem Diagramm dargestellt.
Die mir vorliegenden Rohdaten sehen also folgendermaßen aus:
#Uhrzeit;#Restmenge_40kW;#Restmenge_100kW;#Restmenge_250kW;y=0;Restmeng_kWh_Addition ... 09:45;160,2318;122,3118;27,5118;0;0 10:00;152,2280;102,9680;-20,1820;0;-5,0455 10:15;149,9888;100,7288;-22,4212;0;-10,6508 10:30;150,5048;101,2448;-21,9052;0;-16,1271 10:45;151,4892;102,2292;-20,9208;0;-21,3573 ...
Die CSV-Datei hatte ich im Übrigen vorher mittels eines Bashskriptes erstellt, mit dem ich die Auswertung der mir gegebenen Daten vorgenommen hatte.
Für die Auswertung mit Gnuplot habe ich ebenfalls eine Konfigurationsdatei erstellt. Ohne jetzt auf jedes Detail eingehenzu wollen (auf be-jo.net wurde bereits einiges beschrieben), werde ich hier ein paar Einstellungen von mir hervorheben.
1. Da meine CSV-Datei eine Spaltentrennung mittels Semikolon enthält war es nötig dies vor dem plotten mit anzugeben:
set datafile sep ';'
2. Die Leistungswerte liegen mit einem Komma als Dezimaltrennung vor. Es gibt zwar das Kommando „set decimalsign ‘,’“, aber dieses funktioniert nur für die Ausgabe. Wird beim einlesen einer Datei das Komma als Dezimaltrennzeichen genutzt, hat es bei mir geholfen das Kommando wie folgt zu ändern.
set decimalsign locale
Dies funktioniert aber nur in sofern, als dass im Betriebssystem das Dezimaltrennzeichen als Komma hinterlegt ist.
3. Weiterhin habe ich den letzten Wert in der Spalte sechs benötigt. Dieser ist bedingt durch meine Berechnung immer ein Minimum dieser Spalte. An den Wert bin ich mittels des Befehls „stats“ und „STATS_min“ gekommen. Dieser Wert wird negiert in die Variable „total1“ übergeben.
stats 'restmenge.csv' using 6 nooutput total1 = -STATS_min
4. Die erste Spalte enthält die x-Werte. Sie liegen im Zeitformat der Form 00:00, 00:15, … 23:45 vor. Um diese einlesen zu können, musste ich das Zeitformat angeben und angeben, dass die x-Daten ein Zeitformat sind. Außerdem wird das Format für die Abszisse auf das Zeitformat umgestellt.
set timefmt "%H:%M" set xdata time set format x "%H:%M"
5. Um die Achsen in den Koordinatenursprung zu bekommen, hat mir der Befehl
set xzeroaxis lt -1 lw 3 set yzeroaxis lt -1 lw 3
geholfen. Webei „lt“ und „lw“ den Linientyp und die Linienbreite angeben.
6. Mein Plot-Befehl sieht dann wie folgt aus:
plot [:][-200:200]'average_wrt.csv' using 1:2 w l lw 3 title "Restmenge ohne Einspeisung", 'restmenge.csv' using 1:2 w l lw 3 title "Restmenge mit P_{inst}=40kW", 'restmenge.csv' using 1:3 w l lw 3 title "Restmenge mit P_{inst}=100kW", 'restmenge.csv' using 1:4 w l lw 3 title "Restmenge mit P_{inst}=250kW", 'restmenge.csv' using 1:4:5 w filledcurves below lw 3 lc 4 notitle
Ich möchte hier insbesondere auf den vorletzten und letzten Plotbefehl eingehen. Mit dem vorletzten Befehl wird zunächst die Kurve geplottet mit der Zeit als x-Werte (Spalte 1) und den Leistungswerten der 4. Spalte als y-Werte. Um nun die gefüllte Fläche unter der x-Achse zu bekommen nutzte ich den letzten Befehl. Dort wird die Kurve nochmal plotte (Spalte 1 zu Spalte 4), aber vom Typ „filledcurves“. Die Füllung soll dabei nur unter („below“) der Kurve aus Spalte 5 (y=0), als unter der Abszisse dargestellt werden.