# Rajouter des intervalles de confiance avec ggplot

Laurent Cauquil

► To cite this version:

Laurent Cauquil. Rajouter des intervalles de confiance avec ggplot. 2024. hal-04603540

HAL Id: hal-04603540

https://hal.inrae.fr/hal-04603540

Submitted on 10 Jun 2024

HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-
entific research documents, whether they are pub-
lished or not. The documents may come from
teaching and research institutions in France or
abroad, or from public or private research centers.

L'archive ouverte pluridisciplinaire HAL, est
destinée au dépôt et à la diffusion de documents
scientifiques de niveau recherche, publiés ou non,
émanant des établissements d'enseignement et de
recherche français ou étrangers, des laboratoires
publics ou privés.

<figure><img src="image_1.png" /></figure>

Open licence - etalab
# Rajouter des intervalles de confiance avec ggplot

## Objectif

On se propose de produire un graphique qui représente les moyennes et intervalles de confiance des mesures de richesse bactérienne d'échantillons issus de différents sites du tractus digestif de lapin à travers différentes articles.

<figure><img src="image_1.png" /><figcaption>Graphique attendu:</figcaption></figure>

Nous allons procéder par étapes:

* Affichage des moyennes sous forme de points

* Affichage des intervalles de confiances avec des barres

* Affichage du nombre total d'échantillons par matrice et par étude

* Affichage du nombre total d'échantillons par étude

* Changement des couleurs

* Customisation du graph
# Rajouter des intervalles de confiance avec ggplot

## Objectif

On se propose de produire un graphique qui représente les moyennes et intervalles de confiance des mesures de richesse bactérienne d'échantillons issus de différents sites du tractus digestif de lapin à travers différentes articles.

<figure><img src="image_2.png" /><figcaption>Graphique attendu:</figcaption></figure>

Nous allons procéder par étapes:

* Affichage des moyennes sous forme de points

* Affichage des intervalles de confiances avec des barres

* Affichage du nombre total d'échantillons par matrice et par étude

* Affichage du nombre total d'échantillons par étude

* Changement des couleurs

* Customisation du graph
# Packages

library(dplyr)

library(ggplot2)

library(ggrepel)

library(pals)

# Jeu de données

## Importation et aperçu des données

alpha_div <- readRDS("data/alpha_div.rds")

alpha_div

# A tibble: 204 × 3

matrix study Measure

<chr> <chr> <dbl>

1 feces Liu 2022 142

2 feces Liu 2022 231

3 feces Liu 2022 183

4 feces Liu 2022 197

5 feces Liu 2022 201

6 feces Liu 2022 235

7 feces Liu 2022 173

8 feces Liu 2022 273

9 feces Liu 2022 243

10 feces Liu 2022 232

# i 194 more rows

Il s'agit d'un data.frame avec 3 colonnes:

* matrix: compartiment de l'appareil digestif

* study: auteur et année de sortie de l'article

* Measure: richesse mesurée dans chaque échantillon

# Table de contingence

La fonction `table()` nous permet d'afficher la table de contingence des échantillons répartis entre les matrices et les articles

table(alpha_div[, 1:2])

matrix study Cotozolo 2021 Dabou 2020 Liu 2022
# Packages

library(dplyr)

library(ggplot2)

library(ggrepel)

library(pals)

# Jeu de données

## Importation et aperçu des données

alpha_div <- readRDS("data/alpha_div.rds")
alpha_div

# A tibble: 204 × 3

<table><thead><tr><th>matrix</th><th>study</th><th>Measure</th></tr><tr><th>&lt;chr&gt;</th><th>&lt;chr&gt;</th><th>&lt;dbl&gt;</th></tr></thead><tbody><tr><td>1</td><td>feces</td><td>Liu 2022</td><td>142</td></tr><tr><td>2</td><td>feces</td><td>Liu 2022</td><td>231</td></tr><tr><td>3</td><td>feces</td><td>Liu 2022</td><td>183</td></tr><tr><td>4</td><td>feces</td><td>Liu 2022</td><td>197</td></tr><tr><td>5</td><td>feces</td><td>Liu 2022</td><td>201</td></tr><tr><td>6</td><td>feces</td><td>Liu 2022</td><td>235</td></tr><tr><td>7</td><td>feces</td><td>Liu 2022</td><td>173</td></tr><tr><td>8</td><td>feces</td><td>Liu 2022</td><td>273</td></tr><tr><td>9</td><td>feces</td><td>Liu 2022</td><td>243</td></tr><tr><td>10</td><td>feces</td><td>Liu 2022</td><td>232</td></tr></tbody><tfoot><tr><td colspan="3"># i 194 more rows</td><td></td></tr></tfoot></table>

Il s'agit d'un data.frame avec 3 colonnes:

* matrix: compartiment de l'appareil digestif

* study: auteur et année de sortie de l'article

* Measure: richesse mesurée dans chaque échantillon

