3.3 Diagramme en violon
Le graphique en violon ou diagramme en violon est constitué de deux graphiques de densité en miroir. Le résultat fait penser un peu à un violon pour une distribution bimodale. Cette représentation est visuellement très convaincante lorsque la variable étudiée contient suffisamment d’observations pour permettre de déterminer précisément sa distribution (plusieurs dizaines ou centaines d’individus mesurés).
Les instructions en R pour produire un diagramme en violon à l’aide de la fonction chart()
sont présentées ci-dessous. Comme le jeu de données zooplankton
contient 17 classes différentes, nous décidons ici d’en extraire un sous-tableau ne contenant que les quatre classes de crustacés copépodes à l’aide d’une fonction sfilter()
. Pour l’instant, retenez simplement que ce genre de remaniement de tableau est possible. Nous étudierons ces fonctions plus en détail dans les modules 5 et 6. Notre tableau réduit à quatre classes se nomme zooplankton_sub
et c’est à partir de lui que nous réalisons notre graphique.
# Importation du jeu de données
zooplankton <- read("zooplankton", package = "data.io", lang = "FR")
# Réduction du jeu de données
zooplankton_sub <- sfilter(zooplankton,
class %in% c("Annélide", "Calanoïde", "Cyclopoïde", "Décapode"))
# Réalisation du graphique
chart(data = zooplankton_sub, size ~ class) +
geom_violin()
Ici, la formule fournie à chart()
indique la variable numérique à représenter par un graphe de densité dans le terme de gauche, et la variable facteur qui découpe l’échantillon en classes à droite : YNUM (size) ~ XFACT (class)
. Pour réaliser un graphique en violon, vous devez ensuite ajouter la fonction geom_violin()
. Vous pouvez aussi utiliser %fill=%
pour colorer vos différents graphes en fonction de la variable facteur également, comme dans la Fig. 3.9.
Pièges et astuces
Parfois, les labels sur l’axe des abscisses d’un diagramme en violon apparaissent trop rapprochés et se chevauchent, comme ci-dessous.
La fonction coord_flip()
permute les axes. Ainsi les libellés ne se chevauchent plus sur l’axe des ordonnées.
Depuis la SciViews Box 2020, la version du package {ggplot2} propose un argument orientation=
qui est plus pratique pour inverser les axes directement (à utiliser préférentiellement, mais attention à bien penser d’inverser les variables dans la formule également class ~ size
au lieu de size ~ class
) :
Le package {ggridges} offre une seconde solution basée sur le principe de graphique de densité avec la fonction geom_density_ridges()
qui crée un graphique en lignes de crêtes. Attention : remarquez que la notation est ici inverse du diagramme en violon vertical, soit XFACT (class) ~ YNUM (size)
!