
Dans cet article, je vous présente une solution simple et efficace pour personnaliser l’apparence de vos tableaux sous Quarto, tout en garantissant un rendu cohérent dans les trois formats principaux : HTML, Word (docx) et PDF — le tout sans dupliquer vos chunks.
Une démonstration vidéo est disponible en bas de cette page, ou simplement en cliquant ici
Dans le cadre de mes prestations en méthodologie clinique, j’évalue fréquemment la précision d’un paramètre, comme un taux d’échec, en étudiant la largeur de son intervalle de confiance à 95 % selon différentes conditions — par exemple, en fonction de la valeur cible de ce taux et du nombre de patients inclus.
Je réalise ces calculs avec R, dans des documents Quarto, ce qui me permet d’automatiser la génération des tableaux récapitulatifs. J’y mets en évidence les combinaisons de conditions qui conduisent à une largeur d’intervalle inférieure ou égale à un seuil donné (10 % par exemple), en jouant sur la couleur de fond ou de police, ou encore en appliquant du gras ou de l’italique.
Je génère généralement une version HTML pour mon propre usage, et des versions Word ou PDF pour mes clients, afin qu’ils puissent annoter les résultats si besoin. J’ai donc besoin que la mise en forme soit définie une seule fois dans le code, et qu’elle soit fidèlement conservée dans tous les formats de sortie.
Cela paraît simple, mais en pratique, ce n’est pas toujours si évident. Dans cet article, je vous montre comment je procède.
La méthode que j’emploie se déroule en trois étapes :
flextable grâce aux fonctions bg(), italic(), color(), bold(), etc.Dans l’exemple ci-dessous, je calcule l’intervalle de confiance à 95% d’un taux d’échec, en le faisant varier de 10% à 30%, et en faisant varier le nombre de sujets inclus entre 100 et 300.
Tx_echec_cible <- seq(0.1, 0.3, by=0.1)
Nb_sujets <- seq(100, 300, by=50)
tab <- expand_grid(Tx_echec_cible , Nb_sujets) %>%
rowwise() %>%
mutate(
borne_basse=binom.confint(Nb_sujets*Tx_echec_cible,Nb_sujets,method="wilson", conf.level = 0.95)$lower,
borne_haute=binom.confint(Nb_sujets*Tx_echec_cible,Nb_sujets,method="wilson", conf.level = 0.95)$upper,
largeur = borne_haute-borne_basse,
) %>%
mutate(across(everything(), ~ round(., 2))) Voici le tableau brut :
tab
# A tibble: 15 × 5
# Rowwise:
Tx_echec_cible Nb_sujets borne_basse borne_haute largeur
<dbl> <dbl> <dbl> <dbl> <dbl>
1 0.1 100 0.06 0.17 0.12
2 0.1 150 0.06 0.16 0.1
3 0.1 200 0.07 0.15 0.08
4 0.1 250 0.07 0.14 0.07
5 0.1 300 0.07 0.14 0.07
6 0.2 100 0.13 0.29 0.16
7 0.2 150 0.14 0.27 0.13
8 0.2 200 0.15 0.26 0.11
9 0.2 250 0.16 0.25 0.1
10 0.2 300 0.16 0.25 0.09
11 0.3 100 0.22 0.4 0.18
12 0.3 150 0.23 0.38 0.15
13 0.3 200 0.24 0.37 0.13
14 0.3 250 0.25 0.36 0.11
15 0.3 300 0.25 0.35 0.1 Je souhaite ici mettre en évidence les lignes où la largeur de l’intervalle de confiance est inférieure ou égale à 10 %, en modifiant la couleur de fond et le style du texte dans la colonne largeur.
tab %>%
flextable() %>%
bg(i = ~ largeur <= 0.1, bg = "lightblue") %>%
color(i = ~ largeur <= 0.1, j = "largeur", color = "red") %>%
bold(i = ~ largeur <= 0.1, j = "largeur") %>%
italic(i = ~ largeur <= 0.1, j = "largeur") %>%
autofit() # permet d'adapter la largeur des colonnes au contenu Voici le rendu html :

Pour pouvoir générer les trois formats principaux de document (html, docx et pdf), vous devez inclure les formats souhaités dans l’en-tête YAML de votre document Quarto. Ensuite, il suffit d’utiliser le menu Render pour générer chaque version du document.

Voici l’apparence du tableau généré avec Quarto et flextable, dans les formats html (en haut à gauche), word(en haut à droite) et pdf (en bas)



Le package flextable s’intègre parfaitement à Quarto, ce qui facilite l’ajout de légendes et de renvois automatiques à vos tableaux. Il vous suffit d’ajouter dans votre chunk les options tbl-cap et label, comme ceci :
```{r}
#| tbl-cap: "Caclul de la précision du taux d'échec, en fonction du nombre de sujets inclus, et du taux d'échec cible"
#| label: tbl-precision
tab %>%
flextable() %>%
bg(i = ~ largeur <= 0.1, bg = "lightblue") %>%
color(i = ~ largeur <= 0.1, j = "largeur", color = "red") %>%
bold(i = ~ largeur <= 0.1, j = "largeur") %>%
italic(i = ~ largeur <= 0.1, j = "largeur") %>%
autofit()
```
J’espère que cet article vous aidera à produire des tableaux plus élégants, plus lisibles et surtout compatibles avec tous vos formats de sortie dans Quarto.
Et vous, quels sont les problèmes que vous rencontrez avec Quarto ? N’hésitez pas à les partager en commentaire (en bas de la page) : je me ferai un plaisir de vous aider si je le peux — et peut-être que d’autres lecteurs de la communauté auront aussi des suggestions à vous proposer !
Abonnez-vous gratuitement à la lettre de diffusion du blog pour ne rien manquer !
Vous serez directement informés de la publication de mes nouveaux articles, de la mise à disposition de ressources exclusives, et des actualités sur mes formations.
Vous recevrez également un cadeau 🎁 de bienvenu : des fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R
Vous pouvez soutenir mon travail en faisant un don libre sur le Tipeee du blog

Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.
3 réponses
Vous êtes magnifique
Vous avez une élégance pédagogique. Bien cordialement.
tres bien pour un travail efficace