# Using palettes with gt

This vignette shows you how to use palettes to colour data cells with gt.

    library(palettes)
    library(gt)
    library(scales)
    library(dplyr)

## 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>&deg;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.