Inleiding Programmeren + R

Grafieken

» Start

Grafieken 


[bron: A.W. van der Vaart - Handleiding R]


Het produceren van grafieken behoort tot de kern van het R-programma. Grafische output kan zowel op het scherm worden bekeken als op papier worden geprint.  Wanneer een plotopdracht gegeven wordt zal een graphics window worden geopend . De output van plotopdrachten verschijnt automatisch in dit graphics window. Grootte en plaats van het graphics window kunnen op de gebruikelijke manier worden veranderd. Na verandering van de grootte wordt het plaatje opnieuw getekend, op zo’n manier dat de grafiek het gehele window vult. 


Er zijn twee soorten plotopdrachten in R. 

- High level plotfuncties produceren volledige plaatjes en wissen zonodig de output van een 

voorgaande plotopdracht uit. 

- Low level plotfuncties zijn bedoeld om grafische output aan een eerder gemaakt plaatje toe 

te voegen.


Voor het maken van twee grafieken in één plaatje is derhalve één high level plotfunctie nodig, en één low level plotfunctie. 

De meest gebruikte plotfunctie is plot. Zonder opties levert deze een scatterplot van de elementen van de ene vector tegen die van een tweede vector. 

    

    > x <- rnorm(50); y <- rnorm(50) 

    > plot(x,y,main="figuur 1")

    

Met de optie type="l" worden opeenvolgende punten verbonden door lijnstukjes. Dit maakt plot geschikt voor het plotten van een grafiek. 

    

    > u <- seq(0,4*pi,by=0.05); v <- sin(u) 

    > plot(u,v,type="l",xlab="",ylab="sin",main="figuur 2") 

    

Andere high level plotting functies maken meer specifieke plots. Plots van statistische betekenis zijn het histogram , de boxplot en de qq-plots . 

    

    > x <- rnorm(50) 

    > hist(x, main="figuur 3") 

    > text(0,5,"histogram") # print "histogram" in het punt (0,5) 

    > boxplot(x, main="figuur 4") 

    > qqnorm(x, main="figuur 5")

    

De range van de assen in een plot is gelijk aan de waarden in de vectoren xlim en ylim. Bij simpel gebruik is het handig om R default waarden voor deze vectoren te laten kiezen. 

Hetzelfde geldt voor de labels op de assen, en boven- en ondertitels. De tabel geeft een overzicht van enkele van zulke optionele argumenten. Vele andere aspecten van de plots kunnen worden gecontroleerd met par. Zie help voor nadere informatie. 


De functie lines is de low level versie van plot(. . .,type="l"). Deze functie kan worden gebruikt om een tweede grafiek over een eerste heen te tekenen. Beschouw bijvoorbeeld het plotten van een histogram en de ware dichtheid van een normale steekproef in één plaatje. 

    

    > x <- rnorm(100) 

    > range(x) 

    [1] -3.226397 2.001791 # default wordt de range in hist(x): (-4,3) 

    > hist(x,xlim=c(-4,4), xlab="", prob=T, main="figuur 6") 

    > u <- seq(-4,4,by=0.1) 

    > lines(u,dnorm(u)) 

    

Meerdere plaatjes kunnen naast en onder elkaar in één plot getekend worden met behulp van de functie par. 

    

    > par(mfrow=c(r,k))

    

De eerst volgende (r,k) plots worden dan in één plaatje gezet, in respectievelijk r rijen en k kolommen.


Sommige R-functies maken gebruik van de muis. 

Met de functie identify(x,y,labels) kun je erachter komen welk punt een gegeven punt in een puntenwolk is, bijvoorbeeld een uitbijter. 

    

    > plot(x,y) 

    > identify(x,y,labels) 

    

Klik vervolgens met de linker knop van de muis op de plaats van een punt. Als dit het punt (x[i],y[i]) is, verschijnt vervolgens op de plaats van het punt de i-de coördinaat van de character vector labels. Het default label is i. Je kunt dit herhalen. Een druk op de rechter knop van de muis beëindigt identify(). 


Het R-commando locator is handig als je de precieze coördinaten van een aantal punten op het scherm wilt weten, bijvoorbeeld om daar tekst af te drukken. Start met het typen van: 

    

    > z <- locator(n) 

    

Klik vervolgens op n punten in het graphics window. De coördinaten van deze punten worden opgeslagen in de list z. Het is extra handig om locator te combineren met text. 

    

    > text(locator(1),"Tekst op de juiste plaats") 

    

