Tracer un tableau depuis un data frame en R (ggpubr)
Rendez un data frame sous forme de tableau graphique, stylisez-le avec ttheme(), colorez les cellules conditionnellement et placez-le à côté d’un graphique
Tracez un tableau graphique depuis un data frame en R avec ggtexttable() de ggpubr. Stylisez-le avec ttheme(), colorez et mettez en forme des cellules individuelles conditionnellement avec table_cell_bg() et table_cell_font(), et combinez le tableau avec un graphique grâce à ggarrange(). Chaque exemple est rendu pour vous et s’exécute en direct dans votre navigateur.
Date de publication
22 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
ggtexttable() transforme un data frame en tableau graphique que vous pouvez tracer, combiner avec des graphiques et exporter comme n’importe quel ggplot — ggtexttable(df, rows = NULL, theme = ttheme("light")).
ttheme() stylise tout le tableau en une fois : choisissez un thème nommé ("default", "light", "classic", "minimal", "blank", ou des variantes colorées comme "mOrange", "mBlue").
Colorez des cellules individuelles à la main ou selon une règle avec table_cell_bg() (arrière-plan) et table_cell_font() (couleur, style et taille du texte) — passez l’indice de ligne et de colonne de la cellule.
Construisez le tableau récapitulatif lui-même avec R de base ou avec desc_statby() de ggpubr — sans tableur, sans copier-coller.
Placez le tableau à côté ou sous un graphique avec ggarrange(), ou déposez-le à l’intérieur d’un graphique avec annotation_custom() — une figure-avec-tableau en un seul appel.
rows = NULL masque la colonne des numéros de ligne ; le tableau hérite automatiquement de l’allure soignée de la marque.
Parfois, la chose la plus claire à montrer à côté d’un graphique, ce sont les chiffres eux-mêmes — un petit tableau des moyennes de groupes, le résultat d’un test statistique, un dictionnaire de données. R n’a aucun moyen intégré de placer un data frame dans un graphique : par() et le traçage de base ne le font pas. Le package ggpubr résout cela avec ggtexttable(), qui rend un data frame sous forme de tableau graphique — un véritable objet ggplot que vous pouvez thématiser, colorer cellule par cellule, disposer à côté d’un graphique et exporter en PDF ou PNG.
Cette leçon couvre tout le flux de travail sur les données intégrées ToothGrowth :
ggtexttable() — tracer un data frame sous forme de tableau.
ttheme() — styliser tout le tableau avec un seul thème nommé.
table_cell_bg() / table_cell_font() — colorer et styliser des cellules individuelles, y compris conditionnellement (par exemple signaler en vert les p-values significatives).
ggarrange() — combiner le tableau avec un graphique en une seule figure.
Chaque tableau ci-dessous est rendu ici même, et vous pouvez réexécuter ou modifier n’importe lequel d’entre eux en direct.
Besoin d’abord du résumé des données ? desc_statby() de ggpubr renvoie un data frame structuré des moyennes de groupes, SD, SE et IC — voir Moyennes et barres d’erreur. Ici, nous injectons ce résumé directement dans un tableau.
Construire un petit tableau récapitulatif
Un tableau graphique ne vaut que par le data frame qui le sous-tend. Nous voulons une ligne par groupe avec quelques statistiques, pas les 60 lignes brutes de ToothGrowth. Construisez le résumé dans le bloc avec aggregate() de R de base afin que le tableau ait des colonnes propres et arrondies à rendre.
library(ggpubr)df <- ToothGrowthdf$dose <-factor(df$dose)# One row per dose x supplement: mean and SD of tooth lengthstats <-aggregate(len ~ dose + supp, data = df,FUN =function(x) c(mean =mean(x), sd =sd(x)))stats <-data.frame(stats[, c("dose", "supp")],mean =round(stats$len[, "mean"], 1),sd =round(stats$len[, "sd"], 1))stats
Vous préférez un résumé prêt à l’emploi ? desc_statby(ToothGrowth, measure.var = "len", grps = "dose") (ggpubr) renvoie la moyenne, SD, SE et IC en un seul appel — injectez n’importe quel data frame de votre choix dans ggtexttable().
Tracer le data frame sous forme de tableau
ggtexttable() prend le data frame et renvoie un tableau graphique. Passez rows = NULL pour supprimer la colonne des numéros de ligne, et choisissez une allure avec theme = ttheme(...). C’est le tableau que la plupart des gens viennent chercher — un rendu propre et prêt pour la figure d’un petit data frame.
Le résultat est un objet ggplot ordinaire : affectez-le à une variable, tracez-le, ou combinez-le avec d’autres graphiques plus loin dans cette leçon.
Styliser tout le tableau avec ttheme()
ttheme() stylise chaque cellule en une fois. Passez un thème nommé pour changer toute l’allure en un seul argument — du dépouillé ("blank", "minimal") au coloré façon revue ("mOrange", "mBlue", "mGreen"). Le thème "classic" dessine l’allure encadrée familière des sorties statistiques.
Les thèmes nommés préfixés m ("mOrange", "mBlue", "mGreen", "mRed", …) sont la famille colorée « moyenne » ; leurs frères en "l"/"d" ("lBlue", "dBlue") sont plus clairs/plus foncés. Choisissez celui qui correspond à la palette du graphique avec lequel vous le disposerez.
Colorer des cellules individuelles conditionnellement
La vraie puissance de ggtexttable() est de styliser une cellule à la fois — pour signaler une p-value significative, un maximum, ou un groupe d’intérêt. table_cell_bg() définit l’arrière-plan d’une cellule et table_cell_font() son texte. Toutes deux prennent l’indice de row et de column de la cellule cible.
La règle d’indiçage importe : la ligne 1 est l’en-tête, donc la première ligne de données est la ligne 2. Les colonnes sont comptées à partir de 1 (avec rows = NULL, la colonne 1 est votre première colonne de données).
library(ggpubr)df <- ToothGrowthdf$dose <-factor(df$dose)stats <-aggregate(len ~ dose + supp, data = df,FUN =function(x) c(mean =mean(x), sd =sd(x)))stats <-data.frame(stats[, c("dose", "supp")],mean =round(stats$len[, "mean"], 1),sd =round(stats$len[, "sd"], 1))# Which data row holds the largest mean? (+1 for the header row)top <-which.max(stats$mean) +1mean_col <-which(colnames(stats) =="mean")tab <-ggtexttable(stats, rows =NULL, theme =ttheme("light"))tab <-table_cell_bg(tab, row = top, column = mean_col,fill ="#d5f5e3", color ="white")tab <-table_cell_font(tab, row = top, column = mean_col,face ="bold", color ="#1e8449")tab
Pour colorer des cellules selon une règle sur tout le tableau, bouclez sur les lignes de données et choisissez un remplissage par ligne. Ici, nous signalons chaque groupe dont la moyenne dépasse 20 — exactement le motif que vous utiliseriez pour mettre en évidence les p-values significatives dans un tableau de résultats.
library(ggpubr)df <- ToothGrowthdf$dose <-factor(df$dose)stats <-aggregate(len ~ dose + supp, data = df,FUN =function(x) c(mean =mean(x), sd =sd(x)))stats <-data.frame(stats[, c("dose", "supp")],mean =round(stats$len[, "mean"], 1),sd =round(stats$len[, "sd"], 1))# A fill per data row, decided by a rulestats$fill <-ifelse(stats$mean >20, "#abebc6", "#eaecee")mean_col <-which(colnames(stats) =="mean")tab <-ggtexttable(stats[, c("dose", "supp", "mean", "sd")],rows =NULL, theme =ttheme("light"))for (i inseq_len(nrow(stats))) { tab <-table_cell_bg(tab, row = i +1, column = mean_col,fill = stats$fill[i], color ="white")}tab
C’est le motif FAQ migré, ré-écrit : construisez le tableau, décidez d’une couleur par ligne à partir des données, puis bouclez table_cell_bg() sur row = i + 1. Changez la règle (p.adj < 0.01, mean == max(mean), un nom de groupe) et vous pouvez signaler tout ce que la figure doit mettre en avant.
Combiner le tableau avec un graphique
Parce qu’un ggtexttable() est un ggplot, vous pouvez le placer à côté ou sous un graphique avec ggarrange() — la façon ggpubr standard de construire une figure multi-panneaux. Ici, la boîte à moustaches et son tableau récapitulatif s’empilent en une seule figure.
library(ggpubr)df <- ToothGrowthdf$dose <-factor(df$dose)# The chartbxp <-ggboxplot(df, x ="dose", y ="len",color ="dose", palette ="jco",xlab ="Dose (mg)", ylab ="Tooth length")# The summary table beneath itstats <-aggregate(len ~ dose, data = df,FUN =function(x) c(mean =mean(x), sd =sd(x)))stats <-data.frame(dose = stats$dose,mean =round(stats$len[, "mean"], 1),sd =round(stats$len[, "sd"], 1))tab <-ggtexttable(stats, rows =NULL, theme =ttheme("light"))# Arrange chart + table into one figureggarrange(bxp, tab, ncol =1, nrow =2, heights =c(1, 0.4))
Vous voulez le tableau à l’intérieur de la zone de tracé plutôt qu’en dessous ? Enveloppez-le avec ggplotGrob() et ajoutez-le avec annotation_custom(ggplotGrob(tab), xmin = ..., ymin = ...) (ggplot2), en plaçant le grob du tableau aux coordonnées de données à l’intérieur du graphique.
Essayez en direct
Les tableaux ci-dessus ont été rendus au moment du build. Envie d’expérimenter ? Modifiez le code et appuyez sur Run — il s’exécute dans votre navigateur via webR (sans serveur, sans installation). Essayez de remplacer le ttheme() par "classic" ou "mBlue", de changer la règle de mise en évidence, ou de disposer le tableau à côté d’un autre graphique.
Vous travaillez en Python ? Un guide de rendu de tableau pandas/matplotlib arrive dans la série Python.
🟢 Avec un agent IA
Demandez à Prova« comment rendre mon propre data frame sous forme de tableau et colorer les cellules qui satisfont une règle ? » — elle répond avec du code ggtexttable() + table_cell_bg() que vous pouvez exécuter sur votre propre data frame, de sorte que le tableau stylisé soit reproductible. The runtime is the judge.Ask Prova →
Problèmes courants
La mauvaise cellule est colorée (décalage de un).row = 1 est l’en-tête, donc la première ligne de données est row = 2. Quand vous bouclez, visez row = i + 1. Obtenez la colonne avec which(colnames(df) == "mean") plutôt qu’en comptant à l’œil.
Une colonne de numéros de ligne apparaît à gauche. Passez rows = NULL à ggtexttable() pour la masquer ; le comportement par défaut dessine les noms de lignes du data frame comme première colonne.
Les nombres s’affichent avec de longues décimales.ggtexttable() dessine le data frame tel quel — appliquez round() aux colonnes numériques quand vous construisez le résumé, ou format(), avant de tracer.
Le tableau paraît à l’étroit à côté du graphique dans ggarrange(). Ajustez les tailles de panneaux avec heights = c(1, 0.4) (ou widths pour une disposition côte à côte) afin que le tableau ne domine pas le graphique.
Questions fréquentes
NoteComment transformer un data frame en image de tableau en R ?
Utilisez ggtexttable() de ggpubr : ggtexttable(df, rows = NULL, theme = ttheme("light")) rend n’importe quel data frame sous forme de tableau graphique. Le résultat est un objet ggplot, donc vous pouvez le tracer, le combiner avec des graphiques via ggarrange(), et l’exporter en PNG ou PDF avec ggexport() ou ggsave().
NoteComment colorer une cellule précise dans un ggtexttable ?
Utilisez table_cell_bg() pour l’arrière-plan et table_cell_font() pour le texte, en passant l’indice de row et de column de la cellule : table_cell_bg(tab, row = 2, column = 3, fill = "lightgreen"). Rappelez-vous que row = 1 est l’en-tête, donc la première ligne de données est row = 2. Trouvez une colonne par son nom avec which(colnames(df) == "mean").
NoteComment colorer des cellules conditionnellement selon les données ?
Décidez d’un remplissage par ligne à partir des données (par exemple ifelse(df$p.adj < 0.01, "green", "gray")), puis bouclez table_cell_bg() sur les lignes, en visant row = i + 1 pour sauter l’en-tête. C’est le motif standard pour signaler en vert les p-values significatives ou les valeurs maximales dans un tableau de résultats.
NoteComment changer le style de tout le tableau en une fois ?
Passez un thème nommé à l’argument theme : ttheme("light"), "classic", "minimal", "blank", ou une famille colorée comme "mOrange", "mBlue", "mGreen". ttheme() stylise chaque cellule en un seul appel ; n’utilisez table_cell_bg() / table_cell_font() ensuite que pour les cellules individuelles que vous voulez redéfinir.
NoteComment afficher un tableau à côté d’un ggplot ?
Tous deux sont des objets ggplot, donc combinez-les avec ggarrange() : ggarrange(plot, table, ncol = 1, nrow = 2, heights = c(1, 0.4)) empile le graphique au-dessus du tableau. Utilisez ncol = 2 avec widths pour une disposition côte à côte, ou annotation_custom(ggplotGrob(table)) pour déposer le tableau à l’intérieur de la zone de tracé.
Testez vos connaissances
ImportantExercice : colorer la plus grande moyenne
Complétez le code pour que la cellule de la plus grande mean du tableau reçoive un arrière-plan vert clair. La ligne de données avec la plus grande moyenne est trouvée pour vous — complétez l’appel à table_cell_bg() avec les bons row, column et fill.
# table_cell_bg() needs the row, the column and a fill colour:# row = top, column = mean_col, fill = "#d5f5e3"
Vérification rapide : dans un ggtexttable() avec rows = NULL, quel indice row correspond à la première ligne de données ?
A. row = 0
B. row = 1
C. row = 2
(Réponse : C — row = 1 est l’en-tête, donc la première ligne de données est row = 2.)
Conclusion
Vous avez rendu un data frame sous forme de tableau graphique prêt pour publication à la manière de ggpubr : ggtexttable() le dessine, ttheme() stylise tout le tableau en un seul argument, et table_cell_bg() / table_cell_font() colorent des cellules individuelles — y compris conditionnellement, en bouclant une règle pilotée par les données sur les lignes (la façon standard de signaler les valeurs significatives). Parce que le tableau n’est qu’un ggplot, ggarrange() le combine avec un graphique en une seule figure, et ggexport() l’écrit en PDF ou PNG.
Cette leçon est reproductible : les figures sont exécutées au moment de la construction (si elles s’affichent, le code fonctionne), et le bac à sable et le quiz se réexécutent en direct dans votre navigateur. The runtime is the judge.
@online{2026,
author = {},
title = {Tracer un tableau depuis un data frame en R (ggpubr)},
date = {2026-06-22},
url = {https://www.datanovia.com/learn/data-visualization/ggpubr/ggtexttable},
langid = {fr}
}