# Table de contingence

La fonction `table()` nous permet d'afficher la table de contingence des échantillons répartis entre les matrices et les articles

table(alpha_div[, 1:2])

matrix study Cotozolo 2021 Dabou 2020 Liu 2022
<table><tr><td>cecum</td><td>14</td><td>24</td><td>12</td></tr><tr><td>feces</td><td>0</td><td>58</td><td>70</td></tr><tr><td>ileum</td><td>14</td><td>0</td><td>0</td></tr><tr><td>jejunum</td><td>12</td><td>0</td><td>0</td></tr></table>

# Affichage des moyennes sous forme de points

## Calcul des moyennes

On associe la fonction `group_by()` et `summarise()` pour calculer les moyennes par matrice et par étude

La variable `moy` est créée et la variable `Measure` disparaisse de la table.

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE), .groups = NULL)
```

`summarise()` has grouped output by 'study'. You can override using the `*.groups` argument.

```
# A tibble: 7 x 3
# Groups: study [3]
  study      matrix      moy
  <chr>      <chr>      <dbl>
1 Cotozolo 2021 cecum      495.
2 Cotozolo 2021 ileum      372.
3 Cotozolo 2021 jejunum     277.
4 Dabou 2020   cecum       718.
5 Dabou 2020   feces       799.
6 Liu 2022     cecum       487.
7 Liu 2022     feces       214.
```

## Initialisation du graphique

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
              y = moy))
```

`summarise()` has grouped output by 'study'. You can override using the `*.groups` argument.
<table><tr><td>cecum</td><td>14</td><td>24</td><td>12</td></tr><tr><td>feces</td><td>0</td><td>58</td><td>70</td></tr><tr><td>ileum</td><td>14</td><td>0</td><td>0</td></tr><tr><td>jejunum</td><td>12</td><td>0</td><td>0</td></tr></table>

# Affichage des moyennes sous forme de points

## Calcul des moyennes

On associe la fonction `group_by()` et `summarise()` pour calculer les moyennes par matrice et par étude

La variable `moy` est créée et la variable `Measure` disparaisse de la table.

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE), .groups = NULL)
```

`summarise()` has grouped output by 'study'. You can override using the `*.groups` argument.

```
# A tibble: 7 x 3
# Groups: study [3]
  study      matrix      moy
  <chr>      <chr>      <dbl>
1 Cotozolo 2021 cecum      495.
2 Cotozolo 2021 ileum      372.
3 Cotozolo 2021 jejunum     277.
4 Dabou 2020   cecum       718.
5 Dabou 2020   feces       799.
6 Liu 2022     cecum       487.
7 Liu 2022     feces       214.
```

## Initialisation du graphique

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy))
```

`summarise()` has grouped output by 'study'. You can override using the `*.groups` argument.
<figure><img src="image_2.png" /></figure>

## Rotation du graphique

La fonction `coord flip()` "transpose" le graphique

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy)) +
  coord flip()
```

`summarise()` has grouped output by 'study'. You can override using the `*.groups` argument.
<figure><img src="image_3.png" /></figure>

## Rotation du graphique

La fonction `coord flip()` "transpose" le graphique

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy)) +
  coord flip()
```

`summarise()` has grouped output by 'study'. You can override using the `*.groups` argument.
<figure><img src="image_3.png" /></figure>

## Ajout des moyennes au graph

On utilise la fonction `geom_point()` qui récupère les coordonnées définies par la fonction `aes()` dans la fonction `ggplot()`

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy)) +
  coord flip() +
  geom_point()
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
<figure><img src="image_4.png" /></figure>

## Ajout des moyennes au graph

On utilise la fonction `geom_point()` qui récupère les coordonnées définies par la fonction `aes()` dans la fonction `ggplot()`

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy)) +
  coord flip() +
  geom_point()
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
<figure><img src="image_4.png" /></figure>

Ajout des couleurs en fonction de la matrice

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy,
             color = matrix)) +
  coord flip() +
  geom_point()
```

`summarise()` has grouped output by 'study'. You can override using the
`'.groups'` argument.
<figure><img src="image_5.png" /></figure>

Ajout des couleurs en fonction de la matrice

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE)) |>
  ggplot(aes(x = study,
             y = moy,
             color = matrix)) +
  coord flip() +
  geom_point()
```

`summarise()` has grouped output by 'study'. You can override using the
`'.groups'` argument.
<figure><img src="image_5.png" /></figure>

Augmente la taille des points

Comme on définie la taille pour tous les points sans rapports avec les données, le paramètre *size* n'est pas positionné dans l'aes()

```
alpha_div |>
group_by(study, matrix) |>
summarise(moy = mean(Measure, na.rm = TRUE)) |>
ggplot(aes(x = study,
           y = moy,
           color = matrix)) +
coord flip() +
geom_point(size = 3)
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.
<figure><img src="image_6.png" /></figure>

Augmente la taille des points

Comme on définie la taille pour tous les points sans rapports avec les données, le paramètre *size* n'est pas positionné dans l'aes()

```
alpha_div |>
group_by(study, matrix) |>
summarise(moy = mean(Measure, na.rm = TRUE)) |>
ggplot(aes(x = study,
           y = moy,
           color = matrix)) +
