tests/testthat/test-geom_spatraster_3lyr_coltab.R

test_that("geom_spatraster several layer with CRS", {
  suppressWarnings(library(ggplot2))
  suppressWarnings(library(terra))

  #  Import also vector
  f <- system.file("extdata/cyl_temp.tif", package = "tidyterra")
  r_init <- rast(f)

  # Create levels and coltabs
  rf <- r_init %>%
    mutate(
      cut1 = cut(tavg_04, c(-Inf, 5, 7, 11, 15, Inf)),
      cut2 = cut(tavg_05, c(-Inf, seq(2, 16, 2), Inf)),
      cut3 = cut(tavg_06, c(-Inf, 5.6, 8.9, 14.2, Inf))
    ) %>%
    select(cut1:cut3)
  hlp_input_coltab <- function(r_f, lyr, pal, ...) {
    rd <- r_f[[lyr]]

    # Coltab
    cls <- terra::cats(rd)[[1]]
    ctb <- cls[, 1, drop = FALSE]
    ctb$col <- pal(nrow(ctb), ...)
    terra::coltab(rd) <- ctb

    # Regenerate
    r_f[[lyr]] <- rd

    r_f
  }

  r <- hlp_input_coltab(rf, lyr = 1, pal = whitebox.colors)
  r <- hlp_input_coltab(r, lyr = 2, pal = whitebox.colors, palette = "bl_yl_rd")
  r <- hlp_input_coltab(r, lyr = 3, pal = hypso.colors, palette = "pakistan")

  # test with vdiffr
  skip_on_cran()
  skip_if_not_installed("vdiffr")


  # Regular plot

  p <- ggplot() +
    geom_spatraster(data = r)

  expect_snapshot(pp <- ggplot2::ggplot_build(p))


  vdiffr::expect_doppelganger("crs_01a: regular no facet", p)

  # Add facets
  p <- p + facet_wrap(~lyr)

  expect_silent(ggplot2::ggplot_build(p))

  vdiffr::expect_doppelganger("crs_01b: regular facet", p)


  p_aes <- ggplot() +
    geom_spatraster(data = r, aes(fill = cut2)) +
    facet_wrap(~lyr)

  expect_silent(ggplot2::ggplot_build(p_aes))

  vdiffr::expect_doppelganger("crs_02: w/aes", p_aes)


  # Using a categorical
  expect_snapshot(
    p_cats <- ggplot() +
      geom_spatraster(data = r) +
      facet_wrap(~lyr) +
      scale_fill_terrain_d()
  )

  vdiffr::expect_doppelganger("crs_03: categ w/scale disc", p_cats)

  # Mixed cols
  rnum <- terra::rast(r, nlyr = 1)
  terra::values(rnum) <- 1
  names(rnum) <- "num"

  r_mix1 <- c(r, rnum)

  expect_snapshot(
    pmix1 <- ggplot() +
      geom_spatraster(data = r_mix1) +
      facet_wrap(~lyr)
  )

  vdiffr::expect_doppelganger("crs_04: Mixed with nums", pmix1)


  # Resampling

  expect_snapshot(
    p_res <- ggplot() +
      geom_spatraster(data = r, maxcell = 20) +
      facet_wrap(~lyr)
  )

  vdiffr::expect_doppelganger("crs_05: resampled", p_res)

  # With crs
  p_rast_first <- ggplot() +
    geom_spatraster(data = r) +
    facet_wrap(~lyr)

  vdiffr::expect_doppelganger(
    "crs_06: change crs",
    p_rast_first +
      coord_sf(crs = "ESRI:102003")
  )


  # Mixing different types of factors
  # Coltab first
  rcfirst <- c(r[[1]], rf[[2]])


  rcfirstplot <- ggplot() +
    geom_spatraster(data = rcfirst) +
    facet_wrap(~lyr)

  vdiffr::expect_doppelganger("crs_07: Mix factors: coltab first", rcfirstplot)

  rcsec <- c(rf[[1]], r[[2]])


  rcsecplot <- ggplot() +
    geom_spatraster(data = rcsec) +
    facet_wrap(~lyr)

  vdiffr::expect_doppelganger("crs_08: Mix factors: coltab second", rcsecplot)
})
dieghernan/tidyterra documentation built on Feb. 20, 2025, 4:18 p.m.