MoinMoin, ich habe über einen längeren Zeitraum verschiedenen Klimadaten (Temperaturen, Lichtverhältnisse, Luftfeuchtigkeit etc.) aufgezeichnet und möchte diese in einer heat map ("Wärmebild") mit gnuplot visualisieren (gnuplot-Beispiele: http://gnuplot.sourceforge.net/demo_4.3/heatmaps.html). Wunschvorstellung der Dartellung: X-Achse --> Kalendertag Y-Achse --> Tages-Stunde/Minute Z-Achse (bzw. mehr der Farbwert) --> der jeweilige Messwert zum Timestamp Problem: Soweit ich die gnuplot-Doku verstanden habe, muss bei den Input-Daten die Dimension der Matrix in x- und y-Richtung (Bsp.1 obiger Link ) bzw. die Anzahl der Werte-Kombinationen (Bsp.2) genau mit der Dimension des Diagramms in x-/y-Richtung übereinstimmen, es dürfen keine Werte fehlen. Wenn nicht kommt ein Fehler (schon probiert). Und genau da habe ich ein Problem. Die Werte landen zwar ziemlich konstant im Minutentakt in einer Datenbank (Timestamp, Messwert). Es kommt aber vor, dass mal eine Minute fehlt, weil gerade ein Minutenumschlag im jeweiligen Messzyklus erfolgt oder über einen längeren Zeitraum Werte fehlen, weil es ein Problem bei der Aufzeichnung gab. Diese Lücken müßte man bei der Datenaufbereitung für das Wärmediagramm schliessen. Kennt jemand einen Weg mit gnuplot selbst oder muss ich wirklich ein entsprechendes Aufbereitungsscript schreiben? Grüße & Danke Uwe
Hallo Uwe, GNU-Plot kann das, soweit ich weiß, nicht selber lösen. Eigentlich solltest du an deiner Datenerfassung arbeiten um das Problem zu beheben bzw. die Daten vor dem Eintrag in die DB entsprechend aufarbeiten. Wenn das aber jetzt schon mal so ist, würde ich das mit einem kleinen Script erschlagen. Ein gleitendes Filter über die Werte oder die Zeitstempel auswerten und entsprechend ausrichten. Mit Perl oder PHP eigentlich kein Thema...
Muss es GNUPLOT sein? Darf es nicht auch (GNU)-Octave sein? Dann könntest du die Daten analysieren lassen und Einträge zu denen die z-Info fehlt entfernen, bevor du sie plottest. branadic
Uwe Berger schrieb: > MoinMoin, > > Und genau da habe ich ein Problem. Die Werte landen zwar ziemlich > konstant im Minutentakt in einer Datenbank (Timestamp, Messwert). Es > kommt aber vor, dass mal eine Minute fehlt, weil gerade ein > Minutenumschlag im jeweiligen Messzyklus erfolgt oder über einen > längeren Zeitraum Werte fehlen, weil es ein Problem bei der Aufzeichnung > gab. Ich würde dafür nicht gnuplot benutzen. In der Meteorologie gibts z.B. http://gmt.soest.hawaii.edu/ Dort kann man bei fehlenden Messwerten z.B. eine extra Farbe benutzen oder einfach interpolieren. Allerdings ist das Tool etwas gewöhnungsbedürftig... Gruß Andreas
MoinMoin, ich wollte mich zu dem Thema nochmal melden und meine Lösung vorstellen, falls jemand ähnliches sucht bzw. keine Ahnung hat, was eine "heat map" ist: * ich habe ein Tcl-Script geschrieben, welches das auszuwertende Intervall bestimmt, eine einstellbare "Tagesrasterung" vornimmt, über die jeweils eine Mittelwertbildung der Werte aus der DB erfolgt, die Werte für gnuplot aufbereitet und in einer Textdatei ablegt * wenn zu einem Abschnitt kein Wert gefunden wurde, wird er mit einem speziellen Wert gekennzeichnet, der später im Diagramm eine spezielle Farbe bekommt. Datenbeispiel: 1.Spalte: Datum, 2.Spalte: Tagesstunde (als Kommazahl wg. späterer Achsenbeschriftung), 3.Spalte: entspr. Mittelwert; 1000.00 Kennung für "nicht vorhanden"
1 | ... |
2 | 2011-02-22 18.75 1000.00 |
3 | 2011-02-22 18.83 1000.00 |
4 | 2011-02-22 18.92 22.02 |
5 | 2011-02-22 19.00 35.46 |
6 | 2011-02-22 19.08 16.82 |
7 | 2011-02-22 19.17 -5.89 |
8 | 2011-02-22 19.25 -6.25 |
9 | 2011-02-22 19.33 -6.31 |
10 | 2011-02-22 19.42 -6.30 |
11 | 2011-02-22 19.50 -6.45 |
12 | 2011-02-22 19.58 -6.52 |
13 | 2011-02-22 19.67 -6.66 |
14 | 2011-02-22 19.75 -6.71 |
15 | 2011-02-22 19.83 -6.86 |
16 | 2011-02-22 19.92 -6.84 |
17 | 2011-02-22 20.00 -6.83 |
18 | ... |
* diese Daten werden dann, zusammen mit ein paar Anweisungen in gnuplot geschmissen. Das gnuplot-Script für angehangenes Diagramm sieht ungefähr so aus (wird bei mir natürlich dynamisch generiert...):
1 | unset key |
2 | set terminal png font arial 8 size 1200, 400 |
3 | set view map |
4 | set output 'heatmap.png' |
5 | set title "Temperaturverlauf über Datum/Tageszeit" |
6 | |
7 | set xdata time |
8 | set timefmt "%Y-%m-%d" |
9 | set format x "%d.%m.\n%Y" |
10 | set xrange ["2011-03-01":"2012-09-27"] |
11 | set xlabel "Datum" |
12 | |
13 | set yrange [0:24] |
14 | set ytics 1 |
15 | set ylabel "Tagesstunde" |
16 | |
17 | set colorbox size 10, 300 |
18 | set cblabel "Temperatur" |
19 | set cbrange [-25.0:50.0] |
20 | |
21 | set palette defined (0 "blue",17 "#00ffff",33 "white",55 "yellow",\ |
22 | 70 "red",100 "#990000", 101 "grey") |
23 | |
24 | plot 'data.txt' using 1:2:3 with image |
* nicht vorhandene Werte werden in grau dargestellt (bei "set palette ..." das Wertepaar 101 "gey"... (RTFM ;-))) * oben angehangenes Diagramm wurde aus 173952 Wertetripel generiert, die Rasterung beträgt 5 Minuten Fazit: gnuplot ist auch für eine solche Darstellung ganz gut brauchbar... Grüße Uwe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.