coord flip() +
geom_point(size = 3)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
<figure><img src="image_6.png" /></figure>

# Affichage des intervalles de confiances avec des barres

On intègre les intervalles de confiance à notre jeu de données

## Calcul des intervalles de confiances

On utilise la fonction `t.test()` dans le `summarise()`

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2])
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.

```
# A tibble: 7 x 5
```

```
# Groups: study [3]
```

<table><thead><tr><th>study</th><th>matrix</th><th>moy</th><th>CI_min</th><th>CI_max</th></tr></thead><tbody><tr><td>&lt;chr&gt;</td><td>&lt;chr&gt;</td><td>&lt;dbl&gt;</td><td>&lt;dbl&gt;</td><td>&lt;dbl&gt;</td></tr><tr><td>1</td><td>Cotozolo 2021</td><td>cecum</td><td>495.</td><td>521.</td></tr><tr><td>2</td><td>Cotozolo 2021</td><td>ileum</td><td>372.</td><td>429.</td></tr><tr><td>3</td><td>Cotozolo 2021</td><td>jejunum</td><td>277.</td><td>304.</td></tr></tbody></table>
<figure><img src="image_7.png" /></figure>

# Affichage des intervalles de confiances avec des barres

On intègre les intervalles de confiance à notre jeu de données

## Calcul des intervalles de confiances

On utilise la fonction `t.test()` dans le `summarise()`

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2])
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.

```
# A tibble: 7 x 5
```

```
# Groups: study [3]
```

<table><thead><tr><th>study</th><th>matrix</th><th>moy</th><th>CI_min</th><th>CI_max</th></tr></thead><tbody><tr><td>&lt;chr&gt;</td><td>&lt;chr&gt;</td><td>&lt;dbl&gt;</td><td>&lt;dbl&gt;</td><td>&lt;dbl&gt;</td></tr><tr><td>1</td><td>Cotozolo 2021</td><td>cecum</td><td>495.</td><td>521.</td></tr><tr><td>2</td><td>Cotozolo 2021</td><td>ileum</td><td>372.</td><td>429.</td></tr><tr><td>3</td><td>Cotozolo 2021</td><td>jejunum</td><td>277.</td><td>304.</td></tr></tbody></table>
4 Dabou 2020 cecum 718. 686. 751.
5 Dabou 2020 feces 799. 779. 819.
6 Liu 2022 cecum 487. 358. 617.
7 Liu 2022 feces 214. 202. 226.

## Ajout des intervalles de confiance au graph

On utilise la fonction `geom_errorbar()`

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2]) |>
  ggplot(aes(x = study,
    y = moy,
    color = matrix)) +
  coord flip() +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = CI_min,
    ymax = CI_max))
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.

<figure><img src="image_7.png" /></figure>
4 Dabou 2020 cecum 718. 686. 751.
5 Dabou 2020 feces 799. 779. 819.
6 Liu 2022 cecum 487. 358. 617.
7 Liu 2022 feces 214. 202. 226.

## Ajout des intervalles de confiance au graph

On utilise la fonction `geom_errorbar()`

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2]) |>
  ggplot(aes(x = study,
    y = moy,
    color = matrix)) +
  coord flip() +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = CI_min,
    ymax = CI_max))
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_8.png" /></figure>
# Affichage du nombre total d'échantillon par matrice et par étude

## Récupération du nombre d'échantillons par matrice et par étude

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n())
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.

```
# A tibble: 7 × 6
# Groups: study [3]
study      matrix      moy   CI_min   CI_max     nb
<chr>      <chr>      <dbl>  <dbl>  <dbl> <int>
1 Cotozolo 2021 cecum    495.  470.  521.    14
2 Cotozolo 2021 ileum   372.  316.  429.    14
3 Cotozolo 2021 jejunum  277.  249.  304.    12
4 Dabou 2020   cecum    718.  686.  751.    24
5 Dabou 2020   feces    799.  779.  819.    58
6 Liu 2022     cecum    487.  358.  617.    12
7 Liu 2022     feces    214.  202.  226.    70
```

## Affichage du nombre d'échantillons par matrice et par étude

Plusieurs fonctions disponibles:

* `geom_text()`

* `geom_label()`

* `geom_text_repel()`

* `geom_label_repel()`

Caractéristiques de ces fonctions:

* Les fonctions `geom_text()` et `geom_label()` sont incluses dans le package ggplot2, les fonctions `geom_text_repel()` et `geom_label_repel()` proviennent du package ggrepel

