Aus Linux-Magazin 07/2009

Perl-Skript lässt Google Diagramme zeichnen (Seite 3)

Die Zeilen 55 bis 62 halten die bis zu diesem Zeitpunkt höchsten x- und y-Werte fest und legen sie in den Hash-Einträgen »$max->{x}« und »$max->{y}« ab. Diese Werte dienen später in der For-Schleife ab Zeile 68 dazu, alle x/y-Werte auf den Bereich zwischen 0 und 100 zu normieren.

Zusätzlich spart die Variable »$margin« am rechten und linken Rand noch einen Bereich der Breite 2 aus, letztlich normiert »data-normalize« also x/y-Werte auf den Bereich zwischen 2 und 98. Der Grund hierfür ist später im Diagramm zu sehen: Es sieht einfach schöner aus, wenn die Kurven nicht ganz an die horizontalen und vertikalen Achsen heranreichen. Das Ergebnis schickt »print« in Zeile 70 nach Stdout, und die Ausgabe sieht so aus, wie es Abbildung 5 zeigt.

Abbildung 5: Die zwei Messreihen mit unterschiedlichen Zeitachsen rechnet das Skript »data-normalize« auf eine gemeinsame virtuelle Zeitachse um.

Abbildung 5: Die zwei Messreihen mit unterschiedlichen Zeitachsen rechnet das Skript »data-normalize« auf eine gemeinsame virtuelle Zeitachse um.

Auf der Suche nach einem passenden Diagrammformat findet sich auf [4] der Typ “lxy”, der für jede gezeichnete Linie je einen Satz x- und y-Koordinaten entgegennimmt. Er unterscheidet sich damit fundamental von anderen Formaten, die annehmen, dass Messpunkte für alle dargestellten Datensätze an den gleichen x-Werten vorliegen. Zeile 19 in Listing 2 legt deshalb »XY« für die Option »type« im Konstruktoraufruf für ein neues Objekt vom Typ Google::Chart fest.

Format XY

Listing 2 liest nun in Zeile 8 zunächst die Ausgabe des Skripts »data-normalize« ein und sortiert sie nach x- und y-Werten getrennt in eine Datenstruktur »$data« um. Am Ende der »while«-Schleife in Zeile 15 liegen demnach in »$data->{“0.5gb”}->{x}« alle normierten Zeitstempel für die Konfiguration mit 512 MByte, während in »$data->{“0.5gb”}->{y}« ein Array aller zugehörigen Batteriestände liegt. Damit ist es einfach, dem Parameter »data« des Google::Chart-Objekts in Zeile 21 eine Referenz auf einen Array von x/y-Datensätzen so zu übergeben, wie der Charttyp XY dies wünscht.

Professioneller Schnickschnack

Der Parameter »size« setzt die Ausmaße des Diagramms, 700 mal 400 Pixel ist ziemlich das Maximum, bei größeren Dimensionen schickt Google einen Bad Request zurück. Der Titel des Diagramms, den es am oberen Rand darstellt, setzt die Option »title« in Zeile 29.

Damit der Diagrammhintergrund nicht weiß bleibt, sondern einen professionell angehauchten Übergang von Weiß nach Olivgrün zeigt, setzt die Option »fill« in Zeile 33 ihn auf »LinearGradient«. Wie auf [4] unter der Colors-Rubrik nachzulesen, verlangt dieses Verfahren den Wert »c« für das Füllen des Chartbereichs und nimmt in »color1« und »color2« zwei hexkodierte RGB-Farben entgegen. Hat der jeweilige »offset« den Wert 0, ist die zugehörige Farbe am linken Diagrammrand pur und am rechten Rand ausgewaschen. Der Wert 1 hingegen bestimmt einen Farbübergang von rechts nach links. Die Werte in den Zeilen 36 bis 41 geben also an, dass der Diagrammhintergrund von links nach rechts von Weiß auf ein sattes Olivgrün umschwenkt. Ein Winkel von 45 Grad bestimmt, dass sich der Übergang diagonal von links unten nach rechts oben vollzieht.

Das Stützliniengitter im Diagramm zeichnet die Option »grid«, die den dargestellten Zeitraum von etwa 36 Stunden in x-Richtung in drei Teile à 33 von 100 Normpunkten teilt. In y-Richtung markieren waagerechte Gitterlinien jeweils einen Abstand von 20 Punkten. Die Beschriftung der Diagrammachsen bestimmt die Option »axis« in Zeile 50. Die x-Achse erhält die Stundenwerte von 1 bis 36 in gleichen Abständen zugeordnet, die y-Achse die Werte 0 bis 100 in 25er Schritten. Zu beachten ist, dass diese Beschriftungen völlig unabhängig von den eingezeichneten Datensätzen sind, die ja in beiden Richtungen zwischen 0 bis 100 normiert sind.

Die Linienfarben der beiden Datensätze setzt die Option »color« in Zeile 59 in der Reihenfolge der eingespeisten Daten. »E6E9FD« ist ein ganz leichtes Blau, während »4D89F9« ein satteres Himmelblau darstellt. Damit der Betrachter die beiden Linien auch den Datensätzen zuordnen kann, bestimmt »legend« in Zeile 61, dass am rechten Rand des Diagramms zusammen mit einem zur Linie passenden Farbquadrat der Name der zugehörigen Messreihe erscheint.

Luft lassen

Damit das Diagrammbild die Achsen nicht direkt an den Rand des Bildes knallt, bestimmt die Option »margin« in Zeile 63 jeweils einen Rand von 50 Pixeln in allen Richtungen. Die letzten beiden Parameter mit einem Wert von jeweils 100 legen den Abstand der Legende in x-Richtung vom rechten Bildrand und in y-Richtung vom automatisch gewählten Darstellungspunkt nach oben fest.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben