ggpubr : visualisation exploratoire des données en R

Des graphiques EDA prêts à publier en une ligne — boîtes à moustaches, violons, points, barres, densité et corrélation avec la boîte à outils ggpubr

Data Visualization

Apprenez la visualisation exploratoire des données en R avec ggpubr — boîtes à moustaches, graphiques en violon, strip charts, dot plots, diagrammes en barres et en lignes avec statistiques résumées, histogrammes, densité, ECDF, Q-Q et nuages de points de corrélation, prêts à publier. Une fonction simple par graphique, des palettes de couleurs par groupe, et du R prêt à copier.

Auteur·rice
Date de publication

18 juillet 2026

Modifié

18 juillet 2026

AstuceCe que vous trouverez ici
  • Tracer des graphiques exploratoires prêts à publier en R avec ggpubr — une fonction simple par graphique, sans appels ggplot() verbeux.
  • La boîte à outils EDA complète : ggboxplot, ggviolin, ggstripchart, ggdotplot, ggbarplot, ggline, gghistogram, ggdensity, ggecdf, ggqqplot et ggscatter.
  • Colorer par groupe avec des palettes de revue (jco/npg), ajouter des statistiques résumées (moyenne, médiane, jitter), combiner plusieurs variables dans un seul panneau, et poser des p-values sur un graphique.
  • Chaque figure est rendue à partir de vrai code R prêt à copier, à l’aide de données intégrées — vous n’avez besoin que de ggpubr.

L’analyse exploratoire des données (EDA) est la première chose que vous faites avec un nouveau jeu de données : tracer les distributions, comparer les groupes, vérifier les relations. ggplot2 peut tout dessiner, mais sa syntaxe en couches demande de taper beaucoup de code pour un simple coup d’œil — et elle est difficile à retenir quand vous voulez juste une boîte à moustaches, colorée par groupe, avec les points par-dessus.

ggpubr est une surcouche de ggplot2 qui vous offre exactement cela : des graphiques prêts à publier à partir d’un seul appel de fonction facile à retenir. Ce billet est une galerie pratique de sa boîte à outils EDA. Nous utilisons les données intégrées iris (150 fleurs, quatre mesures, trois espèces) pour la plupart des graphiques et ToothGrowth (croissance dentaire de cochons d’Inde selon le supplément et la dose) pour les graphiques de statistiques résumées — les deux sont fournis avec R, donc chaque bloc s’exécute tel quel.

Mise en place

Installez ggpubr une fois depuis le CRAN, puis chargez-le. Il attache ggplot2 pour vous, de sorte que les thèmes et les échelles se composent par-dessus n’importe quelle figure ggpubr.

install.packages("ggpubr")
library(ggpubr)

data(iris)          # 150 flowers, 4 measurements, 3 species
data(ToothGrowth)   # tooth length by supplement (VC/OJ) and dose
ToothGrowth$dose <- factor(ToothGrowth$dose)   # treat dose as a group

Deux conventions se retrouvent dans toutes les fonctions ci-dessous. color/fill prennent le nom d’une colonne de regroupement (et non une couleur) pour scinder le graphique par groupe, et palette choisit le jeu de couleurs — nous utilisons "jco", une palette de revue adaptée au daltonisme issue de ggsci, pour les groupes, et l’azur de la marque #3a86d4 pour une série unique.

Boîtes à moustaches avec ggboxplot

La boîte à moustaches est le cheval de bataille de l’EDA. Passez à ggboxplot() les données, une variable de regroupement x et une variable numérique y ; color = "Species" la scinde par groupe et palette = "jco" la colore. Suivant le style maison, nous posons les points bruts par-dessus avec add = "jitter" et marquons la moyenne du groupe — une boîte nue masque la taille d’échantillon et la forme :

ggboxplot(
  iris, x = "Species", y = "Sepal.Length",
  color = "Species", palette = "jco",
  ylab = "Sepal length (cm)", xlab = "Species",
  add = c("mean", "jitter"),
  add.params = list(size = 0.7, jitter = 0.2)
)

A box plot of iris sepal length by species drawn with ggpubr ggboxplot, three boxes in a colourblind-safe journal palette with jittered points and a mean marker on each.

