Let’s use the exibble dataset to create a simple, two-column gt table (keeping only the num and currency columns). With tab_style() (called twice), we’ll selectively add style to the values formatted by fmt_number(). In the style argument of each tab_style() call, we can define multiple types of styling with cell_fill() and cell_text() (enclosed in a list). The cells to be targeted for styling require the use of helpers like cells_body(), which is used here with different columns and rows being targeted.
With a subset of the sp500 dataset, we’ll create a different gt table. Here, we’ll color the background of entire rows of body cells and do so on the basis of value expressions involving the open and close columns.
sp500 |> dplyr::filter( date >="2015-12-01"& date <="2015-12-15" ) |> dplyr::select(-c(adj_close, volume)) |>gt() |>tab_style(style =cell_fill(color ="lightgreen"),locations =cells_body(rows = close > open) ) |>tab_style(style =list(cell_fill(color ="red"),cell_text(color ="white") ),locations =cells_body(rows = open > close) )
date
open
high
low
close
2015-12-15
2025.55
2053.87
2025.55
2043.41
2015-12-14
2013.37
2022.92
1993.26
2021.94
2015-12-11
2047.27
2047.27
2008.80
2012.37
2015-12-10
2047.93
2067.65
2045.67
2052.23
2015-12-09
2061.17
2080.33
2036.53
2047.62
2015-12-08
2073.39
2073.85
2052.32
2063.59
2015-12-07
2090.42
2090.42
2066.78
2077.07
2015-12-04
2051.24
2093.84
2051.24
2091.69
2015-12-03
2080.71
2085.00
2042.35
2049.62
2015-12-02
2101.71
2104.27
2077.11
2079.51
2015-12-01
2082.93
2103.37
2082.93
2102.63
With another two-column table based on the exibble dataset, let’s create a gt table. First, we’ll replace missing values with sub_missing(). Next, we’ll add styling to the char column. This styling will be HTML-specific and it will involve (all within a list): (1) a cell_fill() call (to set a "lightcyan" background), and (2) a string containing a CSS style declaration ("font-variant: small-caps;").
In the following table based on the towny dataset, we’ll use a larger number of tab_style() calls with the aim of styling each location available in the table. Over six separate uses of tab_style(), different body cells are styled with background colors, the header and the footer also receive background color fills, borders are applied to a column of body cells and also to the column labels, and, the row labels in the stub receive a custom text treatment.
All figures are compiled in the towny dataset (in the gt package).
a Data was used from their respective census-year publications.
from_column() can be used to get values from a column. We’ll use it in the next example, which begins with a table having a color name column and a column with the associated hexadecimal color code. To show the color in a separate column, we first create one with cols_add() (ensuring that missing values are replaced with "" via sub_missing()). Then, tab_style() is used to style that column, using color = from_column() within cell_fill().
cell_text() also allows the use of from_column() for many of its arguments. Let’s take a small portion of data from sp500 and add an up or down arrow based on the values in the open and close columns. Within cols_add() we can create a new column (dir) with an expression to get either "red" or "green" text from a comparison of the open and close values. These values are transformed to up or down arrows with text_case_match(), using fontawesome icons in the end. However, the text values are still present and can be used by cell_text() within tab_style(). from_column() makes it possible to use the text in the cells of the dir column as color input values.