Comment Créer un Beau Graphique dans R Combiné à un Tableau de Statistiques Descriptives

beautiful-plot-in-r-with-summary-statistics-labels-boxplots-with-summary-statistics-1.png


Comment Créer un Beau Graphique dans R Combiné à un Tableau de Statistiques Descriptives

Vous apprendrez à créer de jolies graphiques dans R et à ajouter au graphique un tableau de statistiques descriptives telles que la taille de l’échantillon (n), la médiane, la moyenne et l’IQR. Nous allons également décrire comment créer des graphiques multipanels combinés avec le tableau récapitulatif. Exemples de graphiques illustrés ici : box plot, violon plot, bar plot, line plot ; etc.



Sommaire:

Prérequis

Charger les packages R requis

library(tidyverse)
library(rstatix)
library(ggpubr)

Préparation des données:

# Données de démonstration
data("ToothGrowth")
df <- ToothGrowth
df$dose <- as.factor(df$dose)
# Ajouter une colonne QC aléatoire
set.seed(123)
qc <- rep(c("pass", "fail"), 30)
df$qc <- as.factor(sample(qc, 60))
# Inspecter les données
head(df)
##    len supp dose   qc
## 1  4.2   VC  0.5 fail
## 2 11.5   VC  0.5 pass
## 3  7.3   VC  0.5 fail
## 4  5.8   VC  0.5 pass
## 5  6.4   VC  0.5 pass
## 6 10.0   VC  0.5 pass

Box plots basiques avec ajout de statistiques descriptives

Dans le code R suivant, les valeurs possibles pour l’argument ggfunc sont les fonctions du package R ggpubr, incluant : ggboxplot, ggviolin, ggdotplot, ggbarplot, ggline, etc. Il peut également s’agir de toute autre fonction ggplot qui accepte les arguments suivants: data, x, color, fill, palette, ggtheme, facet.by.

# Graphique basique
ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggboxplot, add = "jitter"
  )

# Colorer par groupes
ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggboxplot, add = "jitter",
  color = "dose", palette = "npg"
  )

Notez que vous pouvez créer pas à pas votre propre graphique et le tableau récapitulatif de statistiques descriptives. Le code R suivant décrit comment combiner le graphique principal et le tableau récapitulatif en une seule figure.

# Calculer des statistiques descriptives
summary.stats <- df %>%
  group_by(dose) %>%
  get_summary_stats() %>%
  select(dose, n, median, iqr)
summary.stats

# Créer un boxplot
bxp <- ggboxplot(
  df, x = "dose", y = "len", add = "jitter", 
  ggtheme = theme_bw()
)

# Visualiser les statistiques descriptives
summary.plot <- ggsummarytable(
  summary.stats, x = "dose", y = c("n", "median", "iqr"),
  ggtheme = theme_bw()
  ) +
  clean_table_theme()

# Combiner le boxplot et le graphique des statistiques descriptives
ggarrange(
  bxp, summary.plot, ncol = 1, align = "v",
  heights = c(0.80, 0.20)
  )

Graphiques groupés avec tableau récapitulatif

Box plots et violin plots groupées

# Plots groupés
ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggboxplot, add = "jitter",
  color = "supp", palette = "npg"
  )

# Changer le type de graphique
ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggviolin, add = c("jitter", "median_iqr"),
  color = "supp", palette = "npg"
  )

Diagrammes en barres et diagrammes en lignes groupés

# Créer un barplot
ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggbarplot, add = c("jitter", "median_iqr"), position = position_dodge(),
  color = "supp", palette = "npg"
  )

# Créer des graphiques en ligne
ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggline, add = c("jitter", "median_iqr"), 
  color = "supp", palette = "npg"
  )

Trois groupes sur l’axe des x

ggsummarystats(
  df, x = "supp", y = "len", 
  ggfunc = ggboxplot, add = c("jitter"), 
  color = "dose", palette = "npg"
  )

Graphiques multipanels avec tableau de synthèse

Arguments clés:

  • facet.by: vecteur de caractères, de longueur 1 ou 2, spécifiant les variables de regroupement pour le découpage du graphe en plusieurs panels. Devrait figurer dans les données.
  • labeller: Vecteur de caractères. Les valeurs possibles sont l’une de label_both (panel étiqueté à la fois par des noms de variables de regroupement et des niveaux) et label_value (panel étiqueté avec seulement des niveaux de regroupement).

Créer des panels en fonction d’une variable de regroupement:

ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggboxplot, add = c("jitter"), 
  color = "dose", palette = "jco",
  facet.by = "supp", labeller = "label_value",
  ggtheme = theme_bw(), legend = "top"
)

Créer des panels en fonction de deux variables de regroupement

ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggboxplot, add = c("jitter"), 
  color = "dose", palette = "jco",
  facet.by = c("supp", "qc"), labeller = "label_both", 
  ggtheme = theme_bw(), legend = "top"
)

Créer des panels indépendants en utilisant l’argument free:

ggsummarystats(
  df, x = "dose", y = "len", 
  ggfunc = ggboxplot, add = c("jitter"), 
  color = "dose", palette = "jco",
  facet.by = c("supp", "qc"), labeller = "label_both", 
  free.panels = TRUE,
  ggtheme = theme_bw(), legend = "top"
)

Construire pas à pas un graphique multipanel personnalisé

Créer un box plot multipanel en utilisant une seule variable de regroupement (supp):

# Regrouper les données par supp
# Appliquer la fonction ggsummarystats à chaque sous-ensemble
df.grouped <- df %>%
  df_split_by(supp, label_col = "panel", labeller = df_label_both) %>%
  mutate(plot_list = map(
    data, ggsummarystats, x = "dose", y = "len",
    ggfunc = ggbarplot, 
    add = c("jitter", "median_iqr"), 
    facet.by = "panel"
    )
  )
df.grouped
## # A tibble: 2 x 4
##   supp  data              panel   plot_list 
##   <fct> <list>            <fct>   <list>    
## 1 VC    <tibble [30 × 4]> supp:OJ <ggsmmrys>
## 2 OJ    <tibble [30 × 4]> supp:VC <ggsmmrys>
# Afficher les graphiques
plot_list <- df.grouped$plot_list
class(plot_list) <- c("ggsummarystats_list", "list")
print(plot_list)



Version: English





No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments