Créer une image à partir d'un flextable

David Gohel

2019/05/23

flextable 0.5.4 est maintenant sur le CRAN. Cette version contient une nouvelle option de sortie qui répond à la demande de quelques utilisateurs : la capacité à sauver les flextables en tant qu’images grâce à la fonction save_as_image.

La solution existait déjà mais elle était un peu perdue dans une question de stackoverflow au lieu d’être implémentée proprement dans flextable.

Cette fonctionnalité a ouvert d’autres possibilités ; vous pouvez maintenant utiliser la méthode plot, ainsi que as_raster, et faire du raster ce que vous voulez (par exemple le combiner avec un objet ggplot).

Demo

D’abord, on créer un flextable simple.

library(flextable)
ft <- flextable( head( mtcars ) )
ft <- autofit(ft)
ft

mpg

cyl

disp

hp

drat

wt

qsec

vs

am

gear

carb

21.0

6

160

110

3.90

2.620

16.46

0

1

4

4

21.0

6

160

110

3.90

2.875

17.02

0

1

4

4

22.8

4

108

93

3.85

2.320

18.61

1

1

4

1

21.4

6

258

110

3.08

3.215

19.44

1

0

3

1

18.7

8

360

175

3.15

3.440

17.02

0

0

3

2

18.1

6

225

105

2.76

3.460

20.22

1

0

3

1

Si on souhaite le sauver en png, on peut utiliser le code suivant :

save_as_image(ft, path = "name.png")

On peut aussi utiliser la fonction plot :

plot(ft)

Ou encore le combiner avec un graphique ggplot :

library(ggplot2)
library(grid)
library(cowplot)

anyplot <- qplot(speed, dist, data = cars, geom = "point")

ft_raster <- as_raster(ft)

gflextable <- ggplot() + 
  theme_void() + 
  annotation_custom(rasterGrob(ft_raster), xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)

plot_grid(anyplot, gflextable, nrow = 2, ncol = 1, rel_heights = c(4, 1) )

Note à propos de la largeur et hauteur

Il peut être intéressant de connaître les dimensions exactes d’un flextable. Pour cela, on utilise la fonction flextable_dim() qui va renvoyer les dimensions et le ratio d’aspect.

dims <- flextable_dim(ft)
dims
#> $widths
#> [1] 6.212809
#> 
#> $heights
#> [1] 2.035298
#> 
#> $aspect_ratio
#> [1] 0.327597

Il faudra par exemple utiliser ces informations pour renseigner les options knitr du chunk qui produit le graphique avec plot : fig.asp, fig.width et fig.height.