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.
layout(matrix(1:nb,y,x))
# 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")
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 :
plot.new()
par(mar=c(4,4,3,5))
plot(c(1:10),col="blue",axes=F,xlab="",ylab="")
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")
par(new = T)
plot(c(25:35),col="red",axes=F,xlab="",ylab="",ylim=c(20,40))
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
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)