* Les 2 fonctions `geom_text()` et `geom_text_repel()` affiche juste un texte alors que les fonctions `geom_label()` et `geom_label_repel()` affiche un texte à l'intérieur d'un boîte configurable

* Les 2 fonctions `geom_text_repel()` et `geom_label_repel()` issues du package ggrepel positionnent automatiquement les textes et boîtes de façon à ce qu'elles ne se superposent pas.
# Affichage du nombre total d'échantillon par matrice et par étude

## Récupération du nombre d'échantillons par matrice et par étude

```
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n())
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.

```
# A tibble: 7 × 6
# Groups: study [3]
 study      matrix      moy   CI_min   CI_max     nb
<chr>      <chr>      <dbl>  <dbl>  <dbl>  <int>
1 Cotozolo 2021 cecum    495.  470.  521.    14
2 Cotozolo 2021 ileum   372.  316.  429.    14
3 Cotozolo 2021 jejunum  277.  249.  304.    12
4 Dabou 2020   cecum    718.  686.  751.    24
5 Dabou 2020   feces    799.  779.  819.    58
6 Liu 2022     cecum    487.  358.  617.    12
7 Liu 2022     feces    214.  202.  226.    70
```

## Affichage du nombre d'échantillons par matrice et par étude

Plusieurs fonctions disponibles:

* `geom_text()`

* `geom_label()`

* `geom_text_repel()`

* `geom_label_repel()`

Caractéristiques de ces fonctions:

* Les fonctions `geom_text()` et `geom_label()` sont incluses dans le package ggplot2, les fonctions `geom_text_repel()` et `geom_label_repel()` proviennent du package ggrepel

* Les 2 fonctions `geom_text()` et `geom_text_repel()` affiche juste un texte alors que les fonctions `geom_label()` et `geom_label_repel()` affiche un texte à l'intérieur d'un boîte configurable

* Les 2 fonctions `geom_text_repel()` et `geom_label_repel()` issues du package ggrepel positionnent automatiquement les textes et boîtes de façon à ce qu'elles ne se superposent pas.
Ces fonctions reprennent les paramètres de l'aes() déjà définis au-dessus, il faut juste rajouter la liaison
avec la variable nb: label = nb

Exemple avec geom_text()

alpha_div |>
group_by(study, matrix) |>
summarise(moy = mean(Measure, na.rm = TRUE),
          CI_min = t.test(Measure)$conf.int[1],
          CI_max = t.test(Measure)$conf.int[2],
          nb = n()) |>
ggplot(aes(x = study,
           y = moy,
           color = matrix,
           label = nb)) +
coordflip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
                  ymax = CI_max),
                  width = 0.15,
                  linewidth = .85) +
geom_text()

`summarise()` has grouped output by 'study'. You can override using the
`$.groups` argument.
Ces fonctions reprennent les paramètres de l'aes() déjà définis au-dessus, il faut juste rajouter la liaison
avec la variable nb: label = nb

Exemple avec geom_text()

alpha_div |>
group_by(study, matrix) |>
summarise(moy = mean(Measure, na.rm = TRUE),
          CI_min = t.test(Measure)$conf.int[1],
          CI_max = t.test(Measure)$conf.int[2],
          nb = n()) |>
ggplot(aes(x = study,
           y = moy,
           color = matrix,
           label = nb)) +
coord flip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
                  ymax = CI_max),
                  width = 0.15,
                  linewidth = .85) +
geom_text()

`summarise()` has grouped output by 'study'. You can override using the
`'.groups'` argument.
<figure><img src="image_8.png" /></figure>

Il est possible de positionner les labels avec les paramètres `nudge_x` et `nudge_y` de la fonction

On rajoute le paramètre `show.legend = FALSE` pour enlever le caractère "a" qui se rajoute dans la légende

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = study,
    y = moy,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = CI_min,
    ymax = CI_max),
    width = 0.15,
    linewidth = .85) +
  coord flip() +
  geom_text(nudge_x = .2,
```
<figure><img src="image_9.png" /></figure>

Il est possible de positionner les labels avec les paramètres `nudge_x` et `nudge_y` de la fonction

On rajoute le paramètre `show.legend = FALSE` pour enlever le caractère "a" qui se rajoute dans la légende

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = study,
    y = moy,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = CI_min,
    ymax = CI_max),
    width = 0.15,
    linewidth = .85) +
  coord flip() +
  geom_text(nudge_x = .2,
```
```r
nudge_y = .2,
show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_9.png" /></figure>

## Exemple avec `geom_label()`

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  ggplot(aes(x = study,
    y = moy,
    color = matrix,
    label = nb)) +
  coord flip() +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = CI_min,
    ymax = CI_max),
    width = 0.15,
```
```
nudge_y = .2,
show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_10.png" /></figure>

## Exemple avec `geom_label()`

