Cet exemple utilise une matrice de corrélation comme source de données. On va d’abord créer un data.frame depuis la matrice de corrélation puis on va créer le tableau de reporting avec ‘flextable’.
# correlations ----
library(dplyr)
##
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
##
## filter, lag
## Les objets suivants sont masqués depuis 'package:base':
##
## intersect, setdiff, setequal, union
library(tibble)
correlations <- cor(mtcars) |>
as.data.frame() |>
rownames_to_column(var = "rowname")
correlations
## rowname mpg cyl disp hp drat wt
## 1 mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.68117191 -0.8676594
## 2 cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.69993811 0.7824958
## 3 disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.71021393 0.8879799
## 4 hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.44875912 0.6587479
## 5 drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.00000000 -0.7124406
## 6 wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065 1.0000000
## 7 qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476 -0.1747159
## 8 vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846 -0.5549157
## 9 am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113 -0.6924953
## 10 gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013 -0.5832870
## 11 carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980 0.4276059
## qsec vs am gear carb
## 1 0.41868403 0.6640389 0.59983243 0.4802848 -0.55092507
## 2 -0.59124207 -0.8108118 -0.52260705 -0.4926866 0.52698829
## 3 -0.43369788 -0.7104159 -0.59122704 -0.5555692 0.39497686
## 4 -0.70822339 -0.7230967 -0.24320426 -0.1257043 0.74981247
## 5 0.09120476 0.4402785 0.71271113 0.6996101 -0.09078980
## 6 -0.17471588 -0.5549157 -0.69249526 -0.5832870 0.42760594
## 7 1.00000000 0.7445354 -0.22986086 -0.2126822 -0.65624923
## 8 0.74453544 1.0000000 0.16834512 0.2060233 -0.56960714
## 9 -0.22986086 0.1683451 1.00000000 0.7940588 0.05753435
## 10 -0.21268223 0.2060233 0.79405876 1.0000000 0.27407284
## 11 -0.65624923 -0.5696071 0.05753435 0.2740728 1.00000000
Il faut créer une fonction qui va permettre d’associer une couleur de fond aux cellules en fonction de la valeur de la corrélation correspondante.
Nous aurions pu le faire avec les fonctions disponibles dans le package ‘scales’ mais préférons coder nous même la fonction pour montrer comment créer une fonction de coloriage correspondante à un besoin spécifique.
La fonction va associer une couleur en découpant les valeurs de corrélations par tranches.
cor_color <- function(x){
col_palette <- c("#D73027", "#F46D43", "#FDAE61", "#FEE08B",
"#D9EF8B", "#A6D96A", "#66BD63", "#1A9850")
mycut <- cut(x,
breaks = c(-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1),
include.lowest = TRUE, label = FALSE)
col_palette[mycut]
}
std_border <- fp_border_default(color = "white")
On va appliquer la fonction cor_color()
aux couleurs de fonds des
cellules et on va aussi fixer la largeur et la hauteur des cellules
pour reproduire un effet comme le font les graphiques heatmap.
ft <- flextable(correlations) %>%
border_outer(part = "all", border = std_border) %>%
border_inner(border = std_border, part = "all") %>%
compose(i = 1, j = 1, value = as_paragraph(""), part = "header") %>%
compose(j = ~ . - rowname, value = as_paragraph(""), part = "body") %>%
bg(j = ~ . - rowname, bg = cor_color) %>%
height(height = .5) %>%
hrule(rule = "exact", part = "body") %>%
width(width = .5)
ft
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
mpg | |||||||||||
cyl | |||||||||||
disp | |||||||||||
hp | |||||||||||
drat | |||||||||||
wt | |||||||||||
qsec | |||||||||||
vs | |||||||||||
am | |||||||||||
gear | |||||||||||
carb |