csv nach png
15. Oktober 2019
Je größer die Datenmengen, desto schneller kommt Excel & Co. an seine Grenzen. Deutlich schneller geht es mit gnuplot. Ehe die große Menge an Daten von gnuplot prozessiert werden kann, muss diese aufbereitet werden. Oft finden sich im Kopfbereich der CSV-Datei Informationen über den Messverlauf. Beginn, Ende, Messschritte, etc. Da diese Information für die grafische Aufbereitung nicht von Belang ist, werden solche Zeilen einfach entfernt. Übrig bleiben z.B. folgende Daten.
Voltage [V];Current [A];Time [ms];
5.0;0.2;17:30:01:001
5.0;0.21;17:30:01:002
5.0;0.22;17:30:01:003
5.0;0.21;17:30:01:004
...
Die Spannung bleibt im Laufe der Messung konstant und die absolute Uhrzeit ist nicht von Interesse.
Deshalb reicht es völlig die zweite Spalte mittels awk
zu extrahieren.
$ awk -F\; '{OFS=";";print $2}' MessreiheOhneHeader.csv > MessreiheAufbereitet.csv
Gnuplot stört sich noch an der Spaltenüberschrift (Current [A]
), daher muss diese noch entfernt werden, ehe es mit den Daten arbeiten kann.
Anschließend kann gnuplot gestartet werden und die Einstellungen händisch gesetzt werden oder man verpackt das Setzen der Einstellungen in ein Skript.
$ cat plot.sh
#!/bin/sh
if [ $# -ne 7 ]; then
echo "usage: $0 title xlabel ylabel xsize ysize csv png"
# echo "example: $0 \"Titel 1\" \"x label\" \"y label\" 1920 1080 input.csv output.png"
exit 1
fi
gnuplot -e "set grid; set title '$1';set xlabel '$2';set ylabel '$3';set term png size $4, $5;set key off;set output '$7'; plot '$6'"
Der Skriptaufruf sieht beispielsweise so aus
$ ./plot.sh "Titel der Grafik" "Zeit [ms]" "Strom [A]" 1920 1080 MessreiheAufbereitet.csv Grafik.png
und der Plot so.