```
alpha_div |>
group_by(study, matrix) |>
summarise(moy = mean(Measure, na.rm = TRUE),
          CI_min = t.test(Measure)$conf.int[1],
          CI_max = t.test(Measure)$conf.int[2],
          nb = n()) |>
ggplot(aes(x = study,
           y = moy,
           color = matrix,
           label = nb)) +
coord flip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
                  ymax = CI_max),
                  width = 0.15,
```
linewidth = .85) +

geom_label()

`summarise()` has grouped output by 'study'. You can override using the
`.groups` argument.

<figure><img src="image_10.png" /></figure>

geom_label() utilise les mêmes paramètres pour repositionner les textes et boîtes en même temps
Il faut aussi rajouter show.legend = FALSE

alpha_div |>
group_by(study, matrix) |>
summarise(moy = mean(Measure, na.rm = TRUE),
CI_min = t.test(Measure)$conf.int[1],
CI_max = t.test(Measure)$conf.int[2],
nb = n()) |>
group_by(study) |>
mutate(tot = sum nb)) |>
ggplot(aes(x = study,
y = moy,
color = matrix,
label = nb)) +
coord flip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
linewidth = .85) +

geom_label()

`summarise()` has grouped output by 'study'. You can override using the
`.groups` argument.

<figure><img src="image_11.png" /></figure>

geom_label() utilise les mêmes paramètres pour repositionner les textes et boîtes en même temps
Il faut aussi rajouter show.legend = FALSE

alpha_div |>
group_by(study, matrix) |
summarise(moy = mean(Measure, na.rm = TRUE),
CI_min = t.test(Measure)$conf.int[1],
CI_max = t.test(Measure)$conf.int[2],
nb = n()) |
group_by(study) |
mutate(tot = sum nb)) |
ggplot(aes(x = study,
y = moy,
color = matrix,
label = nb)) +
coord flip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
```r
ymax = CI_max),
width = 0.15,
linewidth = .85) +
geom_label(nudge_x = .2,
           nudge_y = .2,
           show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_11.png" /></figure>

On peut également modifier la taille et l'apparence des boîtes avec les paramètres suivants:

* `label padding` = `unit(0.25, "lines")`: taille de la boîte

* `label.r` = `unit(0.15, "lines")`: courbure des coins

* `label.size` = 0.25: épaisseur du trait

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
            CI_min = t.test(Measure)$conf.int[1],
            CI_max = t.test(Measure)$conf.int[2],
            nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
```
```r
ymax = CI_max),
width = 0.15,
linewidth = .85) +
geom_label(nudge_x = .2,
           nudge_y = .2,
           show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_12.png" /></figure>

On peut également modifier la taille et l'apparence des boîtes avec les paramètres suivants:

* `label padding` = `unit(0.25, "lines")`: taille de la boîte

* `label.r` = `unit(0.15, "lines")`: courbure des coins

* `label.size` = 0.25: épaisseur du trait

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
            CI_min = t.test(Measure)$conf.int[1],
            CI_max = t.test(Measure)$conf.int[2],
            nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
```
```r
ggplot(aes(x = study,
           y = moy,
           color = matrix,
           label = nb)) +
coord flip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
                  ymax = CI_max),
              width = 0.15,
              linewidth = .85) +
geom_label(nudge_x = .2,
           nudge_y = .2,
           label padding = unit(1, "lines"),
           label.r = unit(0.5, "lines"),
           label.size = 1,
           show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_12.png" /></figure>

## Package ggrepel

Le package `ggrepel` est un extension du package `ggplot2` qui permet d'éviter la superposition des textes et des étiquettes dans les graphiques.
```r
ggplot(aes(x = study,
           y = moy,
           color = matrix,
           label = nb)) +
coord flip() +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
                 ymax = CI_max),
               width = 0.15,
               linewidth = .85) +
