It can be useful to change the text direction when table headers are large. For example, header labels can be rendered as "tbrl" (top to bottom and right to left), corresponding to a 90-degree rotation, or "btlr", corresponding to a 270-degree rotation. This function changes cell text direction. By default, it is "lrtb", which means from left to right and top to bottom.
'Word' and 'PowerPoint' do not handle automatic height with rotated headers.
Therefore, you need to set header heights (with the height() function)
and set the rule to "exact" for row heights (with the hrule() function);
otherwise, Word and PowerPoint outputs will have insufficient height
to properly display the text.
flextable does not rotate text by arbitrary angles. It only rotates by right angles (90-degree increments). This choice ensures consistent rendering across Word, PowerPoint (limited to angles 0, 270, and 90), HTML, and PDF.
Arguments
- x
a 'flextable' object, see flextable-package to learn how to create 'flextable' object.
- i
row selector, see section Row selection with the
iparameter in <Selectors in flextable>.- j
column selector, see section Column selection with the
jparameter in <Selectors in flextable>.- rotation
one of "lrtb", "tbrl", "btlr".
- align
vertical alignment of paragraph within cell, one of "center" or "top" or "bottom".
- part
part selector, see section Part selection with the
partparameter in <Selectors in flextable>. Value 'all' can be used.
Details
When the autofit() function is used, rotation will be
ignored. In that case, use dim_pretty and width instead
of autofit().
See also
Other sugar functions for table style:
align(),
bg(),
bold(),
color(),
empty_blanks(),
font(),
fontsize(),
highlight(),
italic(),
keep_with_next(),
line_spacing(),
padding(),
style(),
tab_settings(),
valign()
Examples
library(flextable)
ft_1 <- flextable(head(iris))
ft_1 <- rotate(ft_1, j = 1:4, align = "bottom", rotation = "tbrl", part = "header")
ft_1 <- rotate(ft_1, j = 5, align = "bottom", rotation = "btlr", part = "header")
# if output is docx or pptx, think about (1) set header heights
# and (2) set rule "exact" for rows heights because Word
# and PowerPoint don't handle auto height with rotated headers
ft_1 <- height(ft_1, height = 1.2, part = "header")
ft_1 <- hrule(ft_1, i = 1, rule = "exact", part = "header")
ft_1
Sepal.Length
Sepal.Width
Petal.Length
Petal.Width
Species
5.1
3.5
1.4
0.2
setosa
4.9
3.0
1.4
0.2
setosa
4.7
3.2
1.3
0.2
setosa
4.6
3.1
1.5
0.2
setosa
5.0
3.6
1.4
0.2
setosa
5.4
3.9
1.7
0.4
setosa
dat <- data.frame(
a = c("left-top", "left-middle", "left-bottom"),
b = c("center-top", "center-middle", "center-bottom"),
c = c("right-top", "right-middle", "right-bottom")
)
ft_2 <- flextable(dat)
ft_2 <- theme_box(ft_2)
ft_2 <- height_all(x = ft_2, height = 1.3, part = "body")
ft_2 <- hrule(ft_2, rule = "exact")
ft_2 <- rotate(ft_2, rotation = "tbrl")
ft_2 <- width(ft_2, width = 1.3)
ft_2 <- align(ft_2, j = 1, align = "left")
ft_2 <- align(ft_2, j = 2, align = "center")
ft_2 <- align(ft_2, j = 3, align = "right")
ft_2 <- valign(ft_2, i = 1, valign = "top")
ft_2 <- valign(ft_2, i = 2, valign = "center")
ft_2 <- valign(ft_2, i = 3, valign = "bottom")
ft_2
a
b
c
left-top
center-top
right-top
left-middle
center-middle
right-middle
left-bottom
center-bottom
right-bottom
