This vignette shows you how to use palettes to colour data cells with gt.
Preparing the table
To demonstrate how to use palettes to colour data cells with gt, we
will use airquality
as an input data table with the
following columns:
- Year, Month, Day: the numeric month and day of month for the record
- Temp: maximum daily air temperature in degrees Fahrenheit (°F)
Temperature is a good fit for colour—we can represent cold with blue and hot with red.
First we create the gt table we will add colour to. The table is slightly modified from a table in the Introduction to Creating gt Tables article. It looks like this.
# Modify the `airquality` dataset by adding the year
# of the measurements (1973) and limiting to 10 rows
airquality_m <-
airquality %>%
mutate(Year = 1973L) %>%
slice(1:10) %>%
select(Year, Month, Day, Temp)
# Create a display table using the `airquality`
# dataset; arrange columns into groups
gt_tbl <-
gt(airquality_m) %>%
tab_header(
title = "New York Temperature Measurements",
subtitle = "Daily measurements in New York City (May 1-10, 1973)"
) %>%
tab_spanner(
label = "Time",
columns = c(Year, Month, Day)
) %>%
tab_spanner(
label = "Measurement",
columns = c(Temp)
) %>%
cols_label(
Temp = html("Temp,<br>°F")
)
# Show the gt table
gt_tbl
New York Temperature Measurements | |||
Daily measurements in New York City (May 1-10, 1973) | |||
Time | Measurement | ||
---|---|---|---|
Year | Month | Day | Temp, °F |
1973 | 5 | 1 | 67 |
1973 | 5 | 2 | 72 |
1973 | 5 | 3 | 74 |
1973 | 5 | 4 | 62 |
1973 | 5 | 5 | 56 |
1973 | 5 | 6 | 66 |
1973 | 5 | 7 | 65 |
1973 | 5 | 8 | 59 |
1973 | 5 | 9 | 61 |
1973 | 5 | 10 | 69 |
Adding colour
We can use the Hiroshige
palette for blue and red
gradients, reversing it so the colours are in the correct order for this
example.
colour_vector <- rev(met_palettes$Hiroshige)
colour_vector
#> <palettes_colour[10]>
#> • #1E466E
#> • #376795
#> • #528FAD
#> • #72BCD5
#> • #AADCE0
#> • #FFE6B7
#> • #FFD06F
#> • #F7AA58
#> • #EF8A47
#> • #E76254
At the moment, objects of class palettes_palette
or
palettes_colour
cannot be used directly with the colour
functions in gt. To work around this we cast the colour vector to a
character vector.
character_vector <- as.character(colour_vector)
character_vector
#> [1] "#1e466e" "#376795" "#528fad" "#72bcd5" "#aadce0" "#ffe6b7" "#ffd06f"
#> [8] "#f7aa58" "#ef8a47" "#e76254"
Now we can use gt::data_color()
to colour the
temperature cells. The colors
argument accepts either a
vector of colours to use for each distinct cell value or level or a
colour mapping function (e.g., from the scales
package).
Here we pass the character vector directly to the colors
argument.
gt_tbl %>%
data_color(
columns = Temp,
palette = character_vector
)
New York Temperature Measurements | |||
Daily measurements in New York City (May 1-10, 1973) | |||
Time | Measurement | ||
---|---|---|---|
Year | Month | Day | Temp, °F |
1973 | 5 | 1 | 67 |
1973 | 5 | 2 | 72 |
1973 | 5 | 3 | 74 |
1973 | 5 | 4 | 62 |
1973 | 5 | 5 | 56 |
1973 | 5 | 6 | 66 |
1973 | 5 | 7 | 65 |
1973 | 5 | 8 | 59 |
1973 | 5 | 9 | 61 |
1973 | 5 | 10 | 69 |
But this works equally well with the colour mapping functions from palettes.
gt_tbl %>%
data_color(
columns = Temp,
fn = pal_numeric(colour_vector, domain = NULL)
)
New York Temperature Measurements | |||
Daily measurements in New York City (May 1-10, 1973) | |||
Time | Measurement | ||
---|---|---|---|
Year | Month | Day | Temp, °F |
1973 | 5 | 1 | 67 |
1973 | 5 | 2 | 72 |
1973 | 5 | 3 | 74 |
1973 | 5 | 4 | 62 |
1973 | 5 | 5 | 56 |
1973 | 5 | 6 | 66 |
1973 | 5 | 7 | 65 |
1973 | 5 | 8 | 59 |
1973 | 5 | 9 | 61 |
1973 | 5 | 10 | 69 |
The colour mapping functions from palettes are:
pal_numeric()
, pal_bin()
,
pal_quantile()
, and pal_factor()
. These
functions are useful when you need finer control over colour evaluation
with data.