R base
graphics
Mark Heckmann
University of Bremen, Germany
www.markheckmann.de
Version Januar, 2014
© CC BY-NC 2.0 DE
Zwei Grafiksysteme
(base) graphics
•  Älteres System
•  Sehr schnell
•  Sehr viele
vereinzelte
Funktionen

grid graphics
l...
Arten von base graphics Funktionen
High-Level functions
Erstellen komplexer
Grafiken, z.B. (hist)

Low-Level functions
Ers...
High-Level
Funktionen
High-Level Grafik-Funktionen
plot!

qqnorm!

hist!

boxplot!

barplot!
Don‘t get fooled by default looks: Mit R base graphics
kann man wunderschöne Grafiken produzieren.
Allerdings benötigt die...
Histogramm mit hist!

x <- rnorm(1000)!
hist(x)!
?hist - Argumente von hist!
hist(x, breaks = "Sturges",!
!freq = NULL, probability = !freq,!
!include.lowest = TRUE, right...
main!

col!
ylab!

ylim!

border!

xlim!

breaks!

xlab!

hist(x, breaks=25, col="grey", main="Histogramm", !
xlab="Werte ...
Your turn! - Erstelle folgendes Histogramm
mit zufälligen Werten mit dem Datensatz
Streudiagramm mit plot!
main!

ylab!

type!

ylim!

xlim!

xlab!
plot(x=IQbio, y=IQfoster, type="p",!
xlab="IQ of twin rai...
Your turn! - Erstelle folgenden
Plot mit dem iris Datensatz
Einstellung graphischer Parameter
?par

# > 50 Parameter!

bg
cex
col!
las
lwd
pch

Hintergrundfarbe des Plots
Größe des T...
Graphical parameters
Über die Funktion par können graphische
Parameter festgelegt werden. Dies kann
entweder
a)  direkt üb...
Die Argumente von par können direkt in die
Funktion plot eingegeben werden
(Datensatz Burt aus Paket car)
cex!
las!

col!
...
Farben – Argument col !
Farben können u.a. als Zahl zwischen 1
und 8

oder als Text definiert werden
"red", "blue", "green...
Vektorisierte Argumente
plot(IQbio, IQfoster, col=class,!
las=1, pch=16, cex=4)!
Your turn! – Verändere den
letzten Plot folgendermaßen
Argument pch – point character
Kann ein Vektor mit Zahlen zwischen 1
und 20 sein

oder mit einem Zeichen !!
! ! ! ! ! ! !p...
Weitere vektorisierte Argumente
cnum <- as.numeric(class)
# umwandeln!
plot(IQbio, IQfoster, col=cnum,!
las=1, pch=cnum, c...
Your turn!
Erstelle folgenden Plot
Your turn!
Erstelle folgenden Plot
par vor plot aufrufen
Anstatt die Argumente für par innerhalb von
plot anzugeben können diese auch vor dem
Aufruf von plot...
Deshalb sollte man nach Erstellung der Grafik
die Ursprungseinstellung von par wieder
herstellen

!

par gibt eine Liste m...
par Aufrufe im Vergleich
!
a)
!
!
!
b)
!

! !op <- par(cex=2)!
! !plot(IQbio, Iqfoster)!
! !par(op)!
! !plot(IQbio, Iqfost...
Balkendiagramm mit barplot!

names.arg!

v <- c(1, 3, 2)!
barplot(v, names.arg = c("A", "B", "C"))!
Mehrdimensionale Balkendiagramme!
beside=FALSE!

beside=TRUE!

m <- matrix(c(1, 3, 2, !
2, 2, 4), ncol=3, by=T)!
barplot(m...
Balkendiagramme nutzen aggregierte Daten
(Anzahl pro Kategorie). Die Datenstruktur kann z.B.
mit Hilfe von table erzeugt w...
tbl <- table(vs, gear)!
barplot(tbl, names=cats)!
!
tbl!
3 4 5!
0 12 2 4!
1 3 10 1!

prop <- prop.table(tbl, 2)!
barplot(p...
Your turn! - Erstelle einen Barplot der anzeigt, wieviel
Prozent der Personen pro Jahrgang abschalten
(d.ngo Datensatz aus...
Plot – Eine generische Funktion
Bisher haben wir ein Streudiagramm mit
plot erzeugt. Es existiert jedoch nicht
nur eine, s...
plot(IQbio, IQfoster)

# numerisch!
Streudia

gramm
plot(Burt)

# dataframe!
Paarwe
ise
Streudia
gramm

e
plot(class, IQbio)

# factor, num.!
Boxplot
plot(class)

# factor!
Balkend

iagram
m
m <- lm(IQbio ~ IQfoster)!
plot(m)
# linear model!
Regress
ion
Plot – Eine generische Funktion
Wenn man die Hilfe zu plot aufruft steht hier
Generic function for plotting of R objects.
...
Legenden
Legenden können über die Funktion
legend hinzugefügt werden
Es können vier
Typen von
Legende erzeugt
werden:
•  Boxen
•  L...
title!

fill!

legend(x=1, y=10, !
legend=c("Eins","Zwei", !
legend!
"Drei","Vier"), !
fill=1:4, !
title="Boxen")!
ncol=2!...
legend(x=1, y=10, !
legend=c("Eins","Zwei", !
"Drei","Vier"), !
lwd=1, !
title=“Linien")!
lwd:line
width!

lwd=4!
seg.len=...
legend(1, 10, !
! ! c("Eins", "Zwei", !
"Drei", "Vier"), !
text.col!
pch=1:4, col=1:4,!
text.col=1:4,!
title="Symbole")!

...
title.col!
bg!
y.intersep!

box.lwd!
box.col!

legend(1, 10, !
LETTERS[1:3], !
fill=1:4, !
title.col="blue",!
title="Boxen...
Positionieren der Legende
Argumente
•  x!
•  Y !
•  xjust !
•  yjust!

1!
yjust!
0!
0!

xjust!

1!
Über Schlüsselwörter positionieren
Legenden Argumente in Grafik Funktionen
Einige Grafikfunktionen, z.B. barplot, besitzen
Argumente um Legenden automatisch ...
In dieser Variante wird die Legende ebenfalls
durch die Funktion legend erzeugt. Die Funktion
wird nur hinter den Kulissen...
Füge zum vorherigen Plot eine
Legende hinzu
Plot in Datei
speichern
Grafik als Datei speichern
R kann unterschiedliche Output Formate
erzeugen. Hierzu stehen u.a. folgende
Funktionen zur Ver...
Grafikdatei erstellen
Vorgehen für alle Dateitypen:
1.  Grafik Device (Datei) öffnen
2.  Grafikcode (eine / mehrere Zeilen...
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",...
Bitmap-Formate
Bei Bitmap-Formaten wird die Größe (width, height)
des Plots in Punkten (Pixel) angegeben. Die Voreinstellu...
Bitmap Formate und Auflösung
Die Standardeinstellung für z.B. png ist 72 Pixel
pro Inch (ppi). Dies ist für Web-Grafiken d...
Die Auflösung kann mit dem Argument res
verändert werden. Setzen wir diese zunächst auf
2 * 72ppi = 144 ppi

Folge: Der Pl...
Um das gleiche Ergebnis wie zuvor nur mit doppelter
Auflösung zu erhalten, muss die Größe des Plots
(Anzahl der Pixel) ebe...
Typische Fehler
Achtung: Manchmal vergisst man offene
devices wieder zu schließen
dev.list() ! ! !# welche devices sind !
...
Erstelle folgende png-Grafik mit
einer Auflösung von 300 ppi
Plot
Layout
Verschiedene Plot Bereiche

Siehe auch: Clarkson, 2010, http://www.stat.tamu.edu/~jkim/Rfigurelayout.pdf
Verschiedene Plot Bereiche
plot-Bereich: eigentlicher Inhalt des Plots (Punkte,
Linien, Histogramm etc.)
figure-Bereich: A...
Verschiedene Plot Bereiche

mar[1] = 5!
oma[1] = 3!
Siehe auch: Clarkson, 2010, chr
Funktionen zu den Bereichen
box(which="plot") !# Rahmen um Plot Bereich!
box(which="figure") # ... um Figure Bereich!
box(...
adj=1!
adj=0!

adj=1!
Your turn! – Verändere den irisDaten Plot folgendermaßen
Anordnen von Plots mit mfrow!
par kennt das Argument mfrow. Dies gibt die
horizontale und vertikal Anzahl an gleich großen...
mfrow=c(1,2)
Your turn! – Erweitere den irisDaten Plot folgendermaßen
Anordnen von Plots mit layout!
layout erlaubt komplexe Anordnungen. Figure
Bereiche können sich über mehrere Zeilen oder
S...
Definition des Layouts
Die Definition des Layouts geschieht mit Hilfe einer
Matrix
m <- matrix(1:4), ncol=2, by=T)!
m!
[,1...
Das Layout ist nach dem Erzeugen bereits aktiv. Es
wird in der Reihenfolge der Zahlen in der Matrix
gefüllt

plot(1:10)!
h...
Visualisierung des Layouts
Zur leichteren Erstellung kann eine Layout
gespeichert und mittels layout.show
visualisiert wer...
Um einen Figure Bereich über mehrere Zeilen
oder Spalten zu erstrecken, bekommen Felder
in der Layout-Matrix dieselbe Zahl...
Über die layout Argumente widths und
heights kann das Höhen-Verhältnis der Zeilen
und Breiten-Verhältnis der Spalten zuein...
x <- rnorm(1000)!
y <- rnorm(1000)!
!
# Layout!
par(oma=c(0,0,1,3))!
m <- matrix(c(1,2), ncol=1)!
layout(m, height=c(1,5))...
Your turn! – Erzeuge folgenden
Plot mit dem iris-Datensatz
Low-Level
Funktionen
Low-Level Funktionen
Eine High-Level Funktion wie plot greift auf viele
Low-Level Funktionen zurück und baut aus diesen
di...
Nutzung von Low-Level Funktionen
Low-Level Funktionen werden auf zwei Weisen
verwendet:
1.  Nachdem eine High-Level Funkti...
Einige Low-Level Grafik-Funktionen
points!

Punkte erzeugen

lines!

Linien erzeugen

rect!

Rechtecke erzeugen

polygon!
...
# Plot aufsetzen!
library(car)!
attach(Burt)!
plot(IQbio, IQfoster)!

# Raster hinzufügen!
grid(lty="solid")!
!
!
# Horiz....
# Punkte oben rechts in!
# rot neu plotten!
i <- IQbio > 100 & !
IQfoster > 100!
points(IQbio[i], IQfoster[i], !
col = "re...
# Regressionsgrade!
m <- lm(IQfoster ~ IQbio, !
data = Burt)!
abline(m, col = "grey")!
!

# Text hinzufügen!
text(120, 120...
Your turn! – Erzeuge
folgenden Plot
Leere Plots erzeugen
# Leerer plot mit Limits !
# von Hand!
Keine Daten

plot(NULL, !
xlim = c(70, 130), !
ylim = c(70, 13...
Text
# Leerer plot mit korrekten!
# Limits!

plot(IQbio, IQfoster, !
type = "n")!
!
„n“ unterdrückt
die Punkte

# Punkte hinzuf...
# Leerer plot mit korrekten!
# Limits!

i <- which(IQbio > 130)!
x <- IQbio[i]!
y <- IQfoster[i]!
points(x, y, col = "red"...
Farben in R
Inspired by
http://research.stowers-institute.org/efg/Report/UsingColorInR.pdf
In R können verschiedene Elemente des
Plots Farben annehmen
• 
• 
• 
• 
• 
• 
• 

Punkte
Linien
Achsen
Legenden
Text
Hinte...
Überschrift
Legende

Achse

Punkte

Tick
Hintergrund
Tick-Label

Achsen Label
Farben in R
Farben können in R auf unterschiedliche
Art spezifiziert werden
Als Name: "red", "blue”!
!
Als Zahl:
!
Als Hex...
Als Zahl
Wenn man eine Zahl eingibt wird die
Standardpalette genutzt

!

palette()!
[1] "black"
[4] "blue"
[7] "yellow"

"...
Als Zahl
Größere Zahlen führen zu recycleten
Farben

Z.B. plot(1:50, pch=16, col=1:50)!
plot(1:8, pch=16,!
plot(1:24, pch=16,!
cex=4, col=1:8)!
cex=4, col=1:24)!
Farben als Namen
colors()!
[1] "white"
[4] "antiquewhite1"
[7] "antiquewhite4"
[10] "aquamarine2"

"aliceblue"
"antiquewhi...
Erstelle folgenden Plot
Grautöne
grey(0)!
[1] "#000000"!
!
grey(.5)!
[1] "#808080"!
!
grey(1)!
[1] "#FFFFFF"!
!

"grey0"!
!
!
"grey50"!
!
!
"grey1...
RGB Modell
CC: By SharkD on http://en.wikipedia.org/wiki/File:AdditiveColor.svg

rgb(1,1,1)!
Funktion rgb setzt Farben aus...
RGB Modell
rgb(255,255,255, max=255)!
CC: By SharkD on http://en.wikipedia.org/wiki/File:AdditiveColor.svg

Häufig werden ...
Alpha Parameter
Alpha meint den Grad an Transparenz einer
Farbe. Von 0=undurchlässig, 1=völlig durchlässig.

rgb(1,0,0)!
r...
Erstelle folgenden Plot mit 10000
zufälligen Werten ~N(0,1)
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
...
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
...
R base graphics
Nächste SlideShare
Wird geladen in …5
×

R base graphics

2.085 Aufrufe

Veröffentlicht am

Slides from my R courses

Veröffentlicht in: Bildung
0 Kommentare
2 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.085
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
38
Kommentare
0
Gefällt mir
2
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

R base graphics

  1. 1. R base graphics Mark Heckmann University of Bremen, Germany www.markheckmann.de Version Januar, 2014 © CC BY-NC 2.0 DE
  2. 2. Zwei Grafiksysteme (base) graphics •  Älteres System •  Sehr schnell •  Sehr viele vereinzelte Funktionen grid graphics lattice ggplot2
  3. 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
  4. 4. High-Level Funktionen
  5. 5. High-Level Grafik-Funktionen plot! qqnorm! hist! boxplot! barplot!
  6. 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.
  7. 7. Histogramm mit hist! x <- rnorm(1000)! hist(x)!
  8. 8. ?hist - Argumente von hist! hist(x, breaks = "Sturges",! !freq = NULL, probability = !freq,! !include.lowest = TRUE, right = TRUE,! !density = NULL, angle = 45, ! ! !col = NULL, border = NULL! ! !main = paste("Histogram of" , xname),! !xlim = range(breaks), ylim = NULL,! !xlab = xname, ylab,! !axes = TRUE, plot = TRUE, ! Noch mehr ! !labels = FALSE,! Argumente. Mehr dazu !nclass = NULL, ! später ... ! !warn.unused = TRUE, ...)!
  9. 9. main! col! ylab! ylim! border! xlim! breaks! xlab! hist(x, breaks=25, col="grey", main="Histogramm", ! xlab="Werte von x", ylab="Häufigkeit",! ylim=c(0, 100), xlim=c(-5, 5),! border="white")!
  10. 10. Your turn! - Erstelle folgendes Histogramm mit zufälligen Werten mit dem Datensatz
  11. 11. Streudiagramm mit plot! main! ylab! type! ylim! xlim! xlab! plot(x=IQbio, y=IQfoster, type="p",! xlab="IQ of twin raised by biological parents",! ylab="IQ of twin raised by foster parents",! main="IQ - Zwilling im Vergleich",! xlim=c(60, 140), ylim=c(60, 140))!
  12. 12. Your turn! - Erstelle folgenden Plot mit dem iris Datensatz
  13. 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. 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. 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. 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 !
  17. 17. Vektorisierte Argumente plot(IQbio, IQfoster, col=class,! las=1, pch=16, cex=4)!
  18. 18. Your turn! – Verändere den letzten Plot folgendermaßen
  19. 19. Argument pch – point character Kann ein Vektor mit Zahlen zwischen 1 und 20 sein oder mit einem Zeichen !! ! ! ! ! ! ! !pch="#"!
  20. 20. Weitere vektorisierte Argumente cnum <- as.numeric(class) # umwandeln! plot(IQbio, IQfoster, col=cnum,! las=1, pch=cnum, cex=cnum)!
  21. 21. Your turn! Erstelle folgenden Plot
  22. 22. Your turn! Erstelle folgenden Plot
  23. 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. 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. 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
  26. 26. Balkendiagramm mit barplot! names.arg! v <- c(1, 3, 2)! barplot(v, names.arg = c("A", "B", "C"))!
  27. 27. Mehrdimensionale Balkendiagramme! beside=FALSE! beside=TRUE! m <- matrix(c(1, 3, 2, ! 2, 2, 4), ncol=3, by=T)! barplot(m, beside=FALSE, names.arg = ! c("Col 1", "Col 2", "Col 3"))!
  28. 28. Balkendiagramme nutzen aggregierte Daten (Anzahl pro Kategorie). Die Datenstruktur kann z.B. mit Hilfe von table erzeugt werden attach(mtcars)! cats <- c("3 Gänge", "4 Gänge", "5 Gänge”)! tbl <- table(gear)! barplot(tbl, names=cats)! ! tbl! 3 4 5 ! 15 12 5 !
  29. 29. tbl <- table(vs, gear)! barplot(tbl, names=cats)! ! tbl! 3 4 5! 0 12 2 4! 1 3 10 1! prop <- prop.table(tbl, 2)! barplot(prop, names=cats)! ! prop! 3 4 5! 0 0.80 0.17 0.80! 1 0.20 0.83 0.20! !
  30. 30. Your turn! - Erstelle einen Barplot der anzeigt, wieviel Prozent der Personen pro Jahrgang abschalten (d.ngo Datensatz aus dem ryouready Paket)
  31. 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)!
  32. 32. plot(IQbio, IQfoster) # numerisch! Streudia gramm
  33. 33. plot(Burt) # dataframe! Paarwe ise Streudia gramm e
  34. 34. plot(class, IQbio) # factor, num.! Boxplot
  35. 35. plot(class) # factor! Balkend iagram m
  36. 36. m <- lm(IQbio ~ IQfoster)! plot(m) # linear model! Regress ion
  37. 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.!
  38. 38. Legenden
  39. 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 !
  40. 40. title! fill! legend(x=1, y=10, ! legend=c("Eins","Zwei", ! legend! "Drei","Vier"), ! fill=1:4, ! title="Boxen")! ncol=2! border=“red"! border! density! density=20, horiz=TRUE!
  41. 41. legend(x=1, y=10, ! legend=c("Eins","Zwei", ! "Drei","Vier"), ! lwd=1, ! title=“Linien")! lwd:line width! lwd=4! seg.len=5! seg.len! lty=1:4! lty: line type!
  42. 42. legend(1, 10, ! ! ! c("Eins", "Zwei", ! "Drei", "Vier"), ! text.col! pch=1:4, col=1:4,! text.col=1:4,! title="Symbole")! pch! pt.cex=c(.5, 1, 1.5, 2) pt.lwd=c(1,3,6,9)! pt.cex, pt.lwd! pch=1:4! lwd=4! merge=TRUE!
  43. 43. title.col! bg! y.intersep! box.lwd! box.col! legend(1, 10, ! LETTERS[1:3], ! fill=1:4, ! title.col="blue",! title="Boxen", ! bg="gray90", ! box.col="red", ! box.lwd=3,! y.intersp=2)! cex=2!
  44. 44. Positionieren der Legende Argumente •  x! •  Y ! •  xjust ! •  yjust! 1! yjust! 0! 0! xjust! 1!
  45. 45. Über Schlüsselwörter positionieren
  46. 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. 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!
  48. 48. Füge zum vorherigen Plot eine Legende hinzu
  49. 49. Plot in Datei speichern
  50. 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. 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. 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. 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. 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. 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. 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. 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! ! !
  58. 58. Erstelle folgende png-Grafik mit einer Auflösung von 300 ppi
  59. 59. Plot Layout
  60. 60. Verschiedene Plot Bereiche Siehe auch: Clarkson, 2010, http://www.stat.tamu.edu/~jkim/Rfigurelayout.pdf
  61. 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
  62. 62. Verschiedene Plot Bereiche mar[1] = 5! oma[1] = 3! Siehe auch: Clarkson, 2010, chr
  63. 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
  64. 64. adj=1! adj=0! adj=1!
  65. 65. Your turn! – Verändere den irisDaten Plot folgendermaßen
  66. 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))!
  67. 67. mfrow=c(1,2)
  68. 68. Your turn! – Erweitere den irisDaten Plot folgendermaßen
  69. 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. 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. 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. 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. 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. 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)!
  75. 75. x <- rnorm(1000)! y <- rnorm(1000)! ! # Layout! par(oma=c(0,0,1,3))! m <- matrix(c(1,2), ncol=1)! layout(m, height=c(1,5))! ! # Histogramm! par(mar=c(0,4,0,0))! hist(x, xaxt="n", ! yaxt="n", main="",! ylab="", xlab="")! ! # Streudiagramm! par(mar=c(4,4,0,0))! plot(x, y, ! xlab="", ylab="", ! las=1, pch=16)! !
  76. 76. Your turn! – Erzeuge folgenden Plot mit dem iris-Datensatz
  77. 77. Low-Level Funktionen
  78. 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. 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. 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
  81. 81. # Plot aufsetzen! library(car)! attach(Burt)! plot(IQbio, IQfoster)! # Raster hinzufügen! grid(lty="solid")! ! ! # Horiz. und vert. Linien ! abline(h=100, col="red")! abline(v=100, col="red")! !
  82. 82. # Punkte oben rechts in! # rot neu plotten! i <- IQbio > 100 & ! IQfoster > 100! points(IQbio[i], IQfoster[i], ! col = "red", pch = 16)! # Halb-transparentes ! # Rechteck hinzufügen rect(100, 100, 140, 140,! col = "#FF000020", border = NA)! !
  83. 83. # Regressionsgrade! m <- lm(IQfoster ~ IQbio, ! data = Burt)! abline(m, col = "grey")! ! # Text hinzufügen! text(120, 120, "OR")!
  84. 84. Your turn! – Erzeuge folgenden Plot
  85. 85. Leere Plots erzeugen # Leerer plot mit Limits ! # von Hand! Keine Daten plot(NULL, ! xlim = c(70, 130), ! ylim = c(70, 130) )! # Leerer plot mit passenden! # Limits! plot(IQbio, IQfoster, ! type = "n")! ! „n“ unterdrückt die Punkte
  86. 86. Text
  87. 87. # Leerer plot mit korrekten! # Limits! plot(IQbio, IQfoster, ! type = "n")! ! „n“ unterdrückt die Punkte # Punkte hinzufügen! points(IQbio, IQfoster, ! col="grey", pch=16)!
  88. 88. # Leerer plot mit korrekten! # Limits! i <- which(IQbio > 130)! x <- IQbio[i]! y <- IQfoster[i]! points(x, y, col = "red", ! pch = 16)! # Pfeil und Text! arrows(x, y - 10, ! x, y, ! length=0.2, ! lwd = 2, col = "red")! text(x, y-12, ! "Sehr schlau", ! adj = 1, col = "red")!
  89. 89. Farben in R Inspired by http://research.stowers-institute.org/efg/Report/UsingColorInR.pdf
  90. 90. In R können verschiedene Elemente des Plots Farben annehmen •  •  •  •  •  •  •  Punkte Linien Achsen Legenden Text Hintergrund etc.
  91. 91. Überschrift Legende Achse Punkte Tick Hintergrund Tick-Label Achsen Label
  92. 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. 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.
  94. 94. Als Zahl Größere Zahlen führen zu recycleten Farben Z.B. plot(1:50, pch=16, col=1:50)!
  95. 95. plot(1:8, pch=16,! plot(1:24, pch=16,! cex=4, col=1:8)! cex=4, col=1:24)!
  96. 96. Farben als Namen colors()! [1] "white" [4] "antiquewhite1" [7] "antiquewhite4" [10] "aquamarine2" "aliceblue" "antiquewhite2" "aquamarine" "aquamarine3" "antiquewhite" "antiquewhite3" "aquamarine1" "aquamarine4" ! ! ! !
  97. 97. Erstelle folgenden Plot
  98. 98. Grautöne grey(0)! [1] "#000000"! ! grey(.5)! [1] "#808080"! ! grey(1)! [1] "#FFFFFF"! ! "grey0"! ! ! "grey50"! ! ! "grey100"!
  99. 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. 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. 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
  102. 102. Erstelle folgenden Plot mit 10000 zufälligen Werten ~N(0,1)
  103. 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. 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

×