Cours

R permet de créer différents types de tracés, des graphiques de base comme les courbes de densité, dot plots, boxplots et nuages de points, jusqu’aux graphes plus complexes sur le plan statistique comme les probability plots.
Vous pouvez ainsi passer de graphiques simples avec peu de personnalisation à des graphiques avancés entièrement personnalisés, y compris interactifs. Pourtant, nos graphiques R ne donnent pas toujours le résultat souhaité : Stack Overflow regorge de questions à ce sujet, avec de nombreux thèmes récurrents.
C’est pourquoi DataCamp a rassemblé les questions les plus fréquentes et leurs meilleures réponses dans un seul article.
Pour vous exercer à créer des graphiques en R, essayez ce cours sur la visualisation de données en R.
Les 15 questions sur les graphiques R
1. Comment tracer un graphique R vide
Ouvrir un nouveau cadre de tracé
Vous pouvez ouvrir un cadre vide et activer le périphérique graphique en R comme suit :Remarque : les fonctions plot.new() et frame() définissent un nouveau cadre de tracé sans axes, étiquettes ni contour. Elles indiquent qu’un nouveau graphique va être créé : une nouvelle fenêtre s’ouvre si aucune n’est active, sinon la fenêtre existante est prête à accueillir le nouveau tracé. Plus d’infos ici.
Définir les dimensions de la fenêtre graphique
Vous pouvez aussi utiliser la fonction plot.window() pour fixer les dimensions horizontales et verticales du graphique vide que vous venez d’ouvrir :
plot.new()
pWidth = 3
pHeight = 2
plot.window(c(0,pWidth),
c(0,pHeight))
Tracer un vrai graphique vide
Vous pouvez produire un graphique vide avec la fonction plot(). Ajoutez ensuite axes, étiquettes et titre avec les fonctions mtext() et title().
Vous donnez les coordonnées (5,5) au graphique, mais vous ne tracez rien en fixant l’argument type à "n".
Astuce : essayez "p" ou "b" pour voir la différence !
Vous n’ajoutez pas d’annotation, mais vous fixez des limites de 0 à 10 sur les axes x et y.
Enfin, vous pouvez dessiner un cadre autour du tracé avec box() et ajouter des points avec points() :
Remarque : vous pouvez passer vos x et y sous forme de vecteurs pour tracer plusieurs points d’un coup. L’argument pch choisit le symbole, et cex règle l’échelle du texte et des symboles par rapport à la valeur par défaut.
Astuce : pour voir quel numéro correspond à quel symbole, cliquez ici.
2. Comment définir les étiquettes d’axes et le titre des graphiques R
Les axes des graphiques R figurent parmi les sujets les plus populaires sur Stack Overflow. Les questions sont variées.
Poursuivez la lecture pour découvrir les plus fréquentes repérées par DataCamp !
Nommer les axes (avec exposants ou indices) et ajouter un titre
Vous pouvez facilement nommer les axes et ajouter un titre pour rendre votre graphique plus clair pour votre public.
Ajoutez les arguments main pour le titre principal, sub pour le sous‑titre, xlab pour l’axe des x et ylab pour l’axe des y.
Remarque : pour des exposants ou indices dans le titre, utilisez expression() avec ^ pour l’exposant et des crochets pour l’indice dans l’argument main de plot().
Testez‑le dans le bloc DataCamp Light ci‑dessous :
Vous pouvez aussi afficher des lettres grecques dans les étiquettes d’axes en combinant expression() et paste(). Exécutez :
Ajuster l’apparence des étiquettes d’axes
Pour modifier l’apparence des étiquettes des axes x et y, utilisezcol.lab (couleur) et cex.lab (taille relative au réglage par défaut cex).
Pour plus d’informations, consultez cette page.
Supprimer les étiquettes et annotations d’axes
Pour masquer les valeurs des axes, passez xaxt et yaxt à "n" (suppression du tracé des axes). Toute autre valeur tracera l’axe.
ann à FALSE pour retirer les étiquettes.
Astuce : si ce n’est pas l’info recherchée, voyez cette page.
Faire pivoter les étiquettes d’axes
Ajoutez l’argumentlas à la fonction axis() pour orienter les nombres des axes :
Remarque : cela suppose d’abord de tracer sans axes via plot() puis d’ajouter les axes avec axis().
las accepte : 0 (parallèle à l’axe, défaut), 1 (horizontal), 2 (perpendiculaire), 3 (vertical).
Pour en savoir plus sur axis(), continuez ci‑dessous.
Déplacer les axes
Vous voulez déplacer vos axes ? Utilisez axis() pour choisir où dessiner chaque axe. Par exemple, l’axe des x en haut et l’axe des y à droite.
Rappel : avec axis(), 1 = bas, 2 = gauche, 3 = haut, 4 = droite.
3 et 4 pour haut et droite :
Vous tracez d’abord sans axes ni annotations, puis vous ajoutez les axes souhaités et leur position.
La flexibilité de axis() ne s’arrête pas là ! Voyez la suite.
Astuce : consultez la dernière question pour déplacer le texte des axes avec hjust et vjust.
3. Comment ajouter et ajuster l’espacement des graduations
Modifier l’espacement des graduations
Laisser R décider des graduations peut être frustrant. Voici comment les ajuster.
1. Utiliser axis() pour maîtriser les graduations
Vous définissez d’abord la position des graduations et leurs libellés, puis vous tracez en supprimant l’axe (xax t = "n").
Ensuite :
axis()choisit le côté (1bas,2gauche,3haut,4droite) ;atindique où dessiner les graduations (iciV1) ;labelsfournit les libellés (iciV2) ;tckrègle la direction/longueur des graduations (valeur négative : sous l’axe).
Astuce : passez une valeur positive à tck pour voir la différence.
tcl) et l’apparence des libellés (cex.axis, col.axis, font.axis).
2. Utiliser d’autres fonctions pour contrôler les graduations
Vous pouvez aussi utiliser par() et plot() avec l’argument xaxp (positions des graduations extrêmes sur l’axe des x et nombre d’intervalles) :
Variante équivalente :
Remarque : cela ne fonctionne pas en échelle logarithmique. Avec par(xlog=T), la signification des trois valeurs de xaxp change : pour une petite plage, n est négatif, sinon n vaut 1:3 et x1 et x2 sont les plus petites et plus grandes puissances de 10 dans les coordonnées utilisateur, 10 ^ par(“usr”)[1:2].
Ici, vous utilisez par() : vous mettez xlog à TRUE et fixez xaxp pour les graduations extrêmes et le nombre d’intervalles (min = 1, max = 4, intervalles = 3).
Vous tracez ensuite x et y avec l’argument log pour indiquer l’axe à mettre en log ("x", "y" ou "xy").
Ajouter des graduations secondaires
Ajoutez rapidement des « petites » graduations avecminor.tick() du package Hmisc :
nxdéfinit le nombre d’intervalles entre graduations majeures sur l’axe x (1 = supprime) ;nyfait de même pour l’axe y ;tick.ratiofixe le ratio de longueur petites/grandes graduations (longueur des grandes issue depar(tck=x)).
4. Comment créer deux axes des x ou des y différents
Première option : créez un premier tracé puis utilisezpar() avec new=TRUE pour éviter d’effacer le périphérique graphique :
Puis créez le second tracé avec plot() en ajustant notamment type, axes, bty, xlab et ylab :
type: passez"l"pour un tracé en lignes ;axes:FALSEpour ne tracer aucun axe ;bty: supprime le cadre autour du graphique ;xlabetylab: chaînes vides pour ne pas afficher d’étiquettes.
Testez‑le dans le bloc ci‑dessous (le code précédent est déjà chargé dans l’environnement) :
Ajoutez ensuite l’axe et le libellé en marge avec axis() et mtext().
Pour ajouter un axe à droite, passez side=4 à axis(). Indiquez at avec des valeurs « belles » couvrant l’étendue de z via pretty(), afin de refléter l’échelle du second graphe.
Essayez ci‑dessous :
Remarque : side accepte 1 (bas), 2 (gauche), 3 (haut), 4 (droite). line indique la marge utilisée.
Résultat final :
set.seed(101)
x <- 1:10
y <- rnorm(10)
z <- runif(10, min=1000, max=10000)
plot(x, y)
par(new = TRUE)
plot(x,
z,
type = "l",
axes = FALSE,
bty = "n",
xlab = "",
ylab = "")
axis(side=4,
at = pretty(range(z)))
mtext("z",
side=4,
line=3)
En exercice supplémentaire, construisez un graphique avec deux axes des x différents ! Essayez dans ce bloc :
Notez que des packages automatisent ces opérations : twoord.plot() (plotrix) et doubleYScale() (latticeExtra) sont pratiques et souvent plus rapides :
Remarque : l’exemple ci‑dessus utilise ce jeu de données. Besoin d’un rappel sur l’import de données ou read.table() ? Consultez le tutoriel DataCamp sur l’import de données en R.
5. Comment ajouter ou modifier la légende d’un graphique R
Ajouter et modifier une légende avec R de base
Ajoutez une légende aveclegend() :
Notez que pt.cex et title.cex ne fonctionnent pas toujours comme prévu. Contournements :
- Changer la police du titre/texte via
text.fontdanslegend():
- Tracer la légende deux fois avec des valeurs
cexdifférentes
Astuce : pour les couleurs disponibles en R, voyez ce PDF très utile.
Ajouter et modifier la légende et les libellés avec ggplot2
Ajouter une légende par défaut dans ggplot2 est simple :
Puis personnalisez l’apparence de la légende.
Deux approches pour changer titre et libellés dans ggplot2 :
- Modifier les « scales » pour définir titres et libellés
colour ou shape, changez noms et libellés via scale_color_discrete() et scale_shape_discrete() :
Le tracé peut sembler compressé dans l’onglet Plot de DataCamp Light, ce ne serait pas le cas dans RStudio.
Vous pouvez créer deux légendes si vous utilisez shape dans geom_point() et dans les labels.
Pour placer la légende en bas, définissez legend.position à "bottom". legend.justification permet de positionner la légende dans le tracé.
Astuce : découvrez les différentes scales et leurs options ici.
- Modifier le data frame pour mettre les bons niveaux de facteur
Vous pourrez ensuite utiliser ces nouveaux libellés dans ggplot2 sans lignes de code supplémentaires pour renommer dans le tracé.
Astuce : pour une cheat sheet complète ggplot2, rendez‑vous ici.
6. Comment afficher une grille sur un graphique R
Avec R de base
Pour certains usages, il est utile d’ajouter une grille. Utilisezgrid() :
Avec ggplot2
Le bloc ci‑dessous montre comment forcer l’affichage d’une grille avec ggplot2. Les données chol sont déjà chargées et préparées.
Si vous voulez voir les premières lignes, affichez‑les dans la console R du bloc DataCamp Light :
Astuce : pour masquer la grille mineure, passez element_blank() à panel.grid.minor.
Pour colorer le fond, ajoutez panel.background = element_rect(fill = "navy"). Exemple ci‑dessous (données chol déjà chargées) :
7. Comment tracer un graphique avec un PNG en arrière‑plan
Vous pouvez facilement superposer un graphique sur une image .png grâce au package png. Installez‑le si nécessaire, chargez‑le avec library() et lancez‑vous.
Commencez par charger l’image avec readPNG() en précisant le chemin du fichier.
Astuce : affichez et changez votre répertoire de travail avec les commandes ci‑dessous.
Si l’image est dans votre répertoire de travail, readPNG("picture.png") suffit.
Préparez ensuite la zone de tracé et utilisez par() pour récupérer les paramètres graphiques nécessaires à rasterImage(). L’argument usr définit les bornes utilisateur (ici 1, 3, 2, 4).
Ajoutez une grille puis des lignes :
install.packages("png")
library(png)
image <- readPNG("<path to your picture>")
getwd()
setwd("<path to a folder>")
plot(1:2, type='n', main="Plotting Over an Image", xlab="x", ylab="y")
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
grid()
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")
Avec le logo DataCamp, vous obtiendrez par exemple :
library(png)
image <- readPNG("datacamp.png")
plot(1:2, type="n", main="Plotting Over an Image", xlab="x", ylab="y", asp=1)
lim <- par()
rasterImage(image, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4])
lines(c(1, 1.2, 1.4, 1.6, 1.8, 2.0), c(1.5, 1.3, 1.7, 1.6, 1.7, 1.0), type="b", lwd=5, col="red")

