Figures ggpubr et factoextra interactives avec ggiraph en R

Ajoutez une seule couche interactive pour transformer des graphiques R de qualité publication en graphiques à infobulles au survol

ggpubr et factoextra renvoient des objets ggplot2, si bien qu’une seule couche interactive ggiraph transforme leurs boîtes à moustaches et graphiques PCA de qualité publication en graphiques à infobulles au survol — sans réécriture. Cette leçon traite deux exemples : une boîte à moustaches ggpubr interactive et un graphique des individus d’une PCA factoextra interactif.

Date de publication

9 juillet 2026

Modifié

11 juillet 2026

AstucePoints clés
  • ggpubr et factoextra renvoient tous deux des objets ggplot2 standard, donc tout ce qui étend ggplot2 fonctionne sur eux.
  • Ajoutez une seule couche geom_*_interactive() — en associant tooltip et data_id à l’intérieur de aes() — puis enveloppez le graphique dans girafe().
  • L’aspect de qualité publication (palettes de revues, ellipses PCA) est conservé — vous ne faites qu’ajouter le comportement de survol par-dessus.
  • ggpubr et factoextra sont les propres packages de Datanovia ; ggiraph est un module complémentaire distinct, gratuit et open-source, qui rend n’importe quel ggplot interactif.
  • Chaque graphique interactif est accompagné d’une figure statique (premier rendu rapide) et d’un tableau de données repliable (solution de repli pour les lecteurs d’écran).

Introduction

Vous construisez déjà des figures statistiques soignées avec ggpubr et des graphiques multivariés avec factoextra. La bonne nouvelle : les deux packages renvoient de simples objets ggplot2. Ce seul fait signifie que vous pouvez rendre leurs figures interactives sans changer de bibliothèque ni reconstruire le graphique — vous ajoutez une couche de ggiraph (un package gratuit et open-source qui restitue ggplot2 sous forme de SVG interactif) et laissez les lecteurs survoler un point pour lire sa valeur exacte.

Cette leçon traite deux exemples de bout en bout : une boîte à moustaches ggpubr où survoler un point affiche la mesure, et un graphique PCA factoextra où survoler un individu affiche son étiquette. Dans les deux cas, le style de qualité publication reste intact.

Pourquoi une seule couche suffit

ggiraph reproduit les geoms de ggplot2 avec des jumeaux interactifs — geom_point_interactive(), geom_jitter_interactive(), geom_col_interactive(), et ainsi de suite. Chacun accepte deux attributs esthétiques supplémentaires : tooltip (le texte affiché au survol) et data_id (utilisé pour la mise en évidence au survol). Comme une figure ggpubr ou factoextra est déjà un objet ggplot, il vous suffit d’y ajouter une couche interactive avec + et de passer le résultat à girafe(), qui restitue le tout sous forme de SVG en ligne.

Le schéma est le même à chaque fois :

  1. Construisez la figure comme d’habitude avec ggpubr ou factoextra.
  2. Ajoutez une seule couche geom_*_interactive(aes(tooltip = ..., data_id = ...)).
  3. Enveloppez-la dans girafe(ggobj = ...) avec une taille explicite.

Exemple 1 — une boîte à moustaches ggpubr interactive

Commencez par une boîte à moustaches ggpubr classique. Nous utilisons le jeu de données intégré ToothGrowth : la longueur des dents (len) selon la dose de vitamine C, remplie avec la palette de revue npg adaptée au daltonisme. Cette première figure est entièrement statique — elle se rend rapidement et c’est le graphique que les lecteurs voient avant toute interaction.

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

ggboxplot(
  tg, x = "dose", y = "len",
  fill = "dose", palette = "npg",
  xlab = "Vitamin C dose (mg/day)", ylab = "Tooth length"
)

A ggpubr boxplot of tooth length by vitamin C dose (0.5, 1, 2), each box filled with a different npg journal colour, showing tooth length rising with dose.

La longueur des dents augmente clairement avec la dose. Rendez-la maintenant interactive. Donnez à chaque ligne un id stable, puis ajoutez une seule couche geom_jitter_interactive() : les points dispersés portent un tooltip (la longueur exacte) et un data_id (afin que survoler un point le mette en évidence). Enveloppez le graphique dans girafe() avec des width_svg/height_svg explicites afin que le widget réserve son espace et ne décale jamais la mise en page.

library(ggpubr)
library(ggiraph)

tg <- ToothGrowth
tg$dose <- factor(tg$dose)
tg$id <- paste0("obs", seq_len(nrow(tg)))

