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

A grouped bar chart of mean tooth length by vitamin C dose (0.5, 1, 2 mg/day), with two dodged bars per dose coloured by supplement (OJ and VC); length rises with dose.

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 :

library(ggplot2)
library(ggiraph)

ggplot(tg, aes(x = dose, y = len, fill = supp)) +
  geom_col_interactive(
    aes(tooltip = paste0(supp, ": ", round(len, 1)), data_id = supp),
    position = "dodge"
  ) +
  scale_fill_viridis_d(end = 0.7) +
  theme_minimal()

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

A line chart of trunk circumference against age in days for five orange trees, each tree a differently coloured rising line.

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

A scatter plot of car weight versus miles per gallon; points trend downward, heavier cars getting fewer miles per gallon.

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 :

library(ggplot2)
library(ggiraph)

ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point_interactive(
    aes(tooltip = rownames(mtcars), data_id = rownames(mtcars)),
    color = "#3a86d4", size = 3
  ) +
  theme_minimal()

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 <- ToothGrowth
tg$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()

A boxplot of tooth length for three vitamin C doses, each box a different viridis colour with jittered points overlaid; length increases with dose.

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 :

library(ggplot2)
library(ggiraph)

tg <- ToothGrowth
tg$dose <- factor(tg$dose)

ggplot(tg, aes(x = dose, y = len, fill = dose)) +
  geom_boxplot(outlier.shape = NA, alpha = 0.7) +
  geom_jitter_interactive(
    aes(tooltip = paste0("len = ", len), data_id = seq_len(nrow(tg))),
    width = 0.15, alpha = 0.6
  ) +
  scale_fill_viridis_d(end = 0.8) +
  theme_minimal()

Voyez-le en direct — un widget interactif

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.

library(ggplot2)
library(ggiraph)

p <- ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point_interactive(
    aes(tooltip = rownames(mtcars), data_id = rownames(mtcars)),
    color = "#3a86d4", size = 3
  ) +
  labs(x = "Weight (1000 lbs)", y = "Miles per gallon") +
  theme_minimal()

girafe(
  ggobj = p,
  width_svg = 7, height_svg = 4.5,
  options = list(
    opts_hover(css = "fill:#0b2942;r:5pt;"),
    opts_tooltip(css = "background:#0b2942;color:#fff;padding:6px 8px;border-radius:4px;font-size:13px;"),
    opts_sizing(rescale = FALSE)
  )
)

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().

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

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.

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.

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.

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.

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

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 ?

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

library(ggplot2)
library(ggiraph)

p <- 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()

girafe(ggobj = p, width_svg = 7, height_svg = 4.5,
       options = list(opts_sizing(rescale = FALSE)))

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.

Pour ajouter des infobulles au survol à un diagramme en barres construit avec geom_col(), vers quel geom passez-vous ?

Afficher la réponsegeom_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.

Leçons connexes

Cette page vous a-t-elle été utile ?

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

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.

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Diagrammes en barres, courbes, nuages de points et boîtes à moustaches interactifs en R avec ggiraph.” 2026. July 9. https://www.datanovia.com/learn/data-visualization/ggiraph/interactive-geoms.