Notez que readPNG() attend un fichier .png. Pour des .jpg, utilisez la librairie jpeg.
Ici, l’image est d’abord téléchargée puis utilisée, mais vous pouvez tout aussi bien lire un fichier local avec readJPEG().
Exemple issu de la R Graph Gallery, une excellente source d’inspiration avec code et rendu au même endroit.
8. Comment ajuster la taille des points
Avec R de base
Pour modifier la taille des points, utilisez simplement l’argumentcex :
symbols() :
Ici, les rayons des cercles proviennent de df$x3, et inches contrôle la taille : si positif, la plus grande dimension du symbole prend cette taille en pouces.
Avec ggplot2
Dans un scatterplot ggplot2, ajustez la taille avec size. Les données chol sont chargées :
Vous pouvez aussi passer size à geom_point() :
ggplot(chol,
aes(x=chol$WEIGHT, y=chol$HEIGHT)) +
geom_point(size = 2)
Le résultat est identique : testez en remplaçant la dernière ligne du bloc par ce code.
9. Comment ajuster une courbe lissée à vos données
La fonction loess() est souvent la solution favorite : elle « ajuste une surface polynomiale déterminée par un ou plusieurs prédicteurs numériques, via un lissage local ».
En bref, vous corrélez y et x dans loess() (1 à 4 prédicteurs), puis vous tracez x et y et ajoutez la courbe prédite :
10. Comment ajouter des barres d’erreur
Tracer des barres d’erreur avec R de base
Mauvaise nouvelle : R ne trace pas directement des barres d’erreur. Bonne nouvelle : vous pouvez les construire sans package additionnel !
Commencez par définir cette fonction qui calcule des statistiques de synthèse :
summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
conf.interval=.95, .drop=TRUE) {
library(plyr)
# New version of length which can handle NA's: if na.rm==T, don't count them
length2 <- function (x, na.rm=FALSE) {
if (na.rm) sum(!is.na(x))
else length(x)
}
# This does the summary. For each group's data frame, return a vector with
# N, mean, and sd
datac <- ddply(data, groupvars, .drop=.drop,
.fun = function(xx, col) {
c(N = length2(xx[[col]], na.rm=na.rm),
mean = mean (xx[[col]], na.rm=na.rm),
sd = sd (xx[[col]], na.rm=na.rm)
)
},
measurevar
)
# Rename the "mean" column
datac <- rename(datac, c("mean" = measurevar))
datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
# Confidence interval multiplier for standard error
# Calculate t-statistic for confidence interval:
# e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
ciMult <- qt(conf.interval/2 + .5, datac$N-1)
datac$ci <- datac$se * ciMult
return(datac)
}
Cette définition provient de cette source et est disponible via la librairie Rmisc.
Calculez ensuite les statistiques sur chol (déjà chargé), puis utilisez‑les pour tracer votre graphique.
Inspectez les données avant de commencer !
Pour la liste complète des arguments de arrows(), voir ici.
Tracer des barres d’erreur avec ggplot2
Barres d’erreur = erreur standard de la moyenne
Commencez par résumer vos données avec summarySE() (package Rmisc) ou la fonction ci‑dessus. Utilisez ensuite ce data frame pour tracer et dessiner les barres d’erreur (par exemple l’erreur standard).