ggplot2 est une nouvelle grammaire pour créer des graphiques avec R. Mais sa syntaxe, très bien pensée, change complètement nos habitudes. Et en plus des avantages techniques le rendu est très actuel, tout à fait "material design" ! Je présente ici quelques exemples de graphiques pour vous aider à créer les vôtres.
Avant de rentrer dans le vif du sujet les deux sites indispensables :
- Le site officiel le plus complet
- STHTA un site en français très clair et bien présenté.
Et, pour vous simplifier la vie il existe un méga-package tidyverse qui vous charge d’un coup ggplot2, dplyr & autres packages (purr...) créés & maintenus par Hadley Wickham & son équipe.
Le principe
Pour faire un graphique plus ou moins complexe, avec ggplot2 on va superposer des calques. Pour l’exemple qui suit, un nuage de point avec sa droite de régression on va dessiner :
- Un fond (graphique vide, juste les axes). En même temps on définit les variables.
- Le nuage de point
- La droite de régression
- Les axes, titres etc. (J’ai volontairement mis du gras etc. pour l’exemple mais le résultat n’ai pas très esthétique) La légende (il n’ y en a pas dans mon exemple)
- Et pourquoi pas un autre graphique superposé
Ouf ! L’avantage est que chaque calque est une instruction, réutilisable. Et la syntaxe est claire.
Nuage de points
Le graphique le plus simple dans son concept. Prenons deux variables poids & age issus du data-frame patients & traçons le nuage de point avec la droite de régression & bien sûr son intervalle de confiance. Il y a d’autre façons de procéder possibles, plus concises.
- patients %>% # Le data-frame utilisé
- ggplot() +
- aes(x = age, y = poids ) +# Fond vide, on définit les variables
- geom_point() + # Un nuage de point
- x = "Âge des patients",
- y = "Poids (Kg)" ) + # Titres des axes
- theme_light() + # Thème simple, idéal pour publication
- theme(plot.title = element_text(size=16, face="bold"),
- axis.title.x = element_text(size=12, face="bold"),
- axis.title.y = element_text(size=12, face="bold"),
- axis.text.x = element_text(size=12, face="bold"),
- axis.text.y = element_blank() # Pas de titre pour l'axe des y
- legend.position = "none" # Pas de légende ) # Les axes, titres etc.
Essayez en supprimant des lignes pour voir & comprendre le principe des calques. Seules les trois premières sont indispensables (vous obtiendrez alors un graphique vide).