hist(dat$FM1, main = "Longueur des fémurs",
xlab = "Longueur", ylab = "Effectifs")

R permet de créer des graphiques d’excellente qualité avec des possibilités de personnalisation infinies.
Les fonctions R de base offrent déjà de très bonnes possibilités graphiques, mais quelques packages additionnels permettent de réaliser des graphiques avec une meilleure esthétique par défaut, ou en facilitant certaines opérations. On citera notamment les packages {lattice}
(Sarkar, 2008) et {ggplot2}
(Wickham, 2009).
En R-base, un histogramme s’obtient avec la fonction hist()
.
hist(dat$FM1, main = "Longueur des fémurs",
xlab = "Longueur", ylab = "Effectifs")
Comme signalé précédemment, en présence de données structurées en groupes d’individus très différents, les représentations graphiques globales ont peu d’intérêt. Effectuer une représentation séparée pour chaque groupe est plus pertinent.
Il est parfaitement possible de réaliser de tels graphiques avec les fonctions R de base, mais il faut alors scripter pour gérer manuellement la séparation en groupes (par exemple avec split()
) et la séparation de la fenêtre graphique en plusieurs panneaux.
Pour avoir accès à de telles représentations avec moins d’effort, on pourra par exemple utiliser le package {lattice}
, spécialisé dans les graphiques conditionnels. En revanche, il possède sa syntaxe propre, différente des fonctions de base.
library(lattice) # charge le package
histogram(~ FM1 | Sexe, data = dat)
{lattice}
).
histogram(~ FM1 | Sexe * Site, data = dat)
{lattice}
).
La fonction density()
permet de réaliser des kernel density estimations.
<- density(dat$FM1, na.rm = TRUE)
kde plot(kde, main = "Longueur du fémur")
rug(dat$FM1) # ajoute les valeurs individuelles
Pour prendre en compte des groupes d’individus, on peut là encore utiliser le package {lattice}
et sa fonction densityplot()
:
densityplot(~ FM1 | Sexe, data = dat)
{lattice}
).
Les boxplots (Tukey, 1977) sont une manière standard de représenter la distribution d’une variable continue.
boxplot(dat$FM1, main = "Longueur du fémur")
L’aide de nombreuses fonctions R (comme celle de boxplot()
) montre qu’on peut leur fournir en argument une formula. Une formule, en R, est une construction syntaxique du type Y ~ X
, et signifie génériquement “Y
en fonction de X
”.
Remarques :
Y ~ X1 + X2
veut dire “Y
en fonction de X1
et X2
” ;Y ~ X1 * X2
veut dire “Y
en fonction de l’interaction de X1
et X2
” (qui sont alors généralement des variables qualitatives, i.e. des facteurs).On utilise généralement des boxplots pour représenter des différences entre plusieurs groupes :
boxplot(FM1 ~ Sexe, main = "FM1", data = dat)
boxplot(FM1 ~ Sexe * Site, main = "FM1", data = dat)
L’oeil humain étant peu sensible aux différences de secteurs angulaires, on évitera autant que possible les diagrammes en secteurs (“camemberts”), et on leur préfèrera des diagrammes en barres.
plot(dat$Orientation_corps, main = "Orientation")
L’argument col
permet de modifier les couleurs dans toutes les fonctions graphiques de base (consulter leur documentation pour s’en assurer). On peut ceci dit donner plusieurs types d’information à cet argument col
pour indiquer les couleurs à utiliser sur le graphique.
plot(dat$Orientation_corps, main = "Orientation", col = 1:4)
Pourquoi et comment les nombres fournis à l’argument col
se traduisent-ils en couleurs ? Par défaut, R débute toujours sa session avec une palette de 8 couleurs, dont on peut obtenir la liste avec :
palette()
[1] "black" "#DF536B" "#61D04F" "#2297E6" "#28E2E5" "#CD0BBC" "#F5C710"
[8] "gray62"
Les couleurs sont numérotées dans leur ordre d’apparition dans la palette : on peut spécifier une couleur ou bien par son nom (p. ex., col = "black"
), ou bien par son numéro dans la palette de couleurs actuelle (p. ex., col = 1
). Il est bien sûr possible d’augmenter le nombre de couleurs dans la palette actuelle, et/ou de les réordonner (utile pour créer des dégradés). Certaines palettes offrent des dégradés par défaut (rainbow
, terrain.colors
, etc.).
Pour redéfinir la palette avec des couleurs choisies arbitrairement :
palette(c("purple", "salmon", "goldenrod", "cyan"))
Pour utiliser une palette prédéfinie :
palette(rainbow(10)) # 10 couleurs en dégradé
Pour revenir à la palette par défaut :
palette("default")
Plus d’informations dans des documents en ligne :
La fonction par()
permet de modifier de nombreux paramètres graphiques (cf. sa page de documentation), qui s’appliqueront généralement à la prochaine fenêtre graphique créée. Ces paramètres doivent donc être définis et exécutés avant de créer le graphique avec plot()
, ou boxplot()
, etc.
Pour augmenter la taille de tous les éléments :
par(cex = 1.2) # augmentation de 20 %
Pour diviser la fenêtre en une grille de 4 panneaux :
par(mfrow = c(2, 2))
Pour modifier les marges du graphique :
par(mar = c(1, 1, 1, 1)) # réduction des marges
La fonction générique plot()
affiche un nuage de points si on lui fournit en argument deux variables continues.
plot(FM1 ~ RM1, data = dat, pch = 1,
main = "Un nuage de points")
L’argument pch
permet de spécifier le type de figuré à afficher, à partir de la liste suivante.
Pour représenter des groupes sur le nuage, on peut là encore utiliser le package {lattice}
:
xyplot(FM1 ~ RM1, groups = Sexe, auto.key = TRUE, data = dat)
{lattice}
).
Remarques :
L’argument auto.key = TRUE
permet d’afficher automatiquement une légende, déterminée à partir du facteur spécifié avec Groups
. On peut personnaliser cette légende si son rendu automatique ne convient pas (cf. l’aide).
On peut aussi demander un graphique séparé pour les hommes et les femmes au lieu de les superposer sur le même graphiques. La même échelle est alors conservée pour les deux graphiques afin de faciliter l’interprétation :
xyplot(FM1 ~ RM1 | Sexe, auto.key = TRUE, data = dat)
{lattice}
).
Toutefois, le code suivant permet d’obtenir le même genre de graphique à l’aide de la fonction de base plot()
:
## Tracé du nuage de points :
plot(FM1 ~ RM1, data = dat, pch = 16,
col = Sexe, main = "Nuage de points")
## Ajout manuel de la légende :
legend("topleft", pch = 16, col = 1:2,
legend = levels(dat$Sexe))
Dans cette version, faire très attention à la spécification manuelle de la légende (ne pas inverser les couleurs ou les étiquettes…).
La fonction plot()
ouvre systématiquement une nouvelle fenêtre et y trace un graphique. D’autres fonctions permettent d’ajouter de nouveaux éléments sur la fenêtre graphique active :
abline()
permet d’ajouter des droites d’équation \(y = a + bx\) ou \(x = c\) sur le graphique ;points()
ajoute des points de coordonnées spécifiées sur le graphique en cours ;text()
ajoute du texte (utile pour ajouter le nom des individus, par exemple).plot(FM1 ~ RM1, data = dat, pch = 16)
text(x = dat$RM1, y = dat$FM1, cex = 0.7,
labels = rownames(dat), pos = 3)
R peut exporter vos graphiques en de nombreux formats, vectorisés ou non (.eps, .gif, .jpeg, .pdf, .png, .tiff, ainsi que .emf dans le cas d’une utilisation sous Windows).
Utilisateurs de RStudio ou d(autres EDI : l’export est généralement possible “à la souris” grâce à un bouton.
En mode script : utiliser les fonctions jpeg()
, png()
, …, avant de créer le graphique, puis terminez par dev.off()
. Exemple :
png("./figures/ma_super_boxplot.png", width = 500)
boxplot(dat$FM1)
dev.off()
R propose, à travers le package {plotly}
, un système de graphiques interactifs hautement personnalisables, qui s’affichent usuellement dans une fenêtre de navigateur internet. Voir le site web de {plotly}
pour découvrir ses immenses possibilités graphiques.
library(plotly)
plot_ly(data = dat, x = ~FM1, y = ~RM1,
split = ~Site, color = ~Orientation_corps,
type = "scatter", mode = "markers",
text = rownames(dat))
Le package {rgl}
propose des graphiques 3D dynamiques :
library(rgl)
plot3d(x = dat$FM1, y = dat$RM1, z = dat$RM6,
type = "s", col = as.numeric(dat$Sexe))
L’argument type = "s"
indique que l’on souhaite que les points soient représentés par des sphères, dont on peut changer le rayon avec l’argument radius
.
Une alternative est le package {scatterplot3d}
, qui propose quant à lui des graphiques 3D statiques avec un effet de profondeur.
library(scatterplot3d)
scatterplot3d(x = dat$FM1, y = dat$TM6, z = dat$RM1,
box = FALSE, type = "h", pch = 16,
highlight.3d = TRUE, lty.hplot = 2)