Fischertechnik
AVR
Raspberry Pi
Elektronik
Netzwerk
Sonstiges


















Impressum

Messdatenvisualisierung

Mein Lieblingsprogramm zur Visualisierung von Messdaten oder Netzwerktrace-Ausgaben ist gnuplot. Für mich sind dabei die folgenden Punkte ausschlaggebend:
  • Unter Linux und anderen unixoiden Betriebssystemen hervoragend zur Automation integriert.
  • Sehr umfangreiche Darstellungsmöglichkeiten.
  • Iteratives Entwickeln der richtigen Darstellung und Sicherung der erforderlichen Konfiguration.
  • Viele Ausgabeformate; im Web-Umfeld nutze ich fast ausschließlich png.
  • Ein- und Ausgabeformat unterstützt Datum und Uhrzeit.

Ausgabeformat für Datum und Uhrzeit

gnuplot zählt die Zeit in Sekunden seit dem 1. Januar 2000. Negative Werte sind zulässig und führen zum erwarteten Datum. Mit diesem Wissen ist es einfach Funktionen oder Messwerte auch mit lesbaren Zeiten darzustellen. Die Skalierung der Achsbeschriftung erfolgt mit den üblichen Formatierungen.
set xdata time; set format x "%H:%M:%S\n%d.%m.%Y"
beschriftet die X-Achse zweizeilig, oben mit der Uhrzeit Stunde:Minute:Sekunde und unten mit Tag.Monat.Jahr (vierstellig). Die Bedeutung der "specifier" wird erst mit dem ersten Statement auf Datum/Uhrzeit umgeschaltet.
Auswahl einiger "specifier"; mit help set time ist die vollständige Liste abfragbar.

%A Wochentag (Name)
%a Wochentag abgekürzt (Name)
%B Monat (Name)
%b Monat abgekürzt (Name)
%T Abkürzung für %H:%M:%S
%W Woche des Jahres
%w Wochentag (Nummer) 0=Sonntag
%Y Jahr, vierstellig
%y Jahr, zweistellig

Subsekunden bei Ausgaben

Die Formate %s und %S erlauben auch die Ausgabe von Nachkommastellen. Zum Beispiel "%H:%M:%.3S" mit drei Nachkommastellen, also Millisekunden.

Jetzt ist die Beschriftung aber zu lang..."

... und überlappt. Hier verwende ich zwei Varianten. Wie oben dargestellt gerne mehrzeilige Beschriftung der Tics, oder durch ein nachgestelltes rotate by 45 right mit entsprechendem Winkel und rechtsbündig.

Eingabeformat für Datum und Uhrzeit

Liegen Messwerte mit formatierten Datums- oder Zeitangaben vor, kann das Format direkt verarbeitet werde. Die "specifier" entsprechen weitestgehend denen der Ausgabe. Wichtigster Unterschied für mich ist die Interpretation von %s. In der Eingabe entspricht dieses der Linux-Zeitrechnung, also Sekunden seit dem 1. Januar 1970. In der Ausgabe wird die gnuplot-Zeitrechnung verwendet, also Sekunden seit dem 1. Januar 2000.
Beispiel
set timefmt "%Y%m%d"
Nach dem Setzen dieses Formats können in xrange oder set label ... at auch entsprechende Angaben verwendet werden.

Subsekunden bei Eingaben

Die Formate %s und %S lesen nicht nur die bzw. zwei Stellen für die Sekunden, sondern auch weiter wenn ein Dezimalpunkt folgt. Auf diese Art und Weise können also auch hochgenaue Zeitangaben richtig verarbeitet werden.
Das Zeitformat kann auch für range-Angaben verwendet werden.

Einbinden von Pipes und Systemkommandos

Pipes


plot "< tail -10000 messdaten | grep Eingangswert" using 1:2 with lines tit "Daten";

Systemkommandos

Mit der folgenden Nutzung von system stelle ich eine feste Zeitspanne relativ zur aktuellen Zeit sicher:
set xrange [ ( system("date +%s")-946684800-3600*28) : ( system("date +%s")-946684800+3600*3) : ]
Die Korrekturen in Vielfachen von 3600 sind die Stunden Versatz, die ich benötige; Die Korrektur zwischen Linux- und gnuplot-Zeitrechnung erfolgt mit -946684800.

Animierte Darstellung

Die automatisierte Erzeugung komplexer Zusammenhänge in 3D ist ebenfalls leicht möglich. Allerdings ergab sich dabei wiederholt das Problem, daß die Darstellung aus einem ungünstigen Betrachtungswinkel erfolgte. Dieses konnte ich umgehen, indem ich ein "animated gif" als Ausgabeformat gewählt und dann Plots für einen in wenigen Gradschritten variierenden Betrachtungswinkel in die Ausgabedatei geschrieben habe. In der rotierenden Ansicht waren so die Zusammenhänge leichter erkennbar.