geom_label(nudge_x = .2,
           nudge_y = .2,
           label padding = unit(1, "lines"),
           label.r = unit(0.5, "lines"),
           label.size = 1,
           show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_13.png" /></figure>

## Package ggrepel

Le package `ggrepel` est un extension du package `ggplot2` qui permet d'éviter la superposition des textes et des étiquettes dans les graphiques.
Il contient les fonctions `geom_text_repel()` et `geom_label_repel()` qui sont les équivalents des fonctions `geom_text()` et `geom_label()` de ggplot2

ATTENTION: On ne plus pas utiliser la fonction `coordflip()` avec ces fonctions du package ` ggplot2`. Le bug est apparu lors de la dernière mise à jour

Etant donné que l'on ne peut pas utiliser la fonction `coordflip()`, il suffit d'inverser le coordonnées des axes dans la fonction `aes()` et de changer les paramètres `aes` dans la fonction `geom_errorbar()` !

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
ggplot(aes(x = moy,
  y = study,
  color = matrix,
  label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_text_repel show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
Il contient les fonctions `geom_text_repel()` et `geom_label_repel()` qui sont les équivalents des fonctions `geom_text()` et `geom_label()` de `ggplot2`

ATTENTION: On ne plus pas utiliser la fonction `coordflip()` avec ces fonctions du package ` ggplot2`. Le bug est apparu lors de la dernière mise à jour

Etant donné que l'on ne peut pas utiliser la fonction `coordflip()`, il suffit d'inverser le coordonnées des axes dans la fonction `aes()` et de changer les paramètres `aes` dans la fonction `geom_errorbar()` !

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
ggplot(aes(x = moy,
  y = study,
  color = matrix,
  label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_text_repel show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
<figure><img src="image_13.png" /><figcaption>Même chose pour `geom_label_repel()`</figcaption></figure>

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = moy,
    y = study,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
<figure><img src="image_14.png" /><figcaption>Même chose pour `geom_label_repel()`</figcaption></figure>

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = moy,
    y = study,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel/show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.
<figure><img src="image_14.png" /></figure>

Des paramètres supplémentaires permettent de contrôler les textes et les boîtes ainsi que les espacements

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
ggplot(aes(x = moy,
  y = study,
  color = matrix,
  label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel.box padding = 3,
  show.legend = FALSE)
```
<figure><img src="image_15.png" /></figure>

Des paramètres supplémentaires permettent de contrôler les textes et les boîtes ainsi que les espacements

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
ggplot(aes(x = moy,
  y = study,
  color = matrix,
  label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel.box padding = 3,
  show.legend = FALSE)
```
`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_15.png" /></figure>

## Affichage du nombre total d'échantillon par étude

### Récupération du nombre d'échantillons par étude

Cette fois-ci on groupe par étude et on utilise la fonction `mutate()` pour garder notre tableau de départ.

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(som = sum nb))
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

```r
# A tibble: 7 x 7
# Groups: study [3]
  study   matrix   moy CI_min CI_max   nb som
```
`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_16.png" /></figure>

## Affichage du nombre total d'échantillon par étude

### Récupération du nombre d'échantillons par étude

Cette fois-ci on groupe par étude et on utilise la fonction `mutate()` pour garder notre tableau de départ.

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(som = sum nb))
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

```r
# A tibble: 7 x 7
# Groups: study [3]
  study   matrix   moy CI_min CI_max   nb   som
```
<table><thead><tr><th></th><th>chr</th><th></th><th>chr</th><th></th><th>db1</th><th></th><th>db1</th><th></th><th>db1</th><th></th><th>int</th><th></th><th>int</th></tr></thead><tbody><tr><td>1</td><td>Cotozolo</td><td>2021</td><td>cecum</td><td></td><td>495.</td><td></td><td>470.</td><td></td><td>521.</td><td></td><td>14</td><td></td><td>40</td></tr><tr><td>2</td><td>Cotozolo</td><td>2021</td><td>ileum</td><td></td><td>372.</td><td></td><td>316.</td><td></td><td>429.</td><td></td><td>14</td><td></td><td>40</td></tr><tr><td>3</td><td>Cotozolo</td><td>2021</td><td>jejunum</td><td></td><td>277.</td><td></td><td>249.</td><td></td><td>304.</td><td></td><td>12</td><td></td><td>40</td></tr><tr><td>4</td><td>Dabou</td><td>2020</td><td>cecum</td><td></td><td>718.</td><td></td><td>686.</td><td></td><td>751.</td><td></td><td>24</td><td></td><td>82</td></tr><tr><td>5</td><td>Dabou</td><td>2020</td><td>feces</td><td></td><td>799.</td><td></td><td>779.</td><td></td><td>819.</td><td></td><td>58</td><td></td><td>82</td></tr><tr><td>6</td><td>Liu</td><td>2022</td><td>cecum</td><td></td><td>487.</td><td></td><td>358.</td><td></td><td>617.</td><td></td><td>12</td><td></td><td>82</td></tr><tr><td>7</td><td>Liu</td><td>2022</td><td>feces</td><td></td><td>214.</td><td></td><td>202.</td><td></td><td>226.</td><td></td><td>70</td><td></td><td>82</td></tr></tbody></table>

## Affichage du nombre d'échantillons par étude

On utilise la fonction `geom_label()` pour afficher le nombre total d'échantillons par étude

On fixe manuellement les coordonnées en x à 900

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = moy,
    y = study,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel.box padding = 3,
    show.legend = FALSE) +
  geom_label(aes(x = 900,
    y = study,
    label = tot),
    color = "black",
    show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.
<table><thead><tr><th></th><th>chr</th><th></th><th>chr</th><th></th><th>db1</th><th></th><th>db1</th><th></th><th>db1</th><th></th><th>int</th><th></th><th>int</th></tr></thead><tbody><tr><td>1</td><td>Cotozolo</td><td>2021</td><td>cecum</td><td></td><td>495.</td><td></td><td>470.</td><td></td><td>521.</td><td></td><td>14</td><td></td><td>40</td></tr><tr><td>2</td><td>Cotozolo</td><td>2021</td><td>ileum</td><td></td><td>372.</td><td></td><td>316.</td><td></td><td>429.</td><td></td><td>14</td><td></td><td>40</td></tr><tr><td>3</td><td>Cotozolo</td><td>2021</td><td>jejunum</td><td></td><td>277.</td><td></td><td>249.</td><td></td><td>304.</td><td></td><td>12</td><td></td><td>40</td></tr><tr><td>4</td><td>Dabou</td><td>2020</td><td>cecum</td><td></td><td>718.</td><td></td><td>686.</td><td></td><td>751.</td><td></td><td>24</td><td></td><td>82</td></tr><tr><td>5</td><td>Dabou</td><td>2020</td><td>feces</td><td></td><td>799.</td><td></td><td>779.</td><td></td><td>819.</td><td></td><td>58</td><td></td><td>82</td></tr><tr><td>6</td><td>Liu</td><td>2022</td><td>cecum</td><td></td><td>487.</td><td></td><td>358.</td><td></td><td>617.</td><td></td><td>12</td><td></td><td>82</td></tr><tr><td>7</td><td>Liu</td><td>2022</td><td>feces</td><td></td><td>214.</td><td></td><td>202.</td><td></td><td>226.</td><td></td><td>70</td><td></td><td>82</td></tr></tbody></table>

## Affichage du nombre d'échantillons par étude

On utilise la fonction `geom_label()` pour afficher le nombre total d'échantillons par étude

On fixe manuellement les coordonnées en x à 900

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = moy,
    y = study,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel.box padding = 3,
    show.legend = FALSE) +
  geom_label(aes(x = 900,
    y = study,
    label = tot),
    color = "black",
    show.legend = FALSE)
```

`summarise()` has grouped output by 'study'. You can override using the `.groups` argument.
<figure><img src="image_16.png" /></figure>

## Affichage du text "Total" sur le graphique

Le texte "Total" est positionné manuellement, on utilise la fonction ` annotate()` qui est une couche de type `geom` mais qui n'utilise pas d'aes()

On déclare le type d'annotation (text, segment, line...) puis les coordonnées et les paramètres classiques que l'on retrouve dans les autres geom (color, size...)

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
ggplot(aes(x = moy,
  y = study,
  color = matrix,
  label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
```
<figure><img src="image_17.png" /></figure>

## Affichage du text "Total" sur le graphique

Le texte "Total" est positionné manuellement, on utilise la fonction ` annotate()` qui est une couche de type `geom` mais qui n'utilise pas d'aes().

On déclare le type d'annotation (text, segment, line...) puis les coordonnées et les paramètres classiques que l'on retrouve dans les autres geom (color, size...)

```r
alpha_div |>
group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
group_by(study) |>
  mutate(tot = sum nb)) |>
ggplot(aes(x = moy,
  y = study,
  color = matrix,
  label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
```
```r
g geom_label_repel.box padding = 3,
  show.legend = FALSE) +

 geom_label(aes(x = 900,
               y = study,
               label = tot),
           color = "black",
           show.legend = FALSE) +

 annotate(geom = "text",
        x = 900,
        y = 3.3,
        label = "Total",
        size = 5)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_17.png" /></figure>

## Changement des couleurs

### Palette

On utilise la palette `cols25` du package `pals` qui fournit une palette de 25 couleurs contrastées

```r
pal.bands(col s25)
```
```r
g geom_label_repel.box padding = 3,
  show.legend = FALSE) +

 geom_label(aes(x = 900,
               y = study,
               label = tot),
           color = "black",
           show.legend = FALSE) +

 annotate(geom = "text",
        x = 900,
        y = 3.3,
        label = "Total",
        size = 5)
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_18.png" /></figure>

## Changement des couleurs

### Palette

On utilise la palette `cols25` du package `pals` qui fournit une palette de 25 couleurs contrastées

```r
pal.bands(col s25)
```
Only 25 colors are available with 'cols25'.

<figure><img src="image_18.png" /></figure>

On choisit les 4 couleurs que l'on souhaite dans la fonction `scale_color_manual()` et on en profite pour modifier le titre de la légende

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = moy,
    y = study,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel.box padding = 3,
    show.legend = FALSE) +
```
Only 25 colors are available with 'cols25'.

<figure><img src="image_19.png" /></figure>

On choisit les 4 couleurs que l'on souhaite dans la fonction `scale_color_manual()` et on en profite pour modifier le titre de la légende

```r
alpha_div |>
  group_by(study, matrix) |>
  summarise(moy = mean(Measure, na.rm = TRUE),
    CI_min = t.test(Measure)$conf.int[1],
    CI_max = t.test(Measure)$conf.int[2],
    nb = n()) |>
  group_by(study) |>
  mutate(tot = sum nb)) |>
  ggplot(aes(x = moy,
    y = study,
    color = matrix,
    label = nb)) +
  geom_point(size = 3) +
  geom_errorbar(aes(xmin = CI_min,
    xmax = CI_max),
    width = 0.15,
    linewidth = .85) +
  geom_label_repel.box padding = 3,
    show.legend = FALSE) +
