3. Arten von base graphics Funktionen
High-Level functions
Erstellen komplexer
Grafiken, z.B. (hist)
Low-Level functions
Erstellung von Linien,
Punkte, Achsen etc.
oftmals on-top auf
High-Level Funktion
6. Don‘t get fooled by default looks: Mit R base graphics
kann man wunderschöne Grafiken produzieren.
Allerdings benötigt dies meist viel Code
!
par(mai=c(0.5,1,0.5,0.5),!
omi=c(0.5,0.5,0.5,0.5),!
family="Lato Light",las=1)!
frauen <- read.csv("daten/frauen.txt",header =F,sep=",")!
for(i in 1:111) !
colnames(frauen)[i]<-paste("x",i+1949,sep="") !
maenner<-read.csv("daten/maenner.txt",header =F,sep=",")!
for(i in 1:111) !
colnames(maenner)[i]<-paste("x",i+1949,sep="")!
rechts<-frauen$x2010!
links<-maenner$x2010!
farbe_rechts<-c(!
rep(rgb(210,210,210,maxColorValue=255),15),!
rep(rgb(144,157,172,maxColorValue=255),50),!
rep(rgb(225,152,105,maxColorValue=255),!
length(rechts)-65))!
farbe_links<-farbe_rechts!
barplot(rechts,axes=F,horiz=T,axis.lty=0,!
border=NA, col=farbe_rechts,xlim=c(-750,750))!
barplot(-links,axes=F,horiz=T,axis.lty=0,border=NA, !
col=farbe_links,xlim=c(-750,750),add=T)!
abline(v=0,lwd=28,col=par("bg"))!
for (i in seq(10,90,by=10)) text(0,i+i*0.2,i,cex=1.1) !
mtext(abs(seq(-600,600,by=200)),!
at=seq(-600,600,by=200), 1,line=-1,cex=0.80)!
rect(-1000,15+15*0.2,1000,66+66*0.2,xpd=T, !
col=rgb(210,210,210,90,maxColorValue=255),!
border=NA)!
mtext("erwerbsfähiges Alter",2,line=1.5,las=3,adj=0.38) !
mtext("Männer",3,line=-5,adj=0.25,cex=1.5,col="grey") !
mtext("Frauen",3,line=-5,adj=0.75,cex=1.5,col="grey") !
mtext("Altersaufb...",3,line=-1.5,adj=0,cex=1.75,!
family="Lato Black",outer=T) !
mtext("Angaben in...",3,line=-3.25,adj=0,cex=1.25,!
font=3,outer=T) !
mtext("Quelle: ww...",1,line=0,adj=1.0,cex=0.95,!
font=3,outer=T)!
Rahlf, T. (2014) Datendesign mit R, S. 222 ff.
12. Your turn! - Erstelle folgenden
Plot mit dem iris Datensatz
13. Einstellung graphischer Parameter
?par
# > 50 Parameter!
bg
cex
col!
las
lwd
pch
Hintergrundfarbe des Plots
Größe des Texts im Plot
Farbe der dargestellten Elemente
Stil der Achsenbeschriftung
Breite von gezeichneten Linien
Art des dargestellte Symbols
14. Graphical parameters
Über die Funktion par können graphische
Parameter festgelegt werden. Dies kann
entweder
a) direkt über die Funktion par vor dem Aufruf
einer High-Level Funktion, wie z.B plot,
b) oder über das Drei-Punkte-Argument ...
innerhalb der Funktion geschehen.
Üblicher ist letzteres, denn dies verändert nur
den aktuellen Plot. Erstgenannte verändert
alle nachfolgenden Plots.
15. Die Argumente von par können direkt in die
Funktion plot eingegeben werden
(Datensatz Burt aus Paket car)
cex!
las!
col!
pch!
plot(IQbio, IQfoster, col="darkgrey",!
las=1, pch=16, cex=3)!
16. Farben – Argument col !
Farben können u.a. als Zahl zwischen 1
und 8
oder als Text definiert werden
"red", "blue", "green", "grey”
... später mehr !
23. par vor plot aufrufen
Anstatt die Argumente für par innerhalb von
plot anzugeben können diese auch vor dem
Aufruf von plot angegeben werden
!par(cex=2)!
!plot(IQbio, Iqfoster)!
!
Allerdings betrifft die Einstellung danach alle
weiteren Plots. Für manche Argumente, wie bg
(background), funktioniert es jedoch nur so.!
24. Deshalb sollte man nach Erstellung der Grafik
die Ursprungseinstellung von par wieder
herstellen
!
par gibt eine Liste mit den
Einstellungen vor der
Änderung zurück
op <- par(cex=2)!
plot(IQbio, Iqfoster)!
par(op)!
Zurücksetzen auf alte
Einstellungen (in op
gespeichert)
25. par Aufrufe im Vergleich
!
a)
!
!
!
b)
!
! !op <- par(cex=2)!
! !plot(IQbio, Iqfoster)!
! !par(op)!
! !plot(IQbio, Iqfoster, cex=2)!
... - Argumente
werden an die Funktion
par weitergeleitet
30. Your turn! - Erstelle einen Barplot der anzeigt, wieviel
Prozent der Personen pro Jahrgang abschalten
(d.ngo Datensatz aus dem ryouready Paket)
31. Plot – Eine generische Funktion
Bisher haben wir ein Streudiagramm mit
plot erzeugt. Es existiert jedoch nicht
nur eine, sondern sehr viele Funktionen
mit dem Namen plot.
Welche plot Funktion gemeint ist hängt
davon ab, was für ein Objekt
(Dataframes, Faktoren, Regressionen)
geplottet werden soll.
library(car)!
attach(Burt)!
36. m <- lm(IQbio ~ IQfoster)!
plot(m)
# linear model!
Regress
ion
37. Plot – Eine generische Funktion
Wenn man die Hilfe zu plot aufruft steht hier
Generic function for plotting of R objects.
Wenn ein Streudiagramm erstellt werden soll,
erkennt R, dass x und y numerisch sind und nutzt
deshalb die Funktion plot.default. Hier stehen in
der Hilfe deutlich mehr Argumente als in plot. !
Zum plotten einer Regression nutzt R die Funktion
plot.lm.
Als Nutzer merkt man dies nicht, wenn man einfach
plot eingibt. Wenn man jedoch die Argumente für
plot sucht, muss man bei der jeweiligen plotFunktion nachschauen.!
39. Legenden können über die Funktion
legend hinzugefügt werden
Es können vier
Typen von
Legende erzeugt
werden:
• Boxen
• Linien
• Symbole
• Linien + Symbole
!
46. Legenden Argumente in Grafik Funktionen
Einige Grafikfunktionen, z.B. barplot, besitzen
Argumente um Legenden automatisch zu generieren
m <- matrix(1:4, 2)!
barplot(m, col = 2:3,!
legend.text = c("A","B")) !
Unschöne
Platzierung!
47. In dieser Variante wird die Legende ebenfalls
durch die Funktion legend erzeugt. Die Funktion
wird nur hinter den Kulissen durch barplot
automatisch aufgerufen.
Um die Legende anzupassen, können weitere
Argumente an legend über das Argument
args.legend als Liste übergeben werden.
barplot(m, col = 2:3,!
legend.text = c("A", "B"), !
args.legend = !
list(x="topleft”,bty="n"))!
Platzierung
oben links!
Kein Rahmen
um Legende!
50. Grafik als Datei speichern
R kann unterschiedliche Output Formate
erzeugen. Hierzu stehen u.a. folgende
Funktionen zur Verfügung
## Bitmap Format!
jpeg() ! ! ! ! !#
bmp() ! ! ! ! !#
png() ! ! ! ! !#
!
## Vektorformat!
pdf() ! ! ! ! !#
cairo_pdf
!#
!
öffnet jpeg device!
öffnet bmp device!
öffnet png device!
pdf device öffnen!
Alternative zu pdf()!
51. Grafikdatei erstellen
Vorgehen für alle Dateitypen:
1. Grafik Device (Datei) öffnen
2. Grafikcode (eine / mehrere Zeilen) ausführen
3. Device (Datei) schließen
pdf("mein_plot.pdf“) !# pdf device öffnen!
!plot(1:10) ! !
# Grafikbefehl(e)!
dev.off()! ! ! ! ! !# device schließen!
!
!
52. Plot in PDF
●
●
2 4 6 8
1:10
●
●
●
●
●
●
●
●
2
4
6
8
10
Index
Breite in Inch
Höhe in Inch
pdf("mein_plot.pdf", width=5, height=3)!
par(bg="grey95") !
plot(1:10, col="blue", pch=16, ! !!
! ! !main="Plot in PDF")!
dev.off()
53. Bitmap-Formate
Bei Bitmap-Formaten wird die Größe (width, height)
des Plots in Punkten (Pixel) angegeben. Die Voreinstellung sind 480 Pixel.
Weiterhin gibt es ein Argument res, das die
Auflösung (Feinheit des Plots), d.h. die Anzahl an
Pixeln pro Inch (ppi, default sind 72), angibt.
png("plot.png", width=480, height=480, res=72)!
!par(bg="grey95") !
!plot(1:10)!
dev.off()!
54. Bitmap Formate und Auflösung
Die Standardeinstellung für z.B. png ist 72 Pixel
pro Inch (ppi). Dies ist für Web-Grafiken der
Standard. Diese Qualität ist jedoch zu gering
für Publikationen. Ziel: 300ppi.
72ppi
300ppi
55. Die Auflösung kann mit dem Argument res
verändert werden. Setzen wir diese zunächst auf
2 * 72ppi = 144 ppi
Folge: Der Plot ist immer noch 480 Pixel breit. Bei
doppelter Auflösung bedeutet dies effektiv jedoch
nur noch die halbe Breite
56. Um das gleiche Ergebnis wie zuvor nur mit doppelter
Auflösung zu erhalten, muss die Größe des Plots
(Anzahl der Pixel) ebenfalls um den Faktor 2
vergrößert werden.
Vorher: Einfache Auflösung
und einfache Größe
png("72ppi.png", !
width = 480, height = 480, res = 72)!
plot(1:10)!
dev.off()!
Jetzt: Doppelte Auflösung
und doppelte Größe
png("144ppi.png", !
width = 480*2, height = 480*2, res = 72*2)!
plot(1:10)!
dev.off()!
57. Typische Fehler
Achtung: Manchmal vergisst man offene
devices wieder zu schließen
dev.list() ! ! !# welche devices sind !
! ! ! ! ! ! !# noch offen?!
!
graphics.off()! !# alle devices schließen!
!
!
61. Verschiedene Plot Bereiche
plot-Bereich: eigentlicher Inhalt des Plots (Punkte,
Linien, Histogramm etc.)
figure-Bereich: Achsen und zugehörige Labels. Breite
wird als Vielfaches einer Zeilenhöhe im Uhrzeigersinn
angegeben (unten, links, oben, rechts). Voreinstellung:
! ! !mar=c(5.1, 4.1, 4.1, 2.1)!
device-Bereich: Umgrenzt einen oder mehrere figure
Bereiche. Wird meist als zusätzlicher Rahmen genutzt.
Voreinstellung:
oma=c(5.1, 4.1, 4.1, 2.1)!
Siehe auch: Clarkson, 2010, http://www.stat.tamu.edu/~jkim/Rfigurelayout.pdf
63. Funktionen zu den Bereichen
box(which="plot") !# Rahmen um Plot Bereich!
box(which="figure") # ... um Figure Bereich!
box(which="outer")
# ... um Device Bereich
!!
!
Text im Figure oder Device Bereich
!
mtext("figure links", side=1, !
! ! line= 2, adj=0)!
mtext("device rechts", side=1, !
line= 2, adj=1, outer=TRUE)!
Siehe auch: Clarkson, 2010, http://www.stat.tamu.edu/~jkim/Rfigurelayout.pdf
65. Your turn! – Verändere den irisDaten Plot folgendermaßen
66. Anordnen von Plots mit mfrow!
par kennt das Argument mfrow. Dies gibt die
horizontale und vertikal Anzahl an gleich großen
figure Bereichen an
Layout mit
1 Zeile und
2 Spalten!
!
par(mfrow=c(1,2), oma=c(1,1,1,1))!
plot(rnorm(10), rnorm(10))!
hist(rnorm(100))!
68. Your turn! – Erweitere den irisDaten Plot folgendermaßen
69. Anordnen von Plots mit layout!
layout erlaubt komplexe Anordnungen. Figure
Bereiche können sich über mehrere Zeilen oder
Spalten erstrecken. Auch kann die Breite und
Höhe jeweils einzeln bestimmt werden.
5 separat
bedruckbare
Figure
Bereiche!
Figure
Bereich 1
über 3
Spalten!
!
Figure
Bereich 5
über 2
Zeilen!
70. Definition des Layouts
Die Definition des Layouts geschieht mit Hilfe einer
Matrix
m <- matrix(1:4), ncol=2, by=T)!
m!
[,1] [,2]!
[1,]
1
2!
[2,]
3
4!
Das Erstellen und Aktivieren eines Layouts erfolgt
über die Funktion layout!
layout(m)!
71. Das Layout ist nach dem Erzeugen bereits aktiv. Es
wird in der Reihenfolge der Zahlen in der Matrix
gefüllt
plot(1:10)!
hist(rnorm(100))!
plot(1:10, col=2)!
plot(1:10, col=4)!
Beim Aufruf einer High-Level Funktion wird jeweils
ein neuer Plot-Bereich gefüllt
72. Visualisierung des Layouts
Zur leichteren Erstellung kann eine Layout
gespeichert und mittels layout.show
visualisiert werden
m <- matrix(1:4), ncol=2, by=T)!
l <- layout(m)!
!
layout.show(l)!
73. Um einen Figure Bereich über mehrere Zeilen
oder Spalten zu erstrecken, bekommen Felder
in der Layout-Matrix dieselbe Zahl zugeteilt.
Felder mit der Zahl 0 bleiben leer und erhalten
keinen Figure Bereich.
m <- matrix(c(1,1,1,!
2,2,0,!
2,2,3), !
ncol=3, !
byrow=T)!
m!
[,1] [,2] [,3]!
[1,]
1
1
1!
[2,]
2
2
0!
[3,]
2
2
3!
74. Über die layout Argumente widths und
heights kann das Höhen-Verhältnis der Zeilen
und Breiten-Verhältnis der Spalten zueinander
bestimmt werden.
1
1
:
3
:
3
m <- matrix(1:4, !
ncol=2, !
by=T)!
l <- layout(m, !
widths=c(1,2),
heights=c(1,3))!
!
layout.show(l)!
78. Low-Level Funktionen
Eine High-Level Funktion wie plot greift auf viele
Low-Level Funktionen zurück und baut aus diesen
die Grafik zusammen.
Dabei geschieht u.a. Folgendes:
• Ein Plot-Bereich mit den Einstellungen für die
Ränder (mar, oma) wird angelegt
• Die Inhalte (z.B. Punkte werden gedruckt)
• Die Achsen und die Labels werden hinzugefügt
79. Nutzung von Low-Level Funktionen
Low-Level Funktionen werden auf zwei Weisen
verwendet:
1. Nachdem eine High-Level Funktion genutzt
wurde. Z.B. um noch weitere Punkte oder
Linien zum Plot hinzuzufügen
2. Erstellung einer Grafik von Grund auf (engl.
from sratch)
80. Einige Low-Level Grafik-Funktionen
points!
Punkte erzeugen
lines!
Linien erzeugen
rect!
Rechtecke erzeugen
polygon!
Polygon erzeugen
abline!
Einfache vert. und horiz. Linien
arrows!
Pfeil erzeugen
text!
Text erzeugen
mtext!
Text in den Rändern erzeugen
title!
Überschrift erzeugen
axis!
Achsen erstellen
grid!
Raster hinzufügen
92. Farben in R
Farben können in R auf unterschiedliche
Art spezifiziert werden
Als Name: "red", "blue”!
!
Als Zahl:
!
Als Hexadezimal-Code: “#12FE99"!
!
93. Als Zahl
Wenn man eine Zahl eingibt wird die
Standardpalette genutzt
!
palette()!
[1] "black"
[4] "blue"
[7] "yellow"
"red"
"cyan"
"gray" !
"green3" !
"magenta"!
Die Zahl 0 heißt keine Farbe, d.h. weiß,
wenn der Hintergrund der Grafik weiß ist.
99. RGB Modell
CC: By SharkD on http://en.wikipedia.org/wiki/File:AdditiveColor.svg
rgb(1,1,1)!
Funktion rgb setzt Farben aus
Rot-Grün-Blau Anteilen
zusammen
Anteil kann jeweils von 0 bis 1
reichen
Die Funktion gibt einen String
zurück
rgb(.4, .2, .8)!
[1] "#6633CC"!
rgb(0,1,0)! rgb(0,1,1)!
100. RGB Modell
rgb(255,255,255, max=255)!
CC: By SharkD on http://en.wikipedia.org/wiki/File:AdditiveColor.svg
Häufig werden die Anteile
auch mit Werten zwischen 0
und 255 genutzt.
rgb(102, 51, 204, max=255)!
[1] "#6633CC"!
!
rgb(0,255,0,max=255)!
101. Alpha Parameter
Alpha meint den Grad an Transparenz einer
Farbe. Von 0=undurchlässig, 1=völlig durchlässig.
rgb(1,0,0)!
rgb(1,0,0,.5)!
rgb(1,0,0,.9)!
Transparenz führt, dass
man overplotting
sinnvoll wird
103. RGB Modell in Hexadezimal-Notation
Hex
Dezimal
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
A
10
B
11
C
12
D
13
E
14
F
15
rgb(0,255,0, max=255)!
[1] "#00FF00"!
Dezimalsystem mit Basis 10
255 = 2 ⋅101 + 5⋅101 + 5⋅10 0
Hexa-Dezimalsystem mit Basis 16
1
255 = 15⋅16 +15⋅16
F
0
F
Merksatz: 0=00 und 255=FF, alles
andere liegt dazwischen
104. RGB Modell in Hexadezimal-Notation
Hex
Dezimal
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
A
10
B
11
C
12
D
13
E
14
F
15
Hex-Werte beginnen mit einer
Raute:
"#00FF00"!
An der viertel Position kann auch
hier Alpha angegeben werden
"#00FF0010"!
Alpha