Chaque boîte montre la médiane et l’écart interquartile, les moustaches l’étendue, et les points dispersés chaque fleur individuelle. Virginica a les sépales les plus longs, setosa les plus courts, et les nuages se chevauchent à peine — une séparation nette des groupes que vous lisez d’un coup d’œil.

ggboxplot() gère aussi plusieurs variables y à la fois. Passez un vecteur de noms de colonnes et combine = TRUE pour obtenir une seule figure multi-panneaux — idéal pour parcourir de nombreuses mesures à travers les mêmes groupes sans répéter l’appel :

ggboxplot(
  iris, x = "Species",
  y = c("Sepal.Length", "Petal.Length", "Petal.Width"),
  combine = TRUE,
  color = "Species", palette = "jco",
  ylab = "Measurement (cm)",
  add = "jitter", add.params = list(size = 0.5, jitter = 0.2)
)

A three-panel box plot of iris sepal length, petal length, and petal width by species, each panel coloured by species in the jco palette with jittered points.

Ici, combine = TRUE dessine un panneau par mesure sur une disposition partagée. Remplacez-le par merge = TRUE pour superposer les trois mesures sur un seul axe — pratique quand les variables partagent une échelle et que vous voulez comparer leurs niveaux directement. Pour basculer le graphique à l’horizontale, ajoutez rotate = TRUE ; pour réordonner ou filtrer les groupes sur l’axe, utilisez order =, select = ou remove =.

Graphiques en violon avec ggviolin

Un graphique en violon échange le résumé de la boîte contre la forme complète de la distribution — sa largeur montre où les données s’accumulent. ggviolin() prend les mêmes arguments que ggboxplot() ; ajoutez une fine boîte à l’intérieur avec add = "boxplot" pour conserver la médiane et les quartiles :

ggviolin(
  iris, x = "Species", y = "Petal.Length",
  fill = "Species", palette = "jco",
  ylab = "Petal length (cm)", xlab = "Species",
  add = "boxplot", add.params = list(fill = "white")
)

A violin plot of iris petal length by species drawn with ggpubr ggviolin, each violin filled in the jco palette with a narrow box plot inside showing the median.

Les violons rendent la structure des groupes évidente : les pétales de setosa sont étroitement regroupés autour de valeurs basses (un violon étroit et court), tandis que versicolor et virginica sont plus larges et plus hauts. À la place de la boîte interne, add = "median_iqr" marque la médiane et l’écart interquartile sous forme de point-intervalle — et ggviolin() accepte n’importe lequel de "mean", "mean_sd", "median_iqr", "jitter", et consorts.

Strip charts et dot plots

Quand chaque groupe compte peu d’observations, montrez chaque point plutôt qu’un résumé. ggstripchart() trace une bande dispersée de valeurs brutes ; superposez un résumé avec add = "median_iqr" :

ggstripchart(
  iris, x = "Species", y = "Sepal.Width",
  color = "Species", palette = "jco",
  ylab = "Sepal width (cm)", xlab = "Species",
  add = "median_iqr",
  add.params = list(color = "gray40")
)

A stripchart of iris sepal width by species drawn with ggpubr ggstripchart, jittered points per species in the jco palette with a median and interquartile-range marker on each group.

ggdotplot() reprend la même idée avec des points empilés par valeur, ce qui se lit un peu plus clairement pour de petits échantillons. Les deux gardent les observations individuelles visibles — tout l’intérêt d’un strip chart / dot plot — tandis que le marqueur de résumé ancre le centre et la dispersion du groupe.

Diagrammes en barres et en lignes avec statistiques résumées

Pour des comparaisons planifiées — un traitement à travers plusieurs doses, par exemple — vous tracez généralement une statistique résumée avec une barre d’erreur, et non le nuage brut. ggbarplot() et ggline() calculent le résumé pour vous : passez add = "mean_se" et ils dessinent les moyennes des groupes avec des barres d’erreur standard. Ici, nous utilisons ToothGrowth, en regroupant la longueur des dents par dose et en scindant par supplément :