```
```r
g geom_label(aes(x = 900,
                 y = study,
                 label = tot),
           color = "black",
           show.legend = FALSE) +

  annotate(geom = "text",
         x = 900,
         y = 3.3,
         label = "Total",
         size = 5) +

  scale_color_manual("Matrix", values = col s25()[c(3,5,8, 17)])
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_19.png" /></figure>

## Customisation du graphique

Enfin, customisation du graphique avec les fonctions:

* `labs()`: pour les titres des axes

* `theme()`:

* pour les couleurs des axes

* l'aspect de la grille

* couleur de l'arrière-plan
```r
g geom_label(aes(x = 900,
                 y = study,
                 label = tot),
           color = "black",
           show.legend = FALSE) +

  annotate(geom = "text",
         x = 900,
         y = 3.3,
         label = "Total",
         size = 5) +

  scale_color_manual("Matrix", values = col s25()[c(3,5,8, 17)])
```

`summarise()` has grouped output by 'study'. You can override using the `'.groups'` argument.

<figure><img src="image_20.png" /></figure>

## Customisation du graphique

Enfin, customisation du graphique avec les fonctions:

* `labs()`: pour les titres des axes

* `theme()`:

* pour les couleurs des axes

* l'aspect de la grille

* couleur de l'arrière-plan
## couleur des axes
axis line = element_line (color = "grey50")
## enlève les peites lignes de la grille
panel.grid.minor = element Marginal
## change la couleur et l'aspect (pointillé) des grandes lignes de la
grille
panel.grid.minor.y = element_line (color = "grey80",
                                   linetype = "dashed")
