Datenkolonnen
Der Beispieldatensatz in Listing 1 soll dazu dienen, die Prinzipien von Ggplot2 zu demonstrieren. Die Daten liegen in Form einer CSV-Datei vor, einem einfachen, aber universellen Datenformat, das beinahe jede Applikation exportieren kann. Die Daten beschreiben ein Experiment, das die Leistung der Algorithmen »foo«
, »bar«
und »hyper«
misst, die auf Datensätze unterschiedlicher Größe (»Datenumfang«
) angewendet werden. Die Geschwindigkeit, wie viele Daten sie pro Zeit verarbeiten, gibt die Spalte »Durchsatz«
an. Zudem unterscheiden die Messdaten zwischen den drei Konfigurationen »A«
, »B«
und »C«
.
Listing 1
Beispieldatensatz
01 Algorithmus,Datenumfang,Durchsatz,Konfiguration 02 foo,32,6.67,A 03 foo,64,7.19,A 04 foo,128,7.60,A 05 foo,256,8.03,A 06 foo,512,8.21A 07 foo,32,6.79,B 08 foo,64,6.60,B 09 foo,128,7.45,B 10 [...] 11 foo,512,8.21,C 12 bar,32,4.00,A 13 bar,64,6.92,A 14 bar,128,11.17,A 15 [...] 16 bar,256,16.01,C 17 bar,512,19.97,C 18 hyper,32,6.62,A 19 hyper,64,8.40,A 20 [...]
Das Szenario ähnelt vielen Situationen, die im Alltag von Programmierern oder Administratoren auftreten. In der Praxis müssen sie die Daten zwar meist erst aus Logdateien oder anderen Quellen extrahieren, da dieser Schritt aber nichts mit der Visualisierung zu tun hat, kann er hier entfallen.
Daten sind in Ggplot2 durch Data Frames repräsentiert, einer R-Datenstruktur ähnlich den Listen oder Arrays, die aus anderen Programmiersprachen bekannt sind. Jeder Data Frame besteht aus einer beliebigen Anzahl von Zeilen und Spalten, von denen jede einen Namen tragen kann. Wie im Beispiel reicht es für Ggplot2 aus, wenn die Spalten benannt sind. Listing 2 zeigt, wie das R-Kommando »read.csv«
aus der CSV-Datei einen Data Frame erzeugt.
Listing 2
Data Frame erzeugen
01 dat <- read.csv("data.txt", header=T)
02 print(dat)
03 Algorithmus Datenumfang Durchsatz Konfiguration
04 1 foo 32 6.675104 A
05 2 foo 64 7.190872 A
06 3 foo 128 7.684894 A
07 4 foo 256 8.038377 A
08 [...]
Das Argument »header=T«
weist R an, die Beschriftungen der Spalten aus der ersten Zeile der Textdatei zu übernehmen. Der R-Zuweisungsoperator »<-«
speichert die Daten in der Variablen »dat«
. Mit dem abschließenden »print()«
-Befehl lässt sich prüfen, ob die Daten korrekt eingelesen wurden.
Der Einfachheit halber steht zunächst lediglich eine Teilmenge, der Algorithmus »foo«
, zur Debatte. GNU R stellt dazu das Subset-Kommando bereit, das einen verkleinerten Data Frame erzeugt:
dat.sub <- subset(dat, Algorithmus=="foo")
Zum Umwandeln der Rohdaten in eine Grafik dienen die R-Aufrufe in Listing 3. Das Resultat zeigt Abbildung 1.
Listing 3
Grafik erzeugen
01 g <- ggplot(data=dat.sub, 02 aes(x=Datenumfang, y=Durchsatz, 03 colour=Konfiguration)) + 04 geom_point() + geom_line() 05 print(g)
Daten und Ästhetik
Die Transformation erfolgt in zwei Schritten: Das »ggplot«
-Basisobjekt legt neben der Datenquelle, dem zuvor angelegten Data Frame »dat.sub«
, ein ästhetisches Mapping fest. Das Mapping beschreibt, welche Aspekte der Daten Ggplot2 auf welche Komponenten des resultierenden Graphen abbildet. Listing 3 bestimmt, dass Durchsatz (y-Achse) über Datenumfang (x-Achse) zu plotten ist. Eine weitere Komponente der Daten, die Messkonfiguration, ist mit »colour«
farbig kodiert, sprich: Pro Konfiguration verwendet Ggplot2 eine Farbe.
Die Zuordnungen des Basisobjekts beschreiben allerdings noch nicht, welches grafische Objekt für die Datenpunkte zur Verwendung kommt, die durch Datensatz und ästhetisches Mapping beschrieben sind. Grafische Objekte verwaltet Ggplot2 in Ebenen (Layers), die je ein solches Objekt enthalten.
Ein Plot kann aus mehreren übereinandergelegten Ebe-nen bestehen – Ggplot kümmert sich automatisch darum, dass die äußeren Parameter der Grafik, etwa Größe und Achsenbeschriftung, in allen Ebenen übereinstimmen. Das Erzeugen eines Ebenen-Objekts übernimmt eine Funktion nach dem Muster »geom_Typ«
, wobei Typ das verwendete grafische Objekt angibt.
Listing 3 verwendet zwei Ebenen mit einfachen grafischen Objekten: Punkten (»geom_point()«
) und Linien (»geom_line()«
). Ggplot2 addiert beide zum Basisobjekt hinzu. Dabei überträgt die Software die Einstellungen des Basisobjekts (Datenquelle und ästhetisches Mapping) in die Ebenen. Durch das Zusammenschalten des Basisobjekts mit den Ebenen-Objekten entsteht ein neues, kombiniertes R-Objekt, das sich mit dem generischen Print-Kommando ausgeben lässt. Das Resultat ist allerdings kein Text auf der Konsole, sondern eine Grafik am Bildschirm.
Natürlich kann man Plots auch permanent speichern. Das Kommando
ggsave("/tmp/graph.pdf", g)
schreibt den in »g«
enthaltenen Plot im PDF-Format in die angegebene Datei. Das gewünschte Dateiformat erkennt Ggplot2 automatisch an der Datei-Endung. Neben PDF stehen unter anderem PNG, JPEG, EPS und SVG zur Auswahl. Standardmäßig stellt die Software Abbildungen im Format 9,75 mal 4,6 Zoll bereit, was 24,75 mal 11,7 Zentimetern entspricht. Ändern lässt sich dies über die Parameter »height«
und »width«
. Rastergrafikformate wie JPG und BMP verwenden gewöhnlich eine Auflösung von 300 dpi, die über den »dpi«
-Parameter anpassbar ist.
Um ein rechteckiges PNG mit 5 Zoll Kantenlänge in hoher Auflösung zu zeichnen, ist daher
ggsave("plot.png", g, height=5, width=5, dpi=1200) der Befehl der Wahl. Selbstverständlich sollte man Vektorformate bevorzugen, um die bekannten Skalierungsprobleme, eckigen Kanten und hässlichen Artefakte bei der Weiterverwendung zu vermeiden.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 5 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