ggbarplot(
  ToothGrowth, x = "dose", y = "len",
  fill = "supp", palette = "jco",
  position = position_dodge(0.8),
  add = "mean_se",
  ylab = "Tooth length", xlab = "Dose (mg/day)",
  legend.title = "Supplement"
)

A grouped bar plot of mean tooth length by dose and supplement drawn with ggpubr ggbarplot, dodged bars in the jco palette with standard-error bars, orange juice higher than vitamin C at low doses.

Chaque barre est une moyenne de groupe et la moustache est son erreur standard. La tendance est claire : la longueur des dents augmente avec la dose, et le jus d’orange (OJ) dépasse la vitamine C (VC) aux deux doses les plus faibles, mais les deux convergent à la plus élevée. Les mêmes données se lisent encore mieux sous forme de graphique en lignes, qui met en évidence la tendance dose–réponse :

ggline(
  ToothGrowth, x = "dose", y = "len",
  color = "supp", palette = "jco",
  add = "mean_se",
  ylab = "Tooth length", xlab = "Dose (mg/day)",
  legend.title = "Supplement"
)

A line plot of mean tooth length across three doses for two supplements drawn with ggpubr ggline, two rising lines in the jco palette with standard-error bars, converging at the highest dose.

add = "mean_se" réalise à nouveau l’agrégation ; remplacez-le par "mean_sd" ou "mean_ci" pour une bande d’erreur différente. Deux lignes montantes, convergeant à la dose 2 — l’interaction entre la dose et le supplément en un coup d’œil.

Distributions : histogramme et densité

Pour examiner la forme d’une seule variable, tournez-vous vers gghistogram() et ggdensity(). Les deux acceptent add = "mean" pour marquer le centre et rug = TRUE pour un tapis marginal des valeurs brutes. Colorer par groupe superpose les distributions pour que vous puissiez les comparer :

gghistogram(
  iris, x = "Sepal.Length",
  color = "Species", fill = "Species", palette = "jco",
  add = "mean", rug = TRUE,
  bins = 20, xlab = "Sepal length (cm)"
)

A histogram of iris sepal length coloured and filled by species with ggpubr gghistogram, three overlaid distributions in the jco palette with dashed mean lines and a marginal rug.

Les trois histogrammes sont superposés sur le même axe, leurs lignes de moyenne en pointillés montrant le décalage de setosa (à gauche) à virginica (à droite). La version en densité est le pendant lissé — préférable quand les classes sont bruitées ou que les échantillons diffèrent en taille :

ggdensity(
  iris, x = "Sepal.Length",
  color = "Species", fill = "Species", palette = "jco",
  add = "mean", rug = TRUE,
  alpha = 0.4, xlab = "Sepal length (cm)"
)

A density plot of iris sepal length by species drawn with ggpubr ggdensity, three smooth filled curves in the jco palette with dashed mean lines and a marginal rug.

Setosa forme un pic étroit et élevé (faible variance), tandis que versicolor et virginica sont plus étalés et se chevauchent au milieu — les courbes lissées rendent cet étalement et ce chevauchement plus faciles à lire que l’histogramme en classes.

Graphiques ECDF et Q-Q

Deux autres outils de distribution complètent la boîte à outils. La fonction de répartition empirique (ggecdf()) trace la proportion cumulée d’observations inférieures ou égales à chaque valeur — le moyen le plus rapide de comparer des distributions entières et de lire n’importe quel quantile :

ggecdf(
  iris, x = "Sepal.Length",
  color = "Species", palette = "jco",
  xlab = "Sepal length (cm)", ylab = "F(sepal length)"
)

An empirical cumulative distribution plot of iris sepal length by species drawn with ggpubr ggecdf, three rising step curves in the jco palette, setosa shifted left of the others.

La courbe de setosa se situe entièrement à gauche — elle atteint la proportion 1 alors que les autres montent encore, c’est-à-dire que ses valeurs sont systématiquement plus petites. Le graphique quantile-quantile (ggqqplot()) vérifie la normalité en traçant les quantiles de l’échantillon contre les quantiles théoriques d’une loi normale ; des points proches de la ligne de référence signifient une distribution à peu près normale :

ggqqplot(
  iris, x = "Sepal.Length",
  color = "Species", palette = "jco"
)

