Skip to contents

Table sizing

Users can take advantage of {docorator}’s built-in scaling or opt to instead specify column widths via {gt}. Both techniques are described below.

Dynamic scaling

For {tfrmt} and {gt} tables, {docorator} will make its best attempt to fit the display to the allotted area. Specifically, using the default setting of tbl_scale = TRUE will adjust all of the columns to fit the allotted display. This option will first size the stub column(s) (i.e. those columns on the left-hand side containing row group/label information) according to tbl_stub_pct option, then make the remaining columns equal width.

{docorator} uses the function scale_gt() to apply table sizing under the hood. There is no need to call this function directly for the pdf creation but it is used to illustrate the examples below.

Let’s say we have a table with 1 stub column and 4 other columns, like so:

library(gt)
mytbl <- gtcars |>
   dplyr::slice_head(n = 10) |>
   dplyr::select(mfr, model, year, msrp, ctry_origin) |>
   gt(rowname_col = "mfr") |>
   tab_style(
     style = cell_borders(c("left","right")),
     locations = list(cells_body(), cells_stub(), cells_column_labels())
   )

mytbl
model year msrp ctry_origin
Ford GT 2017 447000 United States
Ferrari 458 Speciale 2015 291744 Italy
Ferrari 458 Spider 2015 263553 Italy
Ferrari 458 Italia 2014 233509 Italy
Ferrari 488 GTB 2016 245400 Italy
Ferrari California 2015 198973 Italy
Ferrari GTC4Lusso 2017 298000 Italy
Ferrari FF 2015 295000 Italy
Ferrari F12Berlinetta 2015 319995 Italy
Ferrari LaFerrari 2015 1416362 Italy

If we set tbl_stub_pct=0.4, the stub column will occupy 40% of the full width, and the 4 data columns will each occupy 15% of the full width, totaling 100% width.

mytbl |>
  scale_gt(tbl_stub_pct = 0.4)
model year msrp ctry_origin
Ford GT 2017 447000 United States
Ferrari 458 Speciale 2015 291744 Italy
Ferrari 458 Spider 2015 263553 Italy
Ferrari 458 Italia 2014 233509 Italy
Ferrari 488 GTB 2016 245400 Italy
Ferrari California 2015 198973 Italy
Ferrari GTC4Lusso 2017 298000 Italy
Ferrari FF 2015 295000 Italy
Ferrari F12Berlinetta 2015 319995 Italy
Ferrari LaFerrari 2015 1416362 Italy

For a table with 2 stub columns, like the one below, settings tbl_stub_pct=0.4 will result 20% width for each stub column, resulting in 40% total for both stubs.

mytbl <- gtcars |>
   dplyr::slice_head(n = 10) |>
   dplyr::select(mfr, model, year, msrp, ctry_origin) |>
   gt(
      groupname_col = "ctry_origin", 
      rowname_col = "mfr",
      row_group_as_column = TRUE) |>
   tab_style(
     style = cell_borders(c("left","right")),
     locations = list(cells_body(), cells_stub(), cells_column_labels())
   )

mytbl
model year msrp
United States Ford GT 2017 447000
Italy Ferrari 458 Speciale 2015 291744
Ferrari 458 Spider 2015 263553
Ferrari 458 Italia 2014 233509
Ferrari 488 GTB 2016 245400
Ferrari California 2015 198973
Ferrari GTC4Lusso 2017 298000
Ferrari FF 2015 295000
Ferrari F12Berlinetta 2015 319995
Ferrari LaFerrari 2015 1416362
mytbl |>
  scale_gt(tbl_stub_pct = 0.4)
model year msrp
United States Ford GT 2017 447000
Italy Ferrari 458 Speciale 2015 291744
Ferrari 458 Spider 2015 263553
Ferrari 458 Italia 2014 233509
Ferrari 488 GTB 2016 245400
Ferrari California 2015 198973
Ferrari GTC4Lusso 2017 298000
Ferrari FF 2015 295000
Ferrari F12Berlinetta 2015 319995
Ferrari LaFerrari 2015 1416362

Manual scaling

For full control over column widths, it is recommended to use gt::cols_width() on the table prior to {docorator}. By default, {docorator}’s dynamic scaling will override these widths, so it is important to set tbl_scale = FALSE. Note: only widths specified in % (i.e using either “5%” or pct(5)) are accepted. If widths are specified in px then a warning will be issued and dynamic scaling will apply. Widths should also total no more than 100%.

If only a subset of the columns are covered in the cols_width(), {docorator} will expand the remaining columns to fit the allotted width of the display area.

mytbl |> 
  gt::cols_width(
    msrp ~ pct(50)
  ) |> 
  as_docorator(tbl_scale = FALSE)

Alternatively, if all columns are covered in the cols_width(), {docorator} will not apply any resizing to fit the allotted area.

mytbl |> 
  gt::cols_width(
    ctry_origin ~ pct(15),
    mfr ~ pct(10),
    model ~ pct(7),
    year ~ pct(9),
    msrp ~ pct(15)
  ) |> 
  as_docorator(tbl_scale = FALSE)

Figure sizing

Figure sizes can be adjusted via the fig_dim argument of as_docorator(). This argument expects a numeric vector of length 2, where the first and second elements are the height and width in inches, respectively. For example, the default c(5,8) translates to a height of 5 inches and width of 8 inches.

Future developments

More customization options will be offered in future releases. If you have a need to customize something that is not currently offered, please file an issue.