Johannes Blog

Carpet-Plots mit Excel und gnuplot erstellen

Häufig benötige ich eine Möglichkeit, viele Daten, z.B. Messwerte eines Jahres, übersichtlich in einem Diagramm darzustellen. Meist geht es daraum zu erkennen ob es Unregelmäßigenkeiten oder Fehler gibt oder eben nicht.

Eine gute Möglichkeit dazu sind Carpet-Plots / Carpet-Diagramme / Teppichdiagramme / Rasterdiagramme. In dieser Darstellung werden z.B. die Zeit in x- und y-Richtung aufgetragen und der Messwert in z-Richtung (z.B. als Farbe).

Carpet Plot der Außentemperatur des TRY Augsburg

In dieser Darstellung ist die Außentemperatur für Augsburg im Jahresverlauf dargestellt (generiert aus dem Test Reference Year TRY für Augsburg). Auf der x-Achse sind die Tage beginnend beim 1.Januar aufgetragen. Auf der y-Achse sind die Stunden aufgetragen. Die eigentliche Tagestemperatur ist in der jeweiligen Farbinformation enthalten.

Deutlich zu erkennen sind die Sommerzeit, wo es generell wärmer ist, sowie dass es nachmittags/ abends tendenziell wärmer ist als morgens.

Ein ähnlicher Verlauf ergibt sich für die Globalstrahlung:

Carpet Plot der Globalstrahlung des TRY Augsburg

Bislang habe ich keine Software, speziell Freeware gefunden, die solche Plots darstellen kann. Es gibt eine Möglichkeit MatLAB solche Plots erstellen zu lassen, dies ist aber wohl recht aufwändig.

Literatur:

http://de.wikipedia.org/wiki/Rasterdiagramm

http://matlabber.blogspot.com/search/label/carpetplot

http://matlabber.blogspot.com/2007/11/carpet-plots-with-matlab.html

Daher habe ich mich entschlossen, selbst solche Plots zu erstellen. Da in meinem Fall die Daten fast ausschließlich in Excel vorliegen, habe ich dort angefangen.

Ausgangspunkt war zunächst jedoch gnuplot, insbesonder das Demo für Heatmaps. An Hand des Beispiels war mir schon einmal klar, in welche Form ich meine Messdaten (eine Spalte von Zeile 11 bis 8794) bringen muss:

set xrange [-0.5:4.5]
set yrange [-0.5:4.5]
set view map
splot '-' matrix with image
5 4 3 1 0
2 2 0 0 1
0 0 0 1 0
0 0 0 2 3
0 1 2 4 3
e
e

Es werden hier also nur die z-Werte in einer Matrix angegebenen. Für Excel bedeutet dies, dass ich jeweils einen Block von 24 Werten nehme und spaltenweise einfüge.
Da meine VBA-Kenntnisse überschaubar sind, habe ich einen gefundenen Codeschnipsel angepasst und verwendet. Deshalb werden in meinem Makro zunächst immer 24 Werte nebeneinander geschrieben und anschließend transponiert. Somit erhalte ich 24 Werte untereinander und viele viele nebeneinander (z.B. 366)

Bereich = Spalte & Zeile_Start & „:“ & Spalte & Zeile_Stopp
Set rngQuelle = ActiveSheet.Range(Bereich)
‚ Neues Sheet als Ziel
Sheets.Add.Name = „NEUES_ZIEL_1“
‚ Umbruch nach X=24 Spalten
Set rngZiel = Worksheets(„NEUES_ZIEL_1“).Columns(„A:X“)
For lngZelle = 1 To rngQuelle.Cells.Count
rngZiel.Cells(lngZelle).Value = rngQuelle.Cells(lngZelle).Value
Next

Danach folgt das Transponieren im neuen Sheet NEUES_ZIEL_1

Range(„A1:X366“).Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True

Anschließend wird die Matrix nach einer kleinen Fehlerkorrektur „-„-Werte durch „0“ ersetzen, sowie „,“ durch „.“ ersetzen in eine Datei geschrieben.

FullFileName = Application.GetSaveAsFilename(DATEINAMEN, „Text,*.txt“, 1, „Save As *.txt“)
If FullFileName <> „False“ Then
ActiveWorkbook.SaveAs Filename:=FullFileName, FileFormat:=xlText
End If

Im zweiten Teil des Makros werden die Befehle für gnuplot generiert und geschrieben. Hierzu werden zunächst Eingaben wie Diagrammtitel, maximaler z-Wert, Achsenbeschriftungen usw. vom Benutzer abegfragt. Dieses Plot-file wird ebenfalls gespeichert.

Im nächsten Schritt muss man lediglich noch diese Plotfile in gnuplot laden. Erkennt man jetzt, dass formale Fehler vorhanden sind, so lassen sich diese relativ schnell im .plt-File beheben. z.B. Achsenbeschriftung, Größe, Farbe, Formatierung.

Das Skript ist bisher noch relativ unausgereift und nur für (m)einen Anwendungsfall zugeschnitten. Daher sehe ich von einer Veröffentlichung des gesamten Makros noch ab. Wer Interesse daran hat, dem sende ich es gerne zu. Bitte Kommentar hinterlassen bzw. Email an mich (jh@Meine-Domain.de)

Share

RSS 2.0 . Comment . Trackback

5 Responses to “Carpet-Plots mit Excel und gnuplot erstellen”

  1. Peter M. Says:

    bin durch den Wiki-Artiekl hier drauf gestossen und auf das Programm gespannt.

    Gruß Peter

  2. admin Says:

    mittlererweile gibt es eine erste lauffähige Version:
    http://www.johannes-hopf.de/2009/02/carpet-plot-version-11-beta/

  3. rena Says:

    Interessante Idee, leider läuft das VBA bei mir nicht, habe aber keine Ahnung warum!?

  4. admin Says:

    Hallo rena!
    was geht denn bei dir nicht? Wie weit läuft das Skript? Wenn du mir etwas mehr Infos gibts, was nicht geht, kriegen wir das Skript schon zum laufen. Bei anderen gehts auch.

    Verwendest du diese Variante?
    http://www.johannes-hopf.de/2009/02/carpet-plot-version-11-beta/

    Gruß
    Johannes

  5. Mehdi Says:

    Dear Mr. Hopf,

    Thanks very much for preparation of this facility for carpet plotting.

    I followed all process based on your video, but when I prepared the plot file, nothing is shown with Notepad++portable.

    I would appreciate if you could guide me in this matter.

    Many thanks,
    Mehdi

Leave a Reply