A quantile-quantile normality plot of iris sepal length by species drawn with ggpubr ggqqplot, points for each species tracking the diagonal reference line within confidence bands.

Au sein de chaque espèce, les points épousent la diagonale et restent à l’intérieur de la bande de confiance, donc la longueur des sépales est proche de la normalité par groupe — la vérification que vous effectuez avant un t-test ou une ANOVA.

Nuages de points de corrélation avec ggscatter

Pour voir comment deux variables numériques sont liées, ggscatter() trace le nuage et — c’est là qu’il brille pour l’EDA — ajoute une droite de régression, une bande de confiance et le coefficient de corrélation avec sa p-value en un seul appel :

ggscatter(
  iris, x = "Sepal.Length", y = "Petal.Length",
  color = "Species", palette = "jco",
  add = "reg.line", conf.int = TRUE,
  cor.coef = TRUE, cor.method = "pearson",
  xlab = "Sepal length (cm)", ylab = "Petal length (cm)"
)

A scatter plot of iris petal length against sepal length coloured by species with ggpubr ggscatter, per-species points in the jco palette with regression lines, confidence bands, and correlation coefficients annotated.

add = "reg.line" ajuste une courbe de tendance par espèce, conf.int = TRUE ombre son incertitude, et cor.coef = TRUE affiche un coefficient de corrélation avec sa p-value. Un point à connaître : avec une couleur par groupe, cet unique R = 0.87 annoté est la corrélation globale (agrégée) sur l’ensemble des 150 fleurs — et non une valeur par espèce. Elle paraît très forte en partie parce que les trois espèces occupent des positions différentes le long des deux axes. Au sein d’une espèce, le tableau est plus nuancé : le r de Pearson vaut 0.86 pour virginica et 0.75 pour versicolor, mais seulement 0.27 pour setosa — dont la droite de régression est presque plate. Pour annoter plutôt le coefficient par groupe, ajoutez stat_cor(aes(color = Species)) ; pour rapporter honnêtement la valeur agrégée, retirez le regroupement. Pour une version à série unique, définissez color = "#3a86d4" pour l’azur de la marque.

Combiner plusieurs graphiques avec ggarrange

Enfin, ggarrange() assemble des objets ggpubr individuels (ou tout ggplot) en un panneau étiqueté — la figure que vous déposez directement dans un rapport. Construisez chaque graphique, puis disposez-les dans une grille avec une légende partagée :

p_box <- ggboxplot(iris, x = "Species", y = "Petal.Length",
                   color = "Species", palette = "jco", add = "jitter")
p_violin <- ggviolin(iris, x = "Species", y = "Petal.Length",
                     fill = "Species", palette = "jco", add = "boxplot",
                     add.params = list(fill = "white"))
p_density <- ggdensity(iris, x = "Petal.Length",
                       color = "Species", fill = "Species",
                       palette = "jco", alpha = 0.4)
p_scatter <- ggscatter(iris, x = "Sepal.Length", y = "Petal.Length",
                       color = "Species", palette = "jco",
                       add = "reg.line")

ggarrange(
  p_box, p_violin, p_density, p_scatter,
  labels = c("A", "B", "C", "D"),
  ncol = 2, nrow = 2,
  common.legend = TRUE, legend = "bottom"
)

A two-by-two arranged figure combining an iris box plot, violin plot, density plot, and correlation scatter plot, each coloured by species in the jco palette with panel labels A to D and one shared legend.

labels étiquette chaque panneau (A–D) comme le fait une figure de revue, ncol/nrow définissent la grille, et common.legend = TRUE fond les quatre légendes en une seule. Ce seul appel transforme une poignée de graphiques exploratoires en une figure finie, prête à publier.

Ajouter des p-values à un graphique

Parce que ce sont des objets ggplot sous le capot, vous pouvez superposer la couche stat_compare_means() de ggpubr pour annoter directement des comparaisons de groupes. Donnez-lui les paires que vous voulez tester et elle ajoute les crochets de significativité :

my_comparisons <- list(c("setosa", "versicolor"), c("versicolor", "virginica"))

