3.3 Diagramme en violon

Le graphique 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).

Graphe en violon de la distribution de la taille en fonction des groupes taxonomiques dans un échantillon de zooplancton. Les couleurs pour les axes servent à mettre des éléments en évidence. En pratique, les axes seront noirs.

Figure 3.10: Graphe en violon de la distribution de la taille en fonction des groupes taxonomiques dans un échantillon de zooplancton. Les couleurs pour les axes servent à mettre des éléments en évidence. En pratique, les axes seront noirs.

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 filter(). 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 <- filter(zooplankton,
  class %in% c("Annélide", "Calanoïde", "Cyclopoïde", "Décapode"))
# Réalisation du graphique
chart(data = zooplankton_sub, size ~ class) +
  geom_violin()
Distribution des tailles pour 4 groupes taxonomiques de zooplancton.

Figure 3.11: Distribution des tailles pour 4 groupes taxonomiques de zooplancton.

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 de densité 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.10.

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.

chart(data = zooplankton, size ~ class) +
  geom_violin() 
Distribution de tailles des 17 classes d'organismes planctoniques (diagramme en violon).

Figure 3.12: Distribution de tailles des 17 classes d’organismes planctoniques (diagramme en violon).

La fonction coord_flip() permute les axes. Ainsi les libellés ne se chevauchent plus sur l’axe des ordonnées.

chart(data = zooplankton, size ~ class) +
  geom_violin() +
  coord_flip()
Distribution de tailles des 17 classes d'organismes planctoniques (diagramme en violon avec l'ajout de la fonction `coord_flip()`).

Figure 3.13: Distribution de tailles des 17 classes d’organismes planctoniques (diagramme en violon avec l’ajout de la fonction coord_flip()).

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) :

chart(data = zooplankton, class ~ size) +
  geom_violin(orientation = "y")
Distribution de tailles des 17 classes d'organismes planctoniques (diagramme en violon avec `orientation = "y"`).

Figure 3.14: Distribution de tailles des 17 classes d’organismes planctoniques (diagramme en violon avec orientation = "y").

Le package {ggridges} propose 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) !

chart(data = zooplankton, class ~ size) +
  ggridges::geom_density_ridges()
Distribution des tailles des 17 classes d'organismes planctoniques (sous forme de graphique en lignes de crêtes).

Figure 3.15: Distribution des tailles des 17 classes d’organismes planctoniques (sous forme de graphique en lignes de crêtes).