Une des plus grande difficultés lorsqu'on réalise des graphiques est de superposer des courbes nécessitant des axes gradués différemment ou encore de combiner différents types de graphiques comme une courbe et un diagramme en barre.
Voici quelques règles simples pour y arriver avec R les fonctions split.screen(), layout() et par().
On peut facilement découper la fenêtre graphique avec la fonction split.screen().
screen() permettra d'appeler chaque fenêtre par son nom (pour qu'on puisse tracer dans l'ordre souhaité)
Exemple 1 avec 2 fenêtres
x <- rnorm(150) # 150 valeurs simulée
split.screen(1:2)
screen(2) ; plot(x, col="cyan", type="l", lwd=3)
screen(1) ; hist(x, col="orange")
Exemple 2 avec 3 fenêtres
close.screen(all = TRUE) # Pour réinitialiser la découpe de la fenêtre
# Couper la fenêtre en 2
split.screen(1:2)
# Couper en 2 la fenêtre 2.
split.screen(c(1:2), screen = 2)
screen(1) ; plot(1:10,pch=16,col="red")
screen(3) ; plot(1:10,pch=16,col="blue")
screen(4) ; barplot(1,col="green")
Mettre plusieurs graphiques sur une même figure.
Faire une fenêtre avec plusieurs graphiques
Partitionner la fenêtre pour tracer plusieurs fenêtres. layout(matrix(1:nb,y,x))
nb : nombre total de graphiques
y : nombre de lignes
x : nombre de colonnes
# layout(matrix(1:nb,y,x))
# exemple
layout(matrix(1:2,1,2))
boxplot(c(1:10),col="#FAD4B1") ; hist(c(3:14,4,5,6,5,6,6),main="",col="#EF8F36")
Combiner des graphiques à différents endroits avec des surfaces différentes avec la commande par()
fig = c(x1,x2, y1,y2) permet de définir la région où sera le graphique : chaque paramètre vaut entre 0 et 1
new = T : indique qu'on pourra tracer ensuite un nouveau graphique là où désirerr
mar = c(bas,gauche, haut, droite)) : définit les marges autour du graphique. Par défau ces valeurs sont de 5.1, 4.1, 4.1 et 2.1
il est possible aussi par la même commande de superposer les graphiques
par(fig=c(x1,x2, y1,y2),new=T,mar = c(bas,gauche, haut, droite))
#exemple
dev.off() # ferme les anciennes fenêtes
# Graphique 1 (en bas à droite sur la partie x de 20% à 100% et la partie y de 0% à 80% ==> c(0.2,1,0,0.8) - + Une marge importante en bas et à droite ==> mar = c(2,0,0.1,2)
par(fig=c(0.2,1,0,0.8), mar = c(2,0,0.1,2), new=TRUE)
plot(c(1:10),col="green",pch=16)
# Graphique 2
par(fig=c(0.2,1,0.8,1), mar = c(0,0,2,2), new=TRUE)
barplot(c(1:10),col="blue")
# Graphique 3
par(fig=c(0,0.2,0,0.8), mar = c(2,0,0.1,2), new=TRUE)
boxplot(rnorm(10000,20,3),col="red")
Mots clefs : graphiques superposés - superposition de graphiques - modifier le graphique d'arrière-plan.
Superposer des graphiques présente quelques difficultés dans la mesure où il va falloir attribuer les axes à différentes courbes avec éventuellement des graduations différentes.
La démarche est pourtant simple. Il faut :
Tracer le premier graphique sans afficher aucun axe)
Indiquer son axe y (celui de gauche ou celui de droite)
Indiquer qu'on va tracer un deuxième graphique (commande par(new=T) )
Tracer le 2ème graphique
Indiquer l'axe y de ce 2ème graphique (celui qui reste)
Graduer l'axe des x
Étape 1 - créer le fenêtre graphique
plot.new() : nouveau graphique
mar définit les marges pour permettre l'ajout d'un axe à droite ( c( bas,gauche, haut, droite ) )
plot : trace ici la courbe, ce peut eêtre aussi une autre commande type barplot mais attention : il ne faut ni afficher les axes (axes = F) ni les titres des axes (xlab = "" et ylab ="")
plot.new()
par(mar=c(4,4,3,5))
plot(c(1:10),col="blue",axes=F,xlab="",ylab="")
Étape 2 - graduer et titrer l'axe correspondant
axis va permettre de tracer le graphique y correspondant à la courbe (2 si à gauche, 4 si à droite). On doit aussi indiquer une couleur et aussi la manière d'être gradué. (at(0,10,by=2) indique une graduation de 0 à 10 de 2 en 2.
mtext permet d'indiquer le titre de l'axe (line précise la distance par rapport à l'axe pour laisser de la place aux graduations et side si c'est l'axe de gauche ou de droite)
axis(2, ylim=c(0,10),col="blue",col.axis="blue",at=seq(0, 10, by=2))
mtext("Axe de la courbe bleue",side=2,line=2.5,col="blue")
Étape 3 - indiquer qu'on va tracer le 2 ème graphique
Comme précédemment, on indique qu'il ne faut ni titre des axes, ni tracé des axes
par(new = T)
Étape 4 - graduer et titrer le 2 ème graphique
Comme précédemment, on utilise axis et mtext cette fois-ci pour tracer un autre axe y des ordonnées
plot(c(25:35),col="red",axes=F,xlab="",ylab="",ylim=c(20,40))
Étape 5 - graduer et titre le 2 ème graphique
Comme précédemment, on utilise axis et mtext cette fois-ci pour tracer un autre axe y des ordonnées
axis( 4 ,col="red",col.axis="red",at=seq(20, 40, by=5))
mtext("Axe de la courbe rouge",side=4,line=2.5,col="red")
# le 4 indique l'axe de droite
Étape 6 - graduer l'axe des x
axis( 1 , ylim=c(20,40),col="black",col.axis="black",at=seq(0, 12, by=2))
mtext("Axe des X",side=1,line=2.5,col="black")
# le 1 indique l'axe d'en bas, un 3 aurait été pour en haut
Exemple simple de superposition de 2 courbes (script présenté ci-dessus, en téléchargement direct)