p <- ggboxplot(
  tg, x = "dose", y = "len",
  fill = "dose", palette = "npg",
  outlier.shape = NA,                       # hide default outliers; the jitter shows every point
  xlab = "Vitamin C dose (mg/day)", ylab = "Tooth length"
) +
  geom_jitter_interactive(
    aes(tooltip = paste0("len = ", len), data_id = id),
    width = 0.15, alpha = 0.6
  )

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

Survolez n’importe quel point pour lire sa valeur len exacte ; le point sur lequel vous êtes s’illumine. Tout le reste — le remplissage npg, les statistiques de la boîte, les étiquettes des axes — est la figure ggpubr ordinaire. Nous fixons outlier.shape = NA afin que les points aberrants propres à la boîte à moustaches ne soient pas dessinés par-dessus les points dispersés.

Un SVG interactif est opaque pour les technologies d’assistance, voici donc les données derrière le graphique — la longueur des dents résumée par dose.

library(knitr)
tg <- ToothGrowth
tg$dose <- factor(tg$dose)
summary_tbl <- aggregate(len ~ dose, data = tg,
                         FUN = function(x) round(c(n = length(x), mean = mean(x),
                                                   sd = sd(x), min = min(x), max = max(x)), 1))
summary_tbl <- do.call(data.frame, summary_tbl)
names(summary_tbl) <- c("Dose (mg/day)", "n", "Mean", "SD", "Min", "Max")
kable(summary_tbl, caption = "Tooth length by vitamin C dose (ToothGrowth).")
Tooth length by vitamin C dose (ToothGrowth).
Dose (mg/day) n Mean SD Min Max
0.5 20 10.6 4.5 4.2 21.5
1 20 19.7 4.4 13.6 27.3
2 20 26.1 3.8 18.5 33.9

Exemple 2 — un graphique PCA factoextra interactif

La même astuce fonctionne pour les figures multivariées. Lancez une PCA sur les quatre mesures d’iris, puis dessinez les individus avec factoextra, colorés par Species avec des ellipses de confiance. Là encore, commencez en statique.

library(factoextra)
pca <- prcomp(iris[, 1:4], scale. = TRUE)

fviz_pca_ind(
  pca, geom = "point",
  habillage = iris$Species,
  addEllipses = TRUE,
  palette = "npg"
)

A factoextra PCA individuals plot of the iris data, points coloured by species (setosa, versicolor, virginica) with a confidence ellipse around each group.

Les trois espèces se séparent nettement le long de la première composante principale. Pour permettre aux lecteurs d’identifier chaque fleur, ajoutez une seule couche geom_point_interactive() dont le tooltip et le data_id sont les noms de lignes. Ces points interactifs supplémentaires se placent par-dessus les marqueurs existants et portent le comportement de survol, tandis que les ellipses, les couleurs et les étiquettes d’axes de factoextra (avec leurs pourcentages de variance) restent intactes.

library(factoextra)
library(ggiraph)

pca <- prcomp(iris[, 1:4], scale. = TRUE)

fp <- fviz_pca_ind(
  pca, geom = "point",
  habillage = iris$Species,
  addEllipses = TRUE,
  palette = "npg"
) +
  geom_point_interactive(
    aes(tooltip = rownames(iris), data_id = rownames(iris))
  )

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

Copiez ce bloc et exécutez-le pour rendre la PCA interactive — survoler un point montre alors de quelle observation il s’agit. C’est là tout l’intérêt de l’interactivité pour la réduction de dimension : une PCA statique montre la structure, et exécuter ceci vous permet de remonter d’un point précis jusqu’à sa ligne — sans encombrer la figure de 150 étiquettes de texte. (Nous conservons un seul widget interactif par page pour un chargement mobile rapide, ce second exemple est donc présenté sous forme de code — exactement la même astuce à une couche que celle que vous avez exécutée sur la boîte à moustaches ci-dessus.)

La PCA réduit quatre mesures à des composantes principales. Voici la part de variance que chaque composante explique — les chiffres derrière les étiquettes des axes.

library(factoextra)
library(knitr)
pca <- prcomp(iris[, 1:4], scale. = TRUE)
eig <- get_eigenvalue(pca)
eig <- round(eig, 2)
names(eig) <- c("Eigenvalue", "Variance (%)", "Cumulative (%)")
kable(eig, caption = "Variance explained by each principal component (iris PCA).")
Variance explained by each principal component (iris PCA).
Eigenvalue Variance (%) Cumulative (%)
Dim.1 2.92 72.96 72.96
Dim.2 0.91 22.85 95.81
Dim.3 0.15 3.67 99.48
Dim.4 0.02 0.52 100.00
🟢 Avec un agent IA

Demandez à Prova « comment ajouter une infobulle à mon propre graphique ggpubr avec ggiraph ? » — elle répond avec du code que vous pouvez exécuter sur votre propre figure, de sorte que 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_jitter_interactive(aes(tooltip = len, data_id = id)) fonctionne ; geom_jitter_interactive(tooltip = len) ne fait silencieusement rien.