## Supprime la couleur de l'arrière-plan
panelett Background = element Marginal

Graphique final

alpha_div |>
group_by(study, matrix) |
reframe(moy = mean(Measure, na.rm = TRUE),
         CI_min = t.test(Measure)$conf.int[1],
         CI_max = t.test(Measure)$conf.int[2],
         nb = n()) |
group_by(study) |
mutate(tot = sum nb) |
ggplot(aes(x = study,
          y = moy,
          color = matrix)) +
geom_point (size = 3) +
geom_errorbar(aes(ymin = CI_min,
                  ymax = CI_max),
                  width = 0.15,
                  linewidth = .85) +
coord flip() +
geom_label(aes label = nb), nudge_x = .2, nudge_y = .2,
            show.legend = FALSE) +
geom_label(aes(x = study,
          y = 900,
          label = tot),
          color = "black",
          show.legend = FALSE) +
 annotate(geom = "text",
         x = 3.3,
         y = 900,
         label = "Total", size = 5) +
scale_color_manual("Matrix", values = cols25()[c(3,5,8, 17)]) +
labs(x = "Etudes",
     y = "Observed") +
## couleur des axes
axis line = element_line (color = "grey50")
## enlève les peites lignes de la grille
panel.grid.minor = element Marginal
## change la couleur et l'aspect (pointillé) des grandes lignes de la
grille
panel.grid.minor.y = element_line (color = "grey80",
                                   linetype = "dashed")
## Supprime la couleur de l'arrière-plan
panelett Background = element Marginal

Graphique final

alpha_div |>
group_by(study, matrix) |
reframe(moy = mean(Measure, na.rm = TRUE),
         CI_min = t.test(Measure)$conf.int[1],
         CI_max = t.test(Measure)$conf.int[2],
         nb = n()) |
group_by(study) |
mutate(tot = sum nb) |
ggplot(aes(x = study,
          y = moy,
          color = matrix)) +
geom_point(size = 3) +
geom_errorbar(aes(ymin = CI_min,
                  ymax = CI_max),
                  width = 0.15,
                  linewidth = .85) +
coord flip() +
geom_label(aes label = nb), nudge_x = .2, nudge_y = .2,
            show.legend = FALSE) +
geom_label(aes(x = study,
          y = 900,
          label = tot),
          color = "black",
          show.legend = FALSE) +
 annotate(geom = "text",
         x = 3.3,
         y = 900,
         label = "Total", size = 5) +
scale_color_manual("Matrix", values = cols25()[c(3,5,8, 17)]) +
labs(x = "Etudes",
     y = "Observed") +
```r
theme(axis line = element_line (color = "grey50"),
      panel.grid.minor = element盲点(),
      panel.grid.minor.y = element_line (color = "grey80",
                                     linetype = "dashed"),
      panel-background = element盲点())
```

<figure><img src="image_20.png" /></figure>
```r
theme(axis line = element_line (color = "grey50"),
      panel.grid.minor = element盲点(),
      panel.grid.minor.y = element_line (color = "grey80",
                                     linetype = "dashed"),
      panel-background = element盲点())
```

<figure><img src="image_21.png" /></figure>