De tekst verschijnt nu op de plaats in de grafiek waar met de muis geklikt wordt. Door na locator(n=2,type="l") op twee punten in het graphics window te klikken kan een lijnstuk in de grafiek worden getekend. 


optienaam 

betekenis

xlab="xlabel"

Label op de x-as

ylab="ylabel" 

Label op de y-as

xlim=c(l,r)

Range van de x-as van l tot r 

ylim=c(l,h)

Range van de y-as van l tot h

main="titel" 

Titel boven de plot

sub="subtitel"

Titel onder de plot 

lty=n 

Lijntype: n=1: normaal; n=2, 3,. . .: gebroken 

  

Enkele High Level Plotfuncties 


plot(x,y) 

Scatterplot de punten (x[i],y[i]). 

plot(x,y,type="l")

Plot de punten (x[i],y[i]) met opeenvolgende punten verbonden door een lijn. 

plot(x,y,type="n")

Plot de assen, maar niet de punten. 

plot(x,y,type="s")

Plot een trapfunctie.

plot(mat)

Plot de punten (mat[i,1],mat[i,2]). 

matplot(matx,maty)

Plot kolommen van matrices tegen elkaar. 

boxplot(x)

Boxplot van vector x.

qqnorm(x)

qq-plot tegen de normale verdeling.

qqverd

qq-plot tegen de kansverdeling met code verd. 

qqplot(x,y)

Empirische qqplot van x tegen y. 

persp(z)

Quasi drie-dimensionale plot.

hist(x)

Histogram van vector x.

barplot(x)

Staafdiagram van elementen in vector x


Enkele Low Level Plotfuncties 


lines(x,y) 

Plot van de punten (x[i],y[i]) met opeenvolgende punten verbonden door een rechte. 

title("titel","ondertitel") 

Print titels. 

text(x,y) 

Plot element-nummers op de punten (x[i],y[i]).

text(x,y,label)

Plot de karakter string label[i] op (x[i],y[i]).

abline(a,b)

Voeg de lijn y=a+bx toe. 

points(x,y) 

Voeg de punten (x[i],y[i]) toe.

polygon(x,y) 

Veelhoek met hoekpunten (x[i],y[i]).

mtext("tekst",side,line)

Plot tekst in een kantlijn. 

legend() 

Voeg een legenda toe.



Door het onderscheid in high- en low-level plotfuncties is het mogelijk om plaatjes in stappen op te bouwen. We maken een histogram op basis van 2000 random standaard normaal verdeelde getallen:


> par(las=1) # alle tekst langs de assen graag horizontaal afdrukken

> x <- rnorm(2000) # 2000 random standaard normaal verdeelde getallen

> hist(x, main="Dichtheid 2000 N(0,1) verdeelde random getallen",

+ freq=FALSE, col = "grey", ylab="dichtheid",

+ xlim=c(-5, 5), ylim=c(0,0.6))

hist-1.pdf

Vervolgens voegen we de theoretische dichtheidscurve toe aan de plot:


> curve(dnorm, from=-5, to=5, add=TRUE, lwd=3, lty=2)

hist-2.pdf

Daarna doen we nog iets aan de legenda:


> legend(-4.5, 0.6, legend=c("emp. dichth.", "theor. dichth."),

+ col=c("grey", "black"), lwd=5)

hist-3.pdf

En tot slot voegen we nog een formule:


> text(-5, 0.45, adj=0, cex=1.3,

+ expression(f(x)==frac(1, sigma*sqrt(2*pi)) ~~

+ e^{fraq(-(x-mu)^2, 2*sigma^2)}))

> text(-5, 0.3, adj=0, cex=1.3,

+ expression(f(x)==frac(1, sigma*sqrt(2*pi)) ~~

+ e^{frac(-(x-mu)^2, 2*sigma^2)}))


en wat tekst toe aan de plot:


> text(5, 0.45, adj=1,cex=1.3,

+ expression(paste("met ",mu==0, ", ", sigma==1)))


hist-4.pdf

Referenties:

Website van Paul Murrell's boek R Graphics, met heel veel voorbeelden van plots en R-code.

Website van John Maindonald en John Braun's boek  Data Analysis and Graphics Using R - An Example-Based Approach, met plot voorbeelden en R-code.


Grafieken wegschrijven in een file

    

Zie Plot saven.