Le bloc se rend vide. girafe() renvoie un objet widget — il doit être la dernière expression du bloc (ou être affiché explicitement). Si vous l’assignez à une variable et vous arrêtez là, rien n’apparaît.

Les points apparaissent en double sur la boîte à moustaches. ggpubr dessine les points aberrants par défaut, donc une couche de dispersion empile un second jeu de points sur les valeurs aberrantes. Fixez outlier.shape = NA dans ggboxplot() afin que les points dispersés soient les seuls affichés.

Questions fréquentes

Oui. ggiraph fournit des jumeaux interactifs des geoms standard (geom_point_interactive(), geom_col_interactive(), geom_jitter_interactive(), et d’autres). Comme ggpubr et factoextra renvoient tous deux des objets ggplot2, vous ajoutez une couche interactive à leur sortie exactement comme vous le feriez sur un graphique construit avec ggplot() directement.

Ajoutez une geom interactive et associez l’attribut esthétique tooltip à l’intérieur de aes(), par ex. ggboxplot(...) + geom_jitter_interactive(aes(tooltip = value, data_id = id)), puis passez le résultat à girafe(ggobj = ...). L’attribut esthétique data_id pilote la mise en évidence au survol.

Oui. ggiraph est un logiciel gratuit et open-source. Il transforme les graphiques ggplot2 en SVG interactif sans ajouter de coût ni d’obligation de compte.

Oui. fviz_pca_ind() (et les autres fonctions fviz_*) renvoient des objets ggplot2, il vous suffit donc d’ajouter une couche geom_point_interactive(aes(tooltip = ..., data_id = ...)) par-dessus et de l’envelopper dans girafe(). Les ellipses de confiance, les couleurs des groupes et les axes étiquetés par la variance sont préservés.

Le PNG statique s’affiche instantanément et c’est ce que voient les moteurs de recherche et les lecteurs sur papier, ce qui garde la page rapide et accessible. Le widget interactif en dessous est la récompense pour les lecteurs à l’écran qui veulent inspecter des points individuels. Les associer vous donne à la fois la rapidité et l’interactivité, sans sacrifier l’une pour l’autre.

Testez vos connaissances

Prenez un nuage de points ggpubr de mtcars (le poids wt en fonction des miles par gallon mpg) et faites en sorte que chaque point affiche le nom de sa voiture au survol. Ajoutez une seule couche interactive et rendez-le avec girafe().

Construisez la base avec ggscatter(mtcars, x = "wt", y = "mpg"), puis ajoutez geom_point_interactive(aes(tooltip = rownames(mtcars), data_id = rownames(mtcars))). Les noms de lignes de mtcars sont les noms des voitures. Terminez avec girafe(ggobj = p, width_svg = 6, height_svg = 4).

library(ggpubr)
library(ggiraph)

p <- ggscatter(mtcars, x = "wt", y = "mpg",
               color = "#3a86d4",
               xlab = "Weight", ylab = "Miles per gallon") +
  geom_point_interactive(
    aes(tooltip = rownames(mtcars), data_id = rownames(mtcars))
  )

girafe(ggobj = p, width_svg = 6, height_svg = 4,
       options = list(opts_sizing(rescale = FALSE)))

Survoler n’importe quel point affiche désormais le nom de la voiture.

Pourquoi pouvez-vous rendre une figure ggpubr ou factoextra interactive en ajoutant une seule couche geom_*_interactive() ?

Afficher la réponse — Parce que les fonctions ggpubr et factoextra renvoient des objets ggplot2 standard. Tout ce qui étend ggplot2 (y compris les geoms interactives de ggiraph) se compose avec elles à l’aide de +, aucune réécriture n’est donc nécessaire.

Conclusion

Comme ggpubr et factoextra renvoient des objets ggplot2, rendre leurs figures interactives se résume à un ajout d’une seule ligne : une geom interactive associant tooltip et data_id, enveloppée dans girafe(). Vous conservez l’aspect de qualité publication et gagnez l’inspection au survol — aussi bien pour une boîte à moustaches statistique que pour un graphique des individus d’une PCA.

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 compilation (si elle se rend, 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 = {Figures ggpubr et factoextra interactives avec ggiraph en R},
  date = {2026-07-09},
  url = {https://www.datanovia.com/learn/data-visualization/ggiraph/interactive-ggpubr-factoextra},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Figures ggpubr et factoextra interactives avec ggiraph en R.” 2026. July 9. https://www.datanovia.com/learn/data-visualization/ggiraph/interactive-ggpubr-factoextra.