ggboxplot(iris, x = "Species", y = "Sepal.Length",
          color = "Species", palette = "jco",
          add = "jitter") +
  stat_compare_means(comparisons = my_comparisons)

A box plot of iris sepal length by species with ggpubr stat_compare_means brackets comparing setosa to versicolor and versicolor to virginica, both marked highly significant.

Les crochets portent les p-values par paires (Wilcoxon par défaut ; définissez method = "t.test" pour un t-test), transformant une boîte à moustaches exploratoire en une comparaison défendable. Pour le traitement complet — le bon test, global versus par paires, et la mise en forme des étiquettes — voir les leçons ggpubr sur la p-value référencées ci-dessous.

A multi-panel ggpubr gallery: a grouped box plot with jittered points, a violin plot, a density plot, and a correlation scatter plot of the iris data, coloured by species with a colourblind-safe journal palette.

Questions fréquentes

ggpubr (« ggplot2 based publication ready plots ») est un package R qui enveloppe ggplot2 dans des fonctions faciles à utiliser pour les graphiques courants — ggboxplot(), ggviolin(), ggbarplot(), ggscatter(), gghistogram(), et plus encore. Il produit des figures prêtes à publier avec des réglages par défaut judicieux (palettes de revue, statistiques résumées, p-values sur le graphique) à partir d’un seul appel de fonction, pour que vous n’ayez pas à assembler un ggplot() complet couche par couche.

ggplot2 est le moteur flexible de la grammaire des graphiques ; ggpubr en est une couche fine et conviviale posée par-dessus. Tout ce que ggpubr dessine, ggplot2 peut le dessiner aussi — mais ggpubr condense les graphiques EDA courants en une seule fonction facile à retenir chacun, ajoute des fonctionnalités que les chercheurs recherchent (palettes de couleurs par groupe, barres d’erreur, coefficients de corrélation, crochets de significativité), et renvoie un objet ggplot ordinaire que vous pouvez continuer à personnaliser avec +.

Passez le nom d’une colonne de regroupement à color = (pour les contours et les points) ou fill = (pour les formes remplies) — par exemple ggboxplot(iris, x = "Species", y = "Sepal.Length", color = "Species"). Puis réglez palette = sur un jeu de couleurs : une palette de revue comme "jco" ou "npg" (adaptée au daltonisme), un nom RColorBrewer, ou un vecteur personnalisé tel que c("#3a86d4", "#E69F00").

Utilisez l’argument add =. Sur une boîte à moustaches ou un violon, add = "jitter" superpose les points bruts et add = "mean" (ou "median_iqr", "mean_sd") marque le centre. Sur un diagramme en barres ou en lignes, add = "mean_se" calcule la moyenne du groupe et trace automatiquement des barres d’erreur standard — ggbarplot() et ggline() réalisent l’agrégation pour vous, donc vous passez les données brutes, et non des valeurs pré-résumées.

Ajoutez la couche stat_compare_means() de ggpubr avec +. Donnez-lui les paires à tester — stat_compare_means(comparisons = list(c("A", "B"))) — et elle dessine les crochets de significativité avec les p-values (Wilcoxon par défaut ; définissez method = "t.test"). Appelez-la sans comparisons pour afficher plutôt un unique test global (Kruskal-Wallis / ANOVA) sur le graphique.

Pour aller plus loin dans /learn

Ce billet est la galerie ciblée. Pour les leçons complètes, pas à pas, sur chaque graphique — chaque argument, l’interprétation et des exercices pratiques — voir les séries ggpubr et ggplot2, verrouillées par la reproductibilité :

Sur le même sujet

🟢 Avec un agent IA

Demandez à Prova « trace une boîte à moustaches prête à publier de mes données, colorée par groupe, avec des p-values sur le graphique » — elle répond avec du code que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demander à Prova →

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

Citation

BibTeX
@online{kassambara2026,
  author = {Kassambara, Alboukadel},
  title = {ggpubr : visualisation exploratoire des données en R},
  date = {2026-07-18},
  url = {https://www.datanovia.com/blog/ggpubr-exploratory-data-visualization},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2026. “ggpubr : visualisation exploratoire des données en R.” July 18. https://www.datanovia.com/blog/ggpubr-exploratory-data-visualization.