From 9fb19eae31ab68254a17b930069ff11d587ec5e0 Mon Sep 17 00:00:00 2001 From: khufkens Date: Thu, 21 Sep 2023 16:42:23 +0200 Subject: [PATCH 1/5] correcting imports --- DESCRIPTION | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 9dab838..c1948ca 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,11 +36,10 @@ Imports: ggplot2, plotly, rlang, - sf, - tidyr -Suggests: + tidyr, dplyr, - patchwork, + patchwork +Suggests: rnaturalearth, rmarkdown, covr, From 5ea95821f43f04a6a200603196831f2f8da4b85c Mon Sep 17 00:00:00 2001 From: khufkens Date: Fri, 22 Sep 2023 06:59:28 +0200 Subject: [PATCH 2/5] adding masking data and mapping --- R/skytrackr.R | 58 ++++++++++++++++++++++++------------------ R/stk_map.R | 32 +++++++++++++++++++++++ R/stk_mask.R | 8 ++---- inst/extdata/mask.rds | Bin 0 -> 50800 bytes man/likelihood.Rd | 2 +- 5 files changed, 68 insertions(+), 32 deletions(-) create mode 100644 R/stk_map.R create mode 100644 inst/extdata/mask.rds diff --git a/R/skytrackr.R b/R/skytrackr.R index 7608f27..7e7054f 100644 --- a/R/skytrackr.R +++ b/R/skytrackr.R @@ -128,21 +128,25 @@ skytrackr <- function( if(!missing(start_location)){ # create data point - roi <- sf::st_as_sf( - data.frame( - lon = locations$longitude[i-1], - lat = locations$latitude[i-1] + roi <- suppressMessages(suppressWarnings( + sf::st_as_sf( + data.frame( + lon = locations$longitude[i-1], + lat = locations$latitude[i-1] ), - coords = c("lon","lat"), - crs = "epsg:4326" - ) |> - sf::st_buffer(tolerance) + coords = c("lon","lat"), + crs = "epsg:4326" + ) |> + sf::st_buffer(tolerance) + )) if(land_mask){ - roi <- sf::st_intersection( - roi, - mask - ) + roi <- suppressMessages(suppressWarnings( + sf::st_intersection( + roi, + mask + ) + )) } bbox <- roi |> @@ -152,21 +156,25 @@ skytrackr <- function( if(!missing(start_location)) { # create data point - roi <- sf::st_as_sf( - data.frame( - lon = start_location[2], - lat = start_location[1] - ), - coords = c("lon","lat"), - crs = "epsg:4326" - ) |> - sf::st_buffer(tolerance) + roi <- suppressMessages(suppressWarnings( + sf::st_as_sf( + data.frame( + lon = start_location[2], + lat = start_location[1] + ), + coords = c("lon","lat"), + crs = "epsg:4326" + ) |> + sf::st_buffer(tolerance) + )) if(land_mask){ - roi <- sf::st_intersection( - roi, - mask - ) + roi <- suppressMessages(suppressWarnings( + sf::st_intersection( + roi, + mask + ) + )) } bbox <- roi |> diff --git a/R/stk_map.R b/R/stk_map.R new file mode 100644 index 0000000..db134df --- /dev/null +++ b/R/stk_map.R @@ -0,0 +1,32 @@ +#' Plot skytrackr results +#' +#' Create a map of estimated locations +#' +#' @param df a data frame with locations produced by skytrackr() +#' @param buffer a land mask buffer value +#' @param bbox a bounding box +#' +#' @return a ggplot map of tracked locations +#' @export + +stk_map <- function(df, buffer, bbox) { + ggplot2::ggplot(df) + + ggplot2::geom_sf(data = stk_mask(buffer = buffer)) + + ggplot2::geom_sf(data = stk_mask(buffer = 0)) + + geom_path( + aes( + longitude, + latitude + ) + ) + + geom_point( + aes( + longitude, + latitude + ) + ) + + ggplot2::coord_sf( + xlim = c(bbox[1], bbox[3]), + ylim = c(bbox[2], bbox[4]) + ) +} diff --git a/R/stk_mask.R b/R/stk_mask.R index 843abb5..80bc1c3 100644 --- a/R/stk_mask.R +++ b/R/stk_mask.R @@ -11,14 +11,10 @@ stk_mask <- memoise::memoise(function(buffer = 1.5) { sf::sf_use_s2(FALSE) - land <- rnaturalearth::ne_download( - type = "land", - category = "physical", - returnclass = "sf" - ) + mask <- readRDS(system.file("extdata/mask.rds", package="skytrackr")) land <- suppressMessages(suppressWarnings( - land |> + mask |> sf::st_geometry() |> sf::st_union() |> sf::st_buffer(buffer) diff --git a/inst/extdata/mask.rds b/inst/extdata/mask.rds new file mode 100644 index 0000000000000000000000000000000000000000..dbaa5a5089ed6cce8fb1dfd75052d94df0bb75bf GIT binary patch literal 50800 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%0Dg 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 Vw*`8C1;jou4T}N*00001Sy~akyf6R& literal 0 HcmV?d00001 diff --git a/man/likelihood.Rd b/man/likelihood.Rd index 84e7229..e5a4076 100644 --- a/man/likelihood.Rd +++ b/man/likelihood.Rd @@ -12,7 +12,7 @@ on the target values} \item{data}{nested data structure with validation data included} -\item{model}{model to run with data and par settings} +\item{model}{model to run with data and par setings} \item{...}{extra arguments to pass to the function} } From f482cd483acc7162c91b207c003a798b639f837e Mon Sep 17 00:00:00 2001 From: khufkens Date: Fri, 22 Sep 2023 09:11:08 +0200 Subject: [PATCH 3/5] plotting options --- R/skytrackr.R | 59 ++++++++++++++++++++++------------------ R/stk_map.R | 37 +++++++++++++++++-------- R/stk_mask.R | 25 +++++++++++------ R/stk_profile.R | 2 ++ analysis/demo_analysis.R | 20 ++++---------- 5 files changed, 82 insertions(+), 61 deletions(-) diff --git a/R/skytrackr.R b/R/skytrackr.R index 7e7054f..32fe0f3 100644 --- a/R/skytrackr.R +++ b/R/skytrackr.R @@ -67,6 +67,9 @@ skytrackr <- function( verbose = TRUE ) { + # set global bounding box + bbox_global <- bbox + # unravel the data data <- data |> dplyr::filter( @@ -110,13 +113,6 @@ skytrackr <- function( pb$tick(0) } - if(plot){ - maps::map( - xlim = bbox[c(1,3)], - ylim = bbox[c(2,4)] - ) - } - # create mask if required if(land_mask){ mask <- stk_mask(buffer = buffer) @@ -214,32 +210,41 @@ message( } if(plot){ - if(land_mask){ - plot( - mask, - border = "grey", - add = TRUE + p <- stk_map( + locations, + buffer = buffer, + bbox = bbox_global + ) + + ggplot2::labs( + title = sprintf( + "%s (%s)", + data$logger[1], + locations$date[nrow(locations)] + ) ) - } - # plot( - # roi, - # border = "grey", - # add = TRUE - # ) + if(!missing(start_location)){ + p <- p + + ggplot2::geom_point( + aes( + start_location[2], + start_location[1] + ), + colour = "red" + ) + } - graphics::lines( - locations[,5:4], - col = 'grey' - ) - graphics::points( - locations[,5:4], - pch = 19, - col = 'red' - ) + print(p) } } + # add equinox labels, two weeks + # before and after equinoxes + locations <- locations |> + mutate( + equinox = ifelse(TRUE, NA,NA) + ) + # return the data frame with # location return(locations) diff --git a/R/stk_map.R b/R/stk_map.R index db134df..bed1dfa 100644 --- a/R/stk_map.R +++ b/R/stk_map.R @@ -10,16 +10,30 @@ #' @export stk_map <- function(df, buffer, bbox) { - ggplot2::ggplot(df) + - ggplot2::geom_sf(data = stk_mask(buffer = buffer)) + - ggplot2::geom_sf(data = stk_mask(buffer = 0)) + - geom_path( - aes( - longitude, - latitude - ) - ) + - geom_point( + p <- ggplot2::ggplot(df) + + ggplot2::geom_sf( + data = stk_mask(buffer = buffer) + ) + + ggplot2::geom_sf( + data = stk_mask(buffer = 0) + ) + + ggplot2::labs( + x = "", + y = "" + ) + + if(nrow(df) > 1) { + p <- p + + ggplot2::geom_path( + aes( + longitude, + latitude + ) + ) + } + + p <- p + + ggplot2::geom_point( aes( longitude, latitude @@ -28,5 +42,6 @@ stk_map <- function(df, buffer, bbox) { ggplot2::coord_sf( xlim = c(bbox[1], bbox[3]), ylim = c(bbox[2], bbox[4]) - ) + ) + + ggplot2::theme_bw() } diff --git a/R/stk_mask.R b/R/stk_mask.R index 80bc1c3..ad796b1 100644 --- a/R/stk_mask.R +++ b/R/stk_mask.R @@ -8,19 +8,26 @@ #' @return buffered land mask as an sf object #' @export -stk_mask <- memoise::memoise(function(buffer = 1.5) { +stk_mask <- memoise::memoise(function(buffer = 0) { - sf::sf_use_s2(FALSE) - mask <- readRDS(system.file("extdata/mask.rds", package="skytrackr")) - - land <- suppressMessages(suppressWarnings( - mask |> - sf::st_geometry() |> - sf::st_union() |> - sf::st_buffer(buffer) + suppressMessages( + suppressWarnings( + sf::sf_use_s2(FALSE) ) ) + land <- readRDS(system.file("extdata/mask.rds", package="skytrackr")) + + if(buffer > 0){ + land <- suppressMessages(suppressWarnings( + land |> + sf::st_geometry() |> + sf::st_union() |> + sf::st_buffer(buffer) + ) + ) + } + return(land) }) diff --git a/R/stk_profile.R b/R/stk_profile.R index 7813615..79d6cf8 100644 --- a/R/stk_profile.R +++ b/R/stk_profile.R @@ -2,6 +2,8 @@ #' Plot seasonal profiles #' #' Uses plotly to provide a seasonal profile plot +#' NOTE make this a method class so you can call +#' plot(data.frame) or plot(df, plotly = TRUE) #' #' @param data skytrackr compatible data frame #' @param logger the logger to plot diff --git a/analysis/demo_analysis.R b/analysis/demo_analysis.R index 4f6e595..7106ae9 100644 --- a/analysis/demo_analysis.R +++ b/analysis/demo_analysis.R @@ -7,12 +7,12 @@ library(sf) lapply(list.files("R/","*.R", full.names = TRUE), source) #library(skytrackr) -data <- stk_read_lux("data-raw/CC876_22Jun22_161546.lux") +df <- stk_read_lux("data-raw/CH760_11Jun23_051213.lux") -# |> -# filter( -# date >= "2021-08-27" -# ) +df <- df |> + dplyr::filter( + (date >= "2022-08-12" & date <= "2023-04-27") + ) # # batch processing via pipe for multiple sites # locations <- data |> @@ -32,7 +32,7 @@ data <- stk_read_lux("data-raw/CC876_22Jun22_161546.lux") #---- DEzs MCMC approach ---- -locations <- data |> +locations <- df |> group_by(logger) |> do({ skytrackr( @@ -40,14 +40,6 @@ locations <- data |> start_location = c(51.08, 3.73), tolerance = 11, bbox = c(-20, -40, 60, 60), - control = list( - sampler = 'DEzs', - settings = list( - burnin = 1000, - iterations = 2000, - message = FALSE - ) - ), land_mask = TRUE, plot = TRUE ) From f3b2471bf9579a43003d3fdf3259db2597cce77f Mon Sep 17 00:00:00 2001 From: khufkens Date: Tue, 3 Oct 2023 22:19:39 +0300 Subject: [PATCH 4/5] docs --- man/stk_map.Rd | 21 +++++++++++++++++++++ man/stk_mask.Rd | 2 +- man/stk_profile.Rd | 2 ++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 man/stk_map.Rd diff --git a/man/stk_map.Rd b/man/stk_map.Rd new file mode 100644 index 0000000..ad2d130 --- /dev/null +++ b/man/stk_map.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/stk_map.R +\name{stk_map} +\alias{stk_map} +\title{Plot skytrackr results} +\usage{ +stk_map(df, buffer, bbox) +} +\arguments{ +\item{df}{a data frame with locations produced by skytrackr()} + +\item{buffer}{a land mask buffer value} + +\item{bbox}{a bounding box} +} +\value{ +a ggplot map of tracked locations +} +\description{ +Create a map of estimated locations +} diff --git a/man/stk_mask.Rd b/man/stk_mask.Rd index 83da8eb..446734e 100644 --- a/man/stk_mask.Rd +++ b/man/stk_mask.Rd @@ -4,7 +4,7 @@ \alias{stk_mask} \title{A land mask} \usage{ -stk_mask(buffer = 1.5) +stk_mask(buffer = 0) } \arguments{ \item{buffer}{buffer in degrees} diff --git a/man/stk_profile.Rd b/man/stk_profile.Rd index bdd4f16..fa77032 100644 --- a/man/stk_profile.Rd +++ b/man/stk_profile.Rd @@ -22,4 +22,6 @@ a plotly dynamic graph of light levels for a given logger } \description{ Uses plotly to provide a seasonal profile plot +NOTE make this a method class so you can call +plot(data.frame) or plot(df, plotly = TRUE) } From 4822d0166c6993a15c1e2a22f7285f54f6f6c2b9 Mon Sep 17 00:00:00 2001 From: khufkens Date: Tue, 3 Oct 2023 22:19:54 +0300 Subject: [PATCH 5/5] docs --- NAMESPACE | 1 + 1 file changed, 1 insertion(+) diff --git a/NAMESPACE b/NAMESPACE index 81eb440..103c1ca 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -5,6 +5,7 @@ export(log_lux) export(read_deg_lux) export(skytrackr) export(stk_fit) +export(stk_map) export(stk_mask) export(stk_profile) export(stk_read_glf)