Graphiques
Graphiques
R offire de nombreuses possibilités pour effiectuer des graphiques et les multiples options graphiques permettent une grande flexibilité. La commande demo(graphics) donne un apercu de ces possibilités. Ici nous allons nous contenter de voir les représentations graphiques les plus classiques (graphe 2D, histogramme, boxplot) ainsi que les options graphiques les plus courantes.
Pour chaque fonction, la liste complète des options s'obtient via l'aide-en-ligne. Généralement, l'affiichage d'un graphique se fait dans une fenetre graphique que l'on ouvre avec la commande
> x11()
La fonction de base est plot :
> x<-c(-1000:1000)*pi/500
> y<-cos(x)
> plot(x,y)
Options de la fonction plot
main="Le titre" titre du graphe
sub="Le sous-titre" sous-titre du graphe
xlab=" ",ylab=" " légende des axes
xlim=c(xa,xb), ylim=c(ya,yb) fixent les limites inférieures et supérieures des axes (vecteurs `a deux éléments),
type=" " par défaut : "p" pour points, sinon "l", "o", "h" ou "s"
pch=n, lty=n symbole ou type de ligne utilisé
col=n couleur
Pour plus de détails, voir help(par)
Types de symboles utilisables (pour référence)
Exemple d'utilisation de plot
> plot(x,y,xlim=c(0,pi),ylim=c(-1,1),xlab="x",ylab="y",lty=2,type="l",main="graphe de la fonction cosinus") donne Tracé de variables discrètes
>plot(test$poids,test$womac,xlim=c(70,85),ylim=c(0,50),xlab="poids",ylab="womac",pch=2,type="p",main="relation
entre les variables poids et womac")
Ajouter des éléments à un graphe
title() titre
legend() légende
text() texte
lines(x,y) trait entre x(=c(a,b)) et y(=c(c,d))
points(a,b) tracé du point de coordonnées (a,b)
arrows(a,b,c,d) tracé d'une flèche entre (a,b) et (c,d)
abline(a,b) trace la droite y = bx+a. Pour tracer une droite horizontale (resp. verticale), on pourra utiliser abline(h=) (resp. abline(v=))
Exemple
>x<-c(0:1000)*pi/100
>plot(x,cos(x),xlim=c(0,pi),ylim=c(-1,1),type="l",ylab="",font=3)
>lines(x,sin(x),lty=2)
>abline(-1,1,lty=3)
>legend(1, -0.5, c("cos(x)", "sin(x)", "x-1"),lty = c(1, 2, 3))
Les différents types de graphes
hist() histogramme
barplot() graphe en barre
boxplot() La représentation en "boite `a moustache" d'un vecteur est `a mi-chemin entre un histogramme
et la fonction de répartition. Elle permet de visualiser la moyenne, la médiane, les quartiles `a
25% et 75% de la distribution empirique
qqplot(), qqnorm() graphe quantile-quantile
pie() camembert
pairs() corrélations entre les colonnes d'une matrice
matplot() corrélations entre les colonnes de deux matrices
Histogramme
Pour tracer un histogramme, la commande de base est la fonction hist
> hist(x)
Voici certaines options spécifiques de la fonction hist :
-- breaks : permet de spécifier les points de ruptures entre les barres de l'histogramme, soit
sous la forme d'un vecteur, soit sous la forme d'un nombre de barres.
-- freq : permet de choisir l'histogramme des effiectifs, frequency en anglais (freq=TRUE, option par défaut), ou celui des proportions (freq=FALSE).
-- col : indique la couleur pour remplir les barres.
-- plot : si plot=FALSE, l'histogramme n'est pas tracé et la fonction renvoie la liste des points
de ruptures et les effiectifs.
-- right : permet de choisir des intervalles de la forme ]a, b] si right=TRUE (par défaut ils sont de la forme [a, b[).
Pour tracer plusieurs graphes sur la même page (ex : histogramme de différentes variables), on utilise l'option mfrow=c(m,n)
> par(mfrow=c(2,2))
> hist(airquality$Ozone,main="",xlab="Ozone")
> hist(airquality$Solar.R,main="",xlab="Solar.R")
> hist(airquality$Wind,main="",xlab="Wind")
> hist(airquality$Temp,main="",xlab="Temp")
x11()
x<-pi*c(0:200)/50
y<-cos(x)
plot(x,y)
plot(x,y,type="l")
plot(x,y,xlim=c(0,pi),ylim=c(-1,1),xlab="x",ylab="y",lty=2,type="l",main="graphe de la fonction cosinus")
Ajouter des éléments à un graphe
Exemple
x<-pi*c(0:200)/50
y<-cos(x)
plot(x,y,xlab="Variable X",ylab="",xlim=c(0,max(x)),ylim=c(-1.5,7),type="l",font=2)
lines(x,sin(x),col="red")
legend(9,7,c("Sin(X)","Cos(X)"),lty=c(1,1),col=1:2)
abline(-1,1,lty=3,col="yellow")
legend(9,7,c("Sin(X)","Cos(X)", "x-1"),lty=c(1,1,3),col=c("red","green","yellow"))
legend(3, 1, c("cos(x)", "sin(x)", "x-1"),lty = c(1, 2, 3),col=c("red","green","yellow"))
arrows(0,0.5,1,0.75)
points(1,0.25)
title(main="ajouter un titre" )
text(6,2,"relir")
mtext="Les différents types de graphes"
xgaus<-rnorm(100)
xgaus<-rnorm(500)
ygaus<-runif(60)
boxplot(xgaus,ygaus)
pie(rep(1,12),col=rainbow(12),radius = 0.9)
Les différents types de graphes
hist()
xgaus<-rnorm(100)
hist(xgaus,breaks=20)
hist(xgaus,breaks=20,col="red")
dev.new()
par(mfrow=c(2,2))
hist(airquality$Ozone,main="",xlab="Ozone")
hist(airquality$Solar.R,main="",xlab="Solar.R")
hist(airquality$Wind,main="",xlab="Wind")
hist(airquality$Temp,main="",xlab="Temp")
boxplot(airquality$Ozone)
summary(airquality$Ozone)
x=c(1,1,2,2,3,4,4,5,6,7,7,7,7,7,8,9,1,2)
barplot(x)
x1<-runif(100)
x2<-runif(100)
qqplot(x1,x2,main="qq-plot de x1 et x2")
abline(0,1)
x<-runif(100)
y<-rnorm(100)
qqnorm(x)
qqnorm
abline(0,1)
pie(rep(1,12),col=rainbow(12))
##Une autre option très utile est la possibilité de superposer deux graphes
x<-pi*c(0:200)/50
y<-cos(x)
z<-2*sin(x)
plot(x,y,ylim=c(-2,2),type="l")
par(new=T)
plot(x,z,ylim=c(-2,2),type="l")
##Enfin, utilisons la fonction persp() pour faire un graphe 3D d'une fonction trigonométrique.
x<-pi*c(0:20)/5
y<-x
f <- function(x,y) {
r <- sqrt(x^2+y^2)
10 * sin(r)/r}
z <- outer(x, y, f)
persp(x,y,z)
Simulation de fractales #
##################################
#spirale
n<-1000
a1<-array(data=c(0.839, 0.383,-0.303, 0.924),dim=c(2,2))
a2<-array(data=c(-0.161, 0.138,-0.136, -0.182),dim=c(2,2))
b1<-array(data=c(0.232, -0.08),dim=c(2,1))
b2<-array(data=c(0.921, 0.178),dim=c(2,1))
simul<-array(data=c(0), dim=c(2,n))
decision<-rbinom(n,1,0.1)
simul[1,1]=0
simul[2,1]=0
for(i in 1n-1))
{
if(decision[i]==0)
{
simul[,i+1]=a1%*%simul[,i]+b1
}
else
{
simul[,i+1]=a2%*%simul[,i]+b2
}
plot(t(simul[,1:i]), type='p', pch=21, xlim=c(-0.1, 1), ylim=c(-0.1, 1.1))
points(simul[1,i+1],simul[2,i+1], pch=19, col='red')
}
###############################################################################
#feuille
n<-2000
a1<-array(data=c(0, 0,0, 0.16),dim=c(2,2))
a2<-array(data=c(0.2,0.23, -0.26, 0.22),dim=c(2,2))
a3<-array(data=c(-0.15, 0.26, 0.28, 0.24),dim=c(2,2))
a4<-array(data=c(0.85, -0.04, 0.04, 0.85),dim=c(2,2))
b1<-array(data=c(0, 0),dim=c(2,1))
b2<-array(data=c(0, 1.6),dim=c(2,1))
b3<-array(data=c(0, 0.44),dim=c(2,1))
b4<-array(data=c(0, 1.6),dim=c(2,1))
simul<-array(data=c(0), dim=c(2,n))
decision<-runif(n,0,1)
simul[1,1]=0
simul[2,1]=0
for(i in 1n-1))
{
if(decision[i]<0.1)
{
simul[,i+1]=a1%*%simul[,i]+b1
}
if(0.1<=decision[i] && decision[i] <0.25)
{
simul[,i+1]=a2%*%simul[,i]+b2
}
if(0.25<=decision[i] && decision[i]<0.4)
{
simul[,i+1]=a3%*%simul[,i]+b3
}
if(0.4<=decision[i])
{
simul[,i+1]=a4%*%simul[,i]+b4
}
plot(t(simul[,1:i]), type='p', pch='.', xlim=c(-5, 5), ylim=c(-1, 10))
points(simul[1,i+1],simul[2,i+1], pch=19, col='red')
}