Diagrammes en barres, courbes, nuages de points et boîtes à moustaches interactifs en R avec ggiraph
Apprenez une seule fois le motif interactif en une couche, puis appliquez-le à n’importe quel type de graphique
Le même motif ggiraph en une seule couche rend interactif n’importe quel graphique courant en R — remplacez un geom par son jumeau geom_*_interactive(), ajoutez tooltip/data_id et enveloppez le graphique dans girafe(). Cette leçon l’applique aux diagrammes en barres, aux courbes, aux nuages de points et aux boîtes à moustaches, pour que vous appreniez le motif une seule fois et le réutilisiez partout.
Date de publication
9 juillet 2026
Modifié
9 juillet 2026
AstucePoints clés
Un seul motif rend interactif chaque graphique : remplacez geom_*() par geom_*_interactive(), mappez tooltip et data_id, enveloppez dans girafe().
Cela fonctionne de la même façon pour les barres (geom_col_interactive()), les courbes (geom_line_interactive()), les points (geom_point_interactive()) et les boîtes avec jitter (geom_jitter_interactive()).
ggiraph est gratuit et open source — il ne fait qu’ajouter de l’interactivité, en conservant l’apparence de ggplot2.
Apprenez le motif une seule fois, appliquez-le à n’importe quel geom — aucune nouvelle grammaire à mémoriser selon le type de graphique.
Chaque graphique ci-dessous est statique (rapide, accessible) ; un widget interactif montre le bénéfice, avec un tableau de données en solution de repli pour les lecteurs d’écran.
Introduction
Vous dessinez déjà des diagrammes en barres, des courbes, des nuages de points et des boîtes à moustaches avec ggplot2. Rendre l’un d’eux interactif avec ggiraph est la même petite modification à chaque fois — il n’y a pas d’API distincte à apprendre par type de graphique. Remplacez un geom par son jumeau interactif, ajoutez un tooltip (et généralement un data_id pour la mise en évidence au survol), puis confiez le graphique à girafe().
Cette leçon en démontre l’ampleur. Pour chacun des quatre graphiques de base, vous obtenez la figure statique et la modification d’une seule ligne qui la rend interactive. Puis, une seule fois, vous voyez un véritable widget interactif — car ce qui compte est le motif, pas quatre widgets lourds sur une même page.
Le motif est le même pour chaque geom
ggiraph reflète chaque geom de ggplot2 par une version interactive :
Graphique
geom statique
Jumeau interactif
Barres
geom_col()
geom_col_interactive()
Courbe
geom_line()
geom_line_interactive()
Nuage de points
geom_point()
geom_point_interactive()
Boîte (points)
geom_jitter()
geom_jitter_interactive()
Chaque geom interactif accepte deux attributs esthétiques supplémentaires à l’intérieur de aes() : tooltip (le texte affiché au survol) et data_id (l’identifiant servant à mettre en évidence ce que vous survolez). Construisez le graphique comme d’habitude, utilisez le geom interactif, puis enveloppez le tout dans girafe() avec une taille explicite. Voilà toute la recette — répétée ci-dessous pour quatre graphiques différents.
Diagramme en barres — geom_col_interactive()
Commençons par un diagramme en barres groupées. Nous résumons les données intégrées ToothGrowth avec R de base (aggregate()) pour obtenir la longueur moyenne des dents selon la dose de vitamine C et le supp, puis nous dessinons des barres juxtaposées colorées par complément avec une palette viridis adaptée au daltonisme. Voici la figure statique que les lecteurs voient en premier.
library(ggplot2)tg <-aggregate(len ~ dose + supp, data = ToothGrowth, FUN = mean)tg$dose <-factor(tg$dose)ggplot(tg, aes(x = dose, y = len, fill = supp)) +geom_col(position ="dodge") +scale_fill_viridis_d(end =0.7) +labs(x ="Vitamin C dose (mg/day)", y ="Mean tooth length",fill ="Supplement", title ="Tooth growth by dose and supplement") +theme_minimal()
Pour le rendre interactif, remplacez geom_col() par geom_col_interactive() et mappez un tooltip (et un data_id pour que le survol d’une barre la mette en évidence). Rien d’autre ne change :
Enveloppez cela dans girafe() (montré en direct plus bas) et chaque barre indique sa valeur au survol.
Graphique en courbes — geom_line_interactive()
Même idée, geom différent. Les données intégrées Orange suivent la circumference du tronc en fonction de l’age pour cinq orangers. Colorez une courbe par arbre avec viridis. D’abord la version statique :
library(ggplot2)ggplot(Orange, aes(x = age, y = circumference, color = Tree, group = Tree)) +geom_line(linewidth =1) +geom_point(size =1.6) +scale_color_viridis_d() +labs(x ="Age (days)", y ="Trunk circumference (mm)", color ="Tree") +theme_minimal()
Remplacez geom_line() par geom_line_interactive() et donnez à chaque courbe un tooltip et un data_id. Désormais, survoler n’importe quel endroit d’une courbe met en évidence toute la trajectoire de cet arbre :
library(ggplot2)library(ggiraph)ggplot(Orange, aes(x = age, y = circumference, color = Tree, group = Tree)) +geom_line_interactive(aes(tooltip =paste("Tree", Tree), data_id = Tree),linewidth =1 ) +scale_color_viridis_d() +theme_minimal()
Nuage de points — geom_point_interactive()
Pour un nuage de points, l’attribut esthétique interactif le plus payant est une étiquette par point. Avec mtcars, représentez le poids de la voiture (wt) en fonction de l’efficacité énergétique (mpg) sous forme de points azur de la marque :
library(ggplot2)ggplot(mtcars, aes(x = wt, y = mpg)) +geom_point(color ="#3a86d4", size =3) +labs(x ="Weight (1000 lbs)", y ="Miles per gallon") +theme_minimal()
Remplacez geom_point() par geom_point_interactive() et mappez les noms de lignes (les noms des voitures) sur tooltip et data_id, afin que le survol d’un point vous indique de quelle voiture il s’agit :
C’est le graphique que nous rendons en direct ci-dessous — la même modification en une couche, réellement en fonctionnement.
Boîte à moustaches — geom_jitter_interactive()
Une boîte à moustaches résume une distribution ; les points individuels sont mieux portés par une couche de jitter. Dessinez la longueur des dents par dose avec geom_boxplot() plus geom_jitter(), les boîtes colorées par dose :
library(ggplot2)tg <- ToothGrowthtg$dose <-factor(tg$dose)ggplot(tg, aes(x = dose, y = len, fill = dose)) +geom_boxplot(outlier.shape =NA, alpha =0.7) +geom_jitter(width =0.15, alpha =0.6) +scale_fill_viridis_d(end =0.8) +labs(x ="Vitamin C dose (mg/day)", y ="Tooth length", fill ="Dose") +theme_minimal()
Gardez les boîtes statiques et rendez les points interactifs : remplacez geom_jitter() par geom_jitter_interactive() avec un tooltip (la valeur exacte) et un data_id (la ligne). Définissez outlier.shape = NA pour que les points aberrants propres à la boîte ne se superposent pas au jitter :
Voici le nuage de points ci-dessus, réellement interactif. Nous rendons un seul widget girafe() sur la page (un seul suffit à démontrer le motif, et cela garde la page rapide sur mobile). Il est dimensionné explicitement avec width_svg/height_svg, de sorte qu’il réserve son espace et ne décale jamais la mise en page.
Survolez n’importe quel point pour lire le nom de la voiture ; le point sur lequel vous vous trouvez s’illumine.
C’est tout l’intérêt de cette leçon : exactement la même modification que vous feriez sur le diagramme en barres, la courbe ou la boîte à moustaches, appliquée ici au nuage de points. Choisissez le geom qu’utilise votre graphique, ajoutez son jumeau _interactive(), enveloppez dans girafe().
NoteAfficher les données sous-jacentes (solution de repli pour les lecteurs d’écran)
Un SVG interactif est opaque pour les technologies d’assistance ; voici donc les données derrière le widget — le poids et l’efficacité énergétique de chaque voiture.
library(knitr)tbl <-data.frame(Car =rownames(mtcars),`Weight (1000 lbs)`= mtcars$wt,`Miles per gallon`= mtcars$mpg,check.names =FALSE)kable(tbl, caption ="Weight and fuel efficiency of each car (mtcars).")
Weight and fuel efficiency of each car (mtcars).
Car
Weight (1000 lbs)
Miles per gallon
Mazda RX4
2.620
21.0
Mazda RX4 Wag
2.875
21.0
Datsun 710
2.320
22.8
Hornet 4 Drive
3.215
21.4
Hornet Sportabout
3.440
18.7
Valiant
3.460
18.1
Duster 360
3.570
14.3
Merc 240D
3.190
24.4
Merc 230
3.150
22.8
Merc 280
3.440
19.2
Merc 280C
3.440
17.8
Merc 450SE
4.070
16.4
Merc 450SL
3.730
17.3
Merc 450SLC
3.780
15.2
Cadillac Fleetwood
5.250
10.4
Lincoln Continental
5.424
10.4
Chrysler Imperial
5.345
14.7
Fiat 128
2.200
32.4
Honda Civic
1.615
30.4
Toyota Corolla
1.835
33.9
Toyota Corona
2.465
21.5
Dodge Challenger
3.520
15.5
AMC Javelin
3.435
15.2
Camaro Z28
3.840
13.3
Pontiac Firebird
3.845
19.2
Fiat X1-9
1.935
27.3
Porsche 914-2
2.140
26.0
Lotus Europa
1.513
30.4
Ford Pantera L
3.170
15.8
Ferrari Dino
2.770
19.7
Maserati Bora
3.570
15.0
Volvo 142E
2.780
21.4
🟢 Avec un agent IA
Demandez à Prova« comment ajouter une infobulle au survol à mon propre diagramme en barres avec ggiraph ? » — elle répond avec du code que vous pouvez exécuter sur votre propre figure, donc la correction est reproductible. The runtime is the judge.Demander à Prova →
Problèmes fréquents
Rien ne s’affiche au survol.tooltip et data_id doivent être définis à l’intérieur de aes(), et non comme des arguments fixes. geom_point_interactive(aes(tooltip = mpg, data_id = id)) fonctionne ; geom_point_interactive(tooltip = mpg) ne fait rien silencieusement.
Le chunk s’affiche vide.girafe() renvoie un objet widget — il doit être la dernière expression du chunk (ou être imprimé explicitement). L’affecter à une variable puis s’arrêter n’affiche rien.
Les points s’empilent sur la boîte à moustaches.geom_boxplot() dessine ses propres points aberrants, si bien qu’une couche de jitter ajoute un second jeu par-dessus. Définissez outlier.shape = NA dans geom_boxplot() pour que les points de jitter soient les seuls affichés.
Questions fréquentes
NoteLe même motif ggiraph fonctionne-t-il pour chaque type de graphique ?
Oui. ggiraph fournit un jumeau interactif pour chaque geom de ggplot2 — geom_col_interactive(), geom_line_interactive(), geom_point_interactive(), geom_jitter_interactive(), et d’autres encore. Vous remplacez le geom, mappez tooltip et data_id à l’intérieur de aes(), et enveloppez le graphique dans girafe(). La recette est identique pour les diagrammes en barres, les courbes, les nuages de points et les boîtes à moustaches.
NoteComment rendre un diagramme en barres interactif en R ?
Remplacez geom_col() par geom_col_interactive() et mappez un tooltip (et généralement data_id) à l’intérieur de aes(), par exemple geom_col_interactive(aes(tooltip = value, data_id = group)). Passez ensuite le graphique à girafe(ggobj = ...) pour produire un SVG interactif.
NoteQuelle est la différence entre tooltip et data_id ?
tooltip est le texte affiché lorsque vous survolez un élément. data_id est un identifiant servant à mettre en évidence les éléments liés — survoler un point (ou chaque barre/courbe partageant cet identifiant) applique le style de survol. Vous définissez généralement les deux ; c’est data_id qui pilote la mise en évidence et, dans Shiny, la sélection.
NotePourquoi ne rendre qu’un seul widget interactif au lieu d’un par graphique ?
Chaque widget girafe() embarque un SVG interactif et un peu de JavaScript. En rendre un par graphique ralentirait la page, surtout sur mobile, sans valeur pédagogique supplémentaire — le motif est le même. Nous gardons donc les quatre graphiques statiques (rapides, indexables, accessibles) et montrons un seul widget interactif comme bénéfice.
Noteggiraph est-il gratuit ?
Oui. ggiraph est un logiciel libre et open source. Il transforme les graphiques ggplot2 en SVG interactifs, sans coût ni obligation de compte.
Testez vos connaissances
ImportantExercice : rendre le graphique en courbes interactif
Reprenez le graphique en courbes Orange ci-dessus et faites en sorte que la courbe de chaque arbre indique son numéro d’arbre au survol, en mettant en évidence toute la courbe. Quelle unique modification faites-vous, et comment le générez-vous ?
AstuceIndice
Remplacez geom_line() par geom_line_interactive() et mappez tooltip et data_id sur Tree à l’intérieur de aes(). Enveloppez ensuite le graphique terminé dans girafe(ggobj = p, width_svg = 7, height_svg = 4.5).
Survoler n’importe quelle courbe affiche désormais son numéro d’arbre et met en évidence toute la trajectoire, car data_id = Tree regroupe chaque segment d’un arbre sous un même identifiant.
NoteVérification rapide : quel geom rend un diagramme en barres interactif ?
Pour ajouter des infobulles au survol à un diagramme en barres construit avec geom_col(), vers quel geom passez-vous ?
Afficher la réponse — geom_col_interactive(). Chaque geom de ggplot2 possède un jumeau interactif nommé geom_<name>_interactive() ; vous mappez tooltip et data_id à l’intérieur de aes() et enveloppez le graphique dans girafe().
Conclusion
L’interactivité dans ggiraph est un seul motif, pas une API par graphique. Que vous dessiniez des barres, des courbes, des points, ou des boîtes, vous remplacez le geom par son jumeau geom_*_interactive(), mappez tooltip et data_id, et enveloppez le résultat dans girafe(). Apprenez-le une seule fois sur n’importe quel graphique et vous pourrez tous les rendre interactifs.
Cette leçon est reproductible : chaque figure est exécutée au moment de la génération (si elle s’affiche, le code fonctionne). Il n’y a pas de bac à sable dans le navigateur ici — copiez n’importe quel bloc et exécutez-le pour reproduire ces graphiques. The runtime is the judge.
@online{2026,
author = {},
title = {Diagrammes en barres, courbes, nuages de points et boîtes à
moustaches interactifs en R avec ggiraph},
date = {2026-07-09},
url = {https://www.datanovia.com/learn/data-visualization/ggiraph/interactive-geoms},
langid = {fr}
}