library(ggplot2)
library(palmerpenguins)
levels(penguins$species) <- paste0(levels(penguins$species)," ",
levels(penguins$species)," ",levels(penguins$species)," ",levels(penguins$species))
Vous avez un beau graphique mmais les labels (souvent sur l’axe des X) sont trop longs, se superposent…
Les graphiques qui suivent sont volontairement très simple afin d’avoir le code le plus court possible.
J’utilise ici la base de données penguins
où j’ai juste créer des labels immondes; très très longs.
ggplot(penguins, aes(x = species, y = body_mass_g)) +
geom_boxplot() +
theme(
axis.text.x = element_text(size = 12)
)
Nous allons présenter trois solutions :
- Réduire la taille des caractères. Simple, efficace mais a ses limites !
- Faire pivoter les labels. Plus élégant mais pas toujours possible.
- Mettre le texte sur deux lignes. Lourd mais parfois nécessaire.
- Décaler un label sur deux
Mais n’oubliez pas qu’un graphique doit tout d’abord être simple & rapide à lire. La meilleure solution est toujours de réduire la longueur des labels.
On trouve le bon angle par tâtonnement. Ne pas oublier d’ajuster le centrage (hjust
) pour que le label soit bien positionné.
ggplot(penguins, aes(x = species, y = body_mass_g)) +
geom_boxplot() +
theme(
axis.text.x = element_text(size = 12, angle = 20, hjust = 1)
)
Certes souvent efficace mais peu lisible. À combiner le plus souvent avec un peu d’angle.
library(scales) # Pour la fonction label_wrap
ggplot(penguins, aes(x = species, y = body_mass_g)) +
geom_boxplot() +
theme(
axis.text.x = element_text(size = 12)
+
) scale_x_discrete(labels = label_wrap(20)) # On choisit la longueur des lignes
Solution souvent élégante, facile à mettre en place depuis la nouvelle version de ggplot2.
ggplot(penguins, aes(x = species, y = body_mass_g)) +
geom_boxplot() +
theme(
axis.text.x = element_text(size = 12)
+
) scale_x_discrete(guide = guide_axis(n.dodge = 2))
- Pour les variables numériques il suffit souvent de modifier les labels : afficher de 20en 20 est parfois plus clair que de 10 en 10.
Pivoter
Une solution radicale est de pivoter tout le graphique quitte à l’utiliser en combinaison avec les propositions précédentes.
ggplot(penguins, aes(x = species, y = body_mass_g)) +
geom_boxplot() +
theme(
axis.text.x = element_text(size = 12)
+
) coord_flip()
Un simple mail à docphilmstat@gmail.com ou un message sur Twitter & je vous répondrai dans les plus brefs délais.