Thématisation, dimensionnement et accessibilité des graphiques ggiraph en R
Dimensionner le canevas, harmoniser le thème et rendre un SVG interactif accessible
Faites en sorte que vos widgets ggiraph ressemblent au reste de votre rapport tout en restant accessibles : contrôlez le canevas avec width_svg/height_svg, choisissez taille fixe ou responsive avec opts_sizing(), ajoutez une barre d’outils d’enregistrement en PNG avec opts_toolbar(), harmonisez avec theme_minimal() et la palette de la marque, et fournissez un repli pour lecteurs d’écran.
Date de publication
9 juillet 2026
Modifié
9 juillet 2026
AstucePoints clés
girafe(ggobj = p, width_svg = 7, height_svg = 4.5) définit le canevas SVG en pouces — le ratio fixe les proportions, alors planifiez-le comme n’importe quelle figure.
opts_sizing(rescale = FALSE) conserve le widget à sa taille dessinée ; rescale = TRUE lui permet de s’agrandir pour remplir son conteneur (responsive).
opts_toolbar(saveaspng = TRUE) ajoute une petite barre d’outils pour que les lecteurs puissent enregistrer le graphique en PNG.
Les widgets interactifs conservent l’apparence de ggplot2 — définissez theme_minimal() et la palette de la marque sur le graphique, et stylisez le survol pour l’harmoniser dans girafe(options = ...).
Un SVG interactif est opaque pour les lecteurs d’écran : fournissez toujours un fig-alt descriptif, un tableau de données source repliable et un contraste d’infobulle lisible — et ne laissez jamais la couleur être le seul signal.
Introduction
Vous avez enveloppé un graphique dans le girafe() de ggiraph et ça fonctionne — mais il s’affiche trop large, la couleur de survol jure avec votre rapport, et un utilisateur de lecteur d’écran n’obtient rien. Rendre un graphique interactif n’est que la première étape ; faire en sorte qu’il ressemble au reste de votre travail et reste accessible, voilà ce qui part en production.
Cette leçon couvre les trois choses qui transforment un widget fonctionnel en widget abouti : le dimensionnement du canevas, la thématisation pour que le widget s’accorde à vos figures ggplot2, et l’accessibilité pour qu’un SVG interactif n’exclue pas les lecteurs qui ne peuvent pas utiliser une souris ou un écran. ggiraph est gratuit et open source, et chaque réglage ici est un argument passé à girafe().
Nous utilisons le jeu de données intégré iris — la longueur des pétales en fonction de la longueur des sépales, réparties selon les trois espèces.
Commencez par un graphique statique au style maison
Avant d’ajouter l’interactivité, réussissez le graphique statique — la version interactive hérite de son apparence. Voici un simple nuage de points ggplot2 sur theme_minimal() avec une palette viridis adaptée au daltonisme, et l’espèce associée à la fois à la couleur et à la forme pour que les groupes se lisent sans se fier à la couleur seule.
library(ggplot2)ggplot(iris, aes(x = Sepal.Length, y = Petal.Length,color = Species, shape = Species)) +geom_point(size =3, alpha =0.85) +scale_color_viridis_d() +labs(x ="Sepal length (cm)", y ="Petal length (cm)",title ="Iris petal vs sepal length by species") +theme_minimal()
Voici l’apparence que nous voulons conserver : grille minimale, groupes viridis conformes à la marque, aucun artifice superflu. Tout ce qui suit la préserve — ggiraph dessine le même ggplot, il le rend simplement réactif au lecteur.
Dimensionner le canevas : width_svg et height_svg
girafe() dessine le graphique sur un canevas SVG dont vous définissez la taille en pouces avec width_svg et height_svg. Ces deux nombres remplissent deux rôles à la fois : ils définissent la taille du dessin et leur ratio fixe les proportions du graphique. Planifiez-les comme vous planifieriez n’importe quelle figure — un canevas large de 7 × 4.5 pour un nuage de points en format paysage, un canevas plus carré de 6 × 5 lorsque les données sont plus denses.
Les aperçus statiques ci-dessous utilisent les propres fig-width/fig-height de ggplot2 pour illustrer la même idée : des proportions larges face à des proportions hautes. Dans girafe(), width_svg/height_svg jouent exactement ce rôle.
library(ggplot2)ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species, shape = Species)) +geom_point(size =3, alpha =0.85) +scale_color_viridis_d() +labs(title ="Wide aspect (7 x 3.6): good for a landscape scatter") +theme_minimal()
library(ggplot2)ggplot(iris, aes(Sepal.Length, Petal.Length, color = Species, shape = Species)) +geom_point(size =3, alpha =0.85) +scale_color_viridis_d() +labs(title ="Square aspect (5 x 5): denser, more vertical room") +theme_minimal()
Définissez-les explicitement sur chaque widget. Au-delà des proportions, une taille explicite permet au widget de réserver son espace dès le départ, pour que la page ne saute pas au chargement du SVG — l’équivalent interactif d’une mise en page stable.
Taille fixe ou responsive : opts_sizing()
Par défaut, un widget girafe() s’agrandit pour remplir la largeur de son conteneur. C’est pratique, mais un nuage de points agrandi à toute la largeur de la page peut paraître grossier. opts_sizing() contrôle cela :
opts_sizing(rescale = FALSE) — le widget reste à la taille que vous avez dessinée (width_svg × height_svg) et ne s’étire pas. Idéal lorsque vous voulez que le graphique ait exactement l’apparence conçue.
opts_sizing(rescale = TRUE, width = 0.9) — le widget est responsive et se met à l’échelle de width (une proportion, 0–1) de son conteneur. Idéal pour une mise en page fluide où le graphique doit suivre la largeur de la colonne.
Vous le passez dans girafe(options = list(...)), aux côtés du style du survol et de l’infobulle. Nous l’utiliserons sur le widget interactif ci-dessous.
Ajouter une barre d’outils : opts_toolbar()
opts_toolbar() ajoute une petite barre d’outils flottante au widget. Son bouton le plus utile permet au lecteur d’enregistrer le graphique en PNG — pratique quand quelqu’un veut insérer votre figure interactive dans une diapositive ou un e-mail :
opts_toolbar(saveaspng =TRUE, position ="topright")
saveaspng = TRUE active le bouton de téléchargement et position place la barre d’outils ("topright" par défaut). Si vous ne voulez pas de barre d’outils du tout, passez opts_toolbar(hidden = "selection") ou omettez-la et définissez opts_zoom(max = 1) — mais le bouton d’enregistrement est un gain peu coûteux pour la plupart des rapports.
Harmoniser le thème, puis rendre un widget
Assemblons maintenant le tout. Le widget girafe() hérite automatiquement du theme_minimal() et de la palette viridis du ggplot — l’interactivité est une couche par-dessus, pas une nouvelle apparence. Ce que vous stylisez vraiment, c’est l’interaction : une surbrillance au survol et une infobulle qui correspondent à la marque plutôt qu’aux valeurs par défaut ternes de ggiraph.
opts_hover(css = ...) — nous entourons le point survolé d’un bleu marine profond de la marque (#0b2942) au lieu de le recolorer, pour que le point conserve sa couleur d’espèce tout en ressortant.
opts_tooltip(css = ...) — une boîte d’infobulle sombre avec du texte blanc (fort contraste, un gain d’accessibilité) qui s’accorde à l’encre du rapport.
opts_sizing(rescale = FALSE) — conserver le widget à sa taille dessinée.
opts_toolbar(saveaspng = TRUE) — proposer le bouton d’enregistrement en PNG.
C’est le seul widget interactif de la page — un unique appel à girafe() garde la page légère.
Survolez un point pour voir son espèce et ses mesures ; le point s’entoure de bleu marine tout en conservant la couleur de son groupe. Utilisez la barre d’outils en haut à droite pour enregistrer le graphique en PNG. Le widget ressemble aux figures statiques ci-dessus parce qu’il est le même ggplot — thème et palette transmis tels quels.
NoteAfficher les données sous-jacentes
Un SVG interactif est opaque pour les lecteurs d’écran ; voici donc les premières lignes derrière le graphique — une alternative textuelle accessible à tout lecteur.
First six iris measurements behind the interactive chart.
Species
Sepal length (cm)
Petal length (cm)
setosa
5.1
1.4
setosa
4.9
1.4
setosa
4.7
1.3
setosa
4.6
1.5
setosa
5.0
1.4
setosa
5.4
1.7
Accessibilité : un SVG interactif a besoin d’un repli
L’interactivité est un bonus, jamais le seul chemin vers l’information. Un widget girafe() s’affiche comme un SVG dont le détail apparaît au survol — ce qui signifie qu’un utilisateur au clavier seul, un utilisateur de lecteur d’écran, ou toute personne sur un appareil sans pointage précis n’en obtient rien. Traitez l’interactivité comme une amélioration et fournissez toujours ces trois choses :
Un fig-alt descriptif. Chaque bloc ci-dessus définit #| fig-alt avec une vraie phrase décrivant ce que le graphique montre et ce que l’interaction révèle — pas « un graphique ». C’est le texte qu’un lecteur d’écran annonce.
Un tableau de données source en repli. Le bloc repliable « Afficher les données sous-jacentes » ci-dessus expose les nombres sous forme de tableau HTML qu’un lecteur d’écran peut lire ligne par ligne. Pour un petit graphique, incluez tout le jeu de données ; pour un grand, les lignes clés plus un lien vers les données complètes. Cette leçon applique ce qu’elle enseigne.
Un contraste d’infobulle et de survol lisible. L’infobulle utilise du texte blanc sur bleu marine foncé — fort contraste, lisible pour les lecteurs malvoyants. Vérifiez les couleurs de survol et d’infobulle comme vous vérifieriez le texte courant ; les valeurs par défaut ternes de ggiraph ne sont pas garanties de passer.
Et la règle qui sous-tend l’ensemble du graphique : la couleur n’est jamais le seul signal. Le nuage de points associe l’espèce à la couleur et à la forme, de sorte que les groupes sont distinguables en niveaux de gris, pour les lecteurs daltoniens et sur une copie imprimée. Encodez chaque distinction significative au moins deux fois.
Pour le style statique qui se répercute dans le widget — thèmes, palettes, légendes — voir la leçon sur les thèmes ggplot2 ; ggiraph en hérite entièrement.
🟢 Avec un agent IA
Demandez à Prova« comment rendre mon widget ggiraph responsive à la largeur du conteneur ? » — elle répond avec du code que vous pouvez exécuter, de sorte que l’explication est reproductible. The runtime is the judge.Demander à Prova →
Problèmes fréquents
Le widget s’affiche énorme et granuleux sur un grand écran. Par défaut, girafe() agrandit le SVG pour remplir son conteneur. Ajoutez opts_sizing(rescale = FALSE) pour le figer à la taille dessinée width_svg × height_svg, ou opts_sizing(rescale = TRUE, width = 0.8) pour limiter jusqu’où il s’agrandit.
Le graphique s’écrase ou s’étire. Les proportions sont fixées par le ratio de width_svg sur height_svg, pas par le conteneur. Si le graphique paraît écrasé, ajustez ces deux nombres — par ex. width_svg = 7, height_svg = 4.5 pour un nuage de points en paysage — plutôt que de redimensionner le conteneur.
Le bouton d’enregistrement en PNG n’apparaît pas. Il vous faut opts_toolbar(saveaspng = TRUE) dans la liste options ; la barre d’outils est masquée jusqu’à ce que vous survoliez le widget, et elle se place là où position la met (en haut à droite par défaut). Vérifiez que la barre d’outils n’est pas réglée sur hidden.
Questions fréquentes
NoteComment définir la taille d’un graphique girafe de ggiraph ?
Passez width_svg et height_svg (en pouces) à girafe(), par ex. girafe(ggobj = p, width_svg = 7, height_svg = 4.5). Leur ratio définit aussi les proportions du graphique. Pour empêcher le widget de s’agrandir jusqu’à remplir son conteneur, ajoutez opts_sizing(rescale = FALSE) à la liste options.
NoteComment rendre un widget ggiraph responsive ?
Utilisez opts_sizing(rescale = TRUE, width = 0.9) dans girafe(options = list(...)). Avec rescale = TRUE, le widget se met à l’échelle pour remplir son conteneur, et width (une proportion de 0 à 1) limite la part de la largeur du conteneur qu’il occupe. Définissez rescale = FALSE pour une taille fixe à la place.
NoteComment ajouter un bouton de téléchargement ou d’enregistrement en image à un graphique ggiraph ?
Ajoutez opts_toolbar(saveaspng = TRUE) à girafe(options = list(...)). Cela active une petite barre d’outils (en haut à droite par défaut) avec un bouton qui enregistre le graphique actuel en PNG. Utilisez position pour la déplacer, ou pngname pour définir le nom du fichier téléchargé.
NoteUn widget girafe conserve-t-il mon thème et mes couleurs ggplot2 ?
Oui. girafe() rend le même objet ggplot, de sorte que theme_minimal(), votre palette, les étiquettes et les échelles sont tous transmis inchangés. Vous ne stylisez que les interactions — la surbrillance au survol (opts_hover()) et la boîte d’infobulle (opts_tooltip()) — séparément dans la liste options.
NoteLes graphiques interactifs ggiraph sont-ils accessibles aux lecteurs d’écran ?
Le SVG interactif lui-même est en grande partie opaque pour les lecteurs d’écran, puisque son détail apparaît au survol. Rendez le graphique accessible en fournissant un fig-alt descriptif, un tableau de données source repliable en guise de repli textuel, et des couleurs d’infobulle/survol à fort contraste — et en encodant chaque distinction avec plus que la couleur (par exemple la couleur et la forme).
Testez vos connaissances
ImportantExercice : un widget à taille fixe avec un bouton d’enregistrement
Prenez ce diagramme en barres statique, au style maison, de la longueur moyenne des sépales par espèce et transformez-le en un widget interactif qui (a) est figé à une taille fixe (non étiré au conteneur) et (b) propose un bouton d’enregistrement en PNG.
library(ggplot2)d <-aggregate(Sepal.Length ~ Species, data = iris, FUN = mean)ggplot(d, aes(x = Species, y = Sepal.Length, fill = Species)) +geom_col() +scale_fill_viridis_d() +theme_minimal()
Tâche : quel geom échangez-vous, et quels deux opts_*() ajoutez-vous à girafe(options = ...) pour figer la taille et ajouter le bouton d’enregistrement ?
AstuceIndice
Les barres ont un jumeau interactif, geom_col_interactive(). Pour figer la taille, utilisez opts_sizing(rescale = FALSE), et pour ajouter le bouton de téléchargement, utilisez opts_toolbar(saveaspng = TRUE).
AstuceSolution
library(ggplot2)library(ggiraph)d <-aggregate(Sepal.Length ~ Species, data = iris, FUN = mean)p <-ggplot(d, aes(x = Species, y = Sepal.Length, fill = Species)) +geom_col_interactive(aes(tooltip =round(Sepal.Length, 2), data_id = Species)) +scale_fill_viridis_d() +theme_minimal()girafe(ggobj = p,width_svg =7,height_svg =4.5,options =list(opts_sizing(rescale =FALSE),opts_toolbar(saveaspng =TRUE) ))
Remplacez geom_col() par geom_col_interactive(), puis ajoutez opts_sizing(rescale = FALSE) pour figer la taille et opts_toolbar(saveaspng = TRUE) pour le bouton de téléchargement.
ImportantVérification rapide : qu’est-ce qui définit le rapport d’aspect d’un widget ?
Deux graphiques utilisent les mêmes données mais l’un paraît écrasé. Quel réglage de girafe() contrôle le rapport d’aspect ?
AstuceAfficher la réponse
Le ratio de width_svg sur height_svg. Ces deux arguments définissent le canevas SVG en pouces, et leur ratio fixe les proportions — un graphique écrasé signifie généralement que les deux nombres sont disproportionnés pour les données, non que le conteneur est erroné.
Conclusion
Un graphique ggiraph abouti est dimensionné, thématisé et accessible. Définissez width_svg/height_svg pour des proportions délibérées, choisissez taille fixe ou responsive avec opts_sizing(), proposez une barre d’outils d’enregistrement en PNG avec opts_toolbar(), et laissez theme_minimal() et votre palette se répercuter pour que le widget s’accorde au reste de votre travail. Ensuite, rendez-le utilisable par tous — un vrai fig-alt, un tableau de données source en repli, des infobulles à fort contraste, et jamais la couleur seule. Voilà la différence entre un graphique qui fonctionne et un que vous pouvez livrer.
Cette leçon est reproductible : les figures sont exécutées au moment de la génération (si elles s’affichent, le code fonctionne). Copiez n’importe quel bloc et exécutez-le pour reproduire ces graphiques. The runtime is the judge.
@online{2026,
author = {},
title = {Thématisation, dimensionnement et accessibilité des
graphiques ggiraph en R},
date = {2026-07-09},
url = {https://www.datanovia.com/learn/data-visualization/ggiraph/theming-sizing-accessibility},
langid = {fr}
}