Une des fonctionnalités récentes du package flextable est la capacité à
travailler avec un format ‘grid graphics’. La fonction gen_grob()
génére
un ‘grob’ (Graphical Object) à partir d’un flextable, ce dernier peut ensuite
être ajouté à un graphique ggplot grace au package ‘patchwork’ ou avec
le package ‘grid’.
Ces fonctionnalités nécessitent l’utilisation d’une sortie graphique
utilisant ‘systemfonts’ : svglite::svglite()
, ragg::agg_png()
ou ggiraph::dsvg()
.
Ces packages doivent être utilisés pour garantir que toutes les polices que
vous utilisez seront reconnues par le moteur graphique R.
Le graphique ci-dessus est produit par la fonction gen_grob()
.
Le code associé est disponible dans l’article
Utiliser les masques de grid et flextable
de la ‘galerie flextable’.
Exporter un flextable en png
Les versions antérieures de “flextable” utilisaient les paquets “webshot” ou “webshot2” pour obtenir une image à partir du résultat HTML. Ce mécanisme a été remplacé par l’utilisation de la sortie ‘Grid graphics’ et du paquet ‘ragg’. Cela permet d’avoir un processus d’écriture plus rapide et facilite la maintenance.
Dans un premier temps, on définit quelques paramètres généraux.
library(flextable)
library(gdtools)
set_flextable_defaults(
font.family = "Open Sans", font.color = "#333333",
theme_fun = theme_vanilla,
digits = 2, big.mark = "", na_str = "")
register_gfont("Open Sans") # register Open Sans
Pour enregistrer un tableau au format png, il faut
appeler la fonction save_as_image()
.
Illustrons notre propos avec un tableau fabriqué à
partir du jeu de données ‘palmerpenguins::penguins’.
library(palmerpenguins)
filename <- "head-penguins.png"
ft <- as_flextable(palmerpenguins::penguins) |> bg(bg = "#EFEFEF", part = "all")
save_as_image(ft, path = filename)
La fonction gen_grob
Illustrons notre propos avec notre ‘flextable’ fabriqué à partir du jeu de données ‘penguins’ et un graphique ‘ggplot’.
library(tidyverse)
g1 <- ggplot(penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
geom_point() +
scale_color_viridis_d() +
theme_minimal() +
theme(plot.margin = unit(c(0, 0, 30, 0), "pt"))
Utilisation simple
La fonction gen_grob()
va offrir par défaut un comportement
d’adaptation à l’espace disponible pour le tableau.
library(patchwork)
g1 / gen_grob(ft, just = "bottom")
Cela fonctionne avec toutes les fonctions qui supportent les ‘grid Graphics’ :
g1 +
inset_element(gen_grob(ft |> bg(bg = "#EFEFEFAA", part = "all"), just = "bottom"), 0.1, 0.25, .9, .75) +
theme(
plot.background = element_rect(fill = "transparent"),
panel.background = element_rect(fill = "transparent")
)
Les options de redimensionnements
Il est bien sûr possible de reprendre le contrôle sur ce redimensionnement automatique.
Nous allons utiliser pour cela un petit tableau qui aidera à présenter les options.
set_flextable_defaults(font.family = "Fira Sans Condensed")
register_gfont("Fira Sans Condensed")
dummy_ft <- data.frame(zzzz = ";)") |>
flextable() |>
color(color = "white", part = "all") |>
mk_par(
value = as_paragraph(
as_chunk("made", props = fp_text_default(font.size = 30, color = "#f2af00")),
as_chunk(" with\n", props = fp_text_default(color = "gray", font.size = 15)),
as_chunk("flextable", props = fp_text_default(color = "#c32900", font.size = 45))
),
part = "header") |>
autofit() |>
align(align = "center", part = "all") |>
border_outer(border = fp_border_default(width = 0))
Le tableau dans sa version HTML est le suivant :
dummy_ft
made with |
---|
;) |
Le graphique ci dessous présente quelques options de redimensionnements possibles :
- Le premier tableau sera dimensionné pour s’adapter à la largeur disponible (
fit = "width"
) et les polices seront redimensionnées au maximum possible (scaling = "full"
). - Le deuxième tableau est affiché sans aucun redimensionnement (
fit = "fixed"
). - Le dernier tableau est affiché en utilisant la taille maximum possible (
fit = "auto"
).
design <- "AAA
BBC"
wrap_plots(
dummy_ft |>
bg(bg = "#ff006e", part = "all") |>
gen_grob(fit = "width", scaling = "full", just = "bottom"),
dummy_ft |>
bg(bg = "#3a86ff", part = "all") |>
gen_grob(fit = "fixed"),
dummy_ft |> bg(bg = "#ffbe0b", part = "all") |> gen_grob(),
design = design
)
Déroulement du contenu dans les cellules
Un algorithme est utilisé pour permettre au contenu d’être déroulé dans l’espace disponible de la cellule. Il est activé par défaut.
library(safetyData)
adsl <- adam_adsl[, c("AGE", "SEX", "ARM")]
dat <- summarizor(adsl, by = "ARM")
ft <- as_flextable(dat, spread_first_col = TRUE)
ft |> bg(bg = "#EFEFEF", part = "all") |>
plot(fit = "width", wrapping = TRUE, scaling = FALSE)
On peut désactiver ce comportement avec l’argument wrapping = FALSE
.
ft |> bg(bg = "#EFEFEF", part = "all") |>
plot(fit = "width", wrapping = FALSE, scaling = FALSE)
Suivez nous: - Sites recommandés: R-bloggers R weekly Twitter #rstats Jobs for R-users