plot_time_at() plots time at depth or time at
temperature: the percentage of time in each depth or temperature range,
for the whole record, each month, or as a heat map of each day. It
returns the table of percentages, with the plot attached. In the app,
step 2 has a new “Time at depth & temperature” tab.plot_TDR() has a new colour_temp argument
to colour the depth record by temperature, from blue (cold) to red
(warm). The app’s depth record plot has a “Colour by temperature”
option. Both need the tag imported with its temperature column.import_tag_data() with output = TRUE now
also saves the settings it used (archive, deployment and release times,
columns and time zone) as import_settings.rds in the tag’s
folder. The app uses this to warn when a tag’s settings change after it
was imported: step 1 shows a warning when the tag is saved and in its
Check column, and step 2 marks the tag “Outdated” and lists what changed
until it is re-imported. For tags imported before the settings were
saved, the app checks the temperature column and time zone against the
imported record itself.import_tag_data(verbose = TRUE) now reports the mean,
minimum and maximum temperature when a temperature column is
imported.sampling_report() now lists each
irregularity and incomplete day with its times, up to
max_rows of each (5 by default; 20 in the app), and no
longer rounds nearly regular records up to “100%” of intervals.create_wavelet() no longer has the
allow_irregular_sampling argument (it was not functional),
and no longer stops on non-constant sampling intervals.run_app() opens a point-and-click app for FishDiveR
that runs locally in your browser (in development). It manages a project
folder and a table of tags, and covers the whole workflow: importing
tags, plotting their depth records, the wavelet analysis (with memory
estimates and optional thinning), daily statistics, PCA across tags,
choosing k and k-means clustering (with an interactive 3D view), and
plotting depth records by cluster and example days from each cluster.
Needs the ‘shiny’, ‘bslib’ and ‘DT’ packages.thin_archive() block-averages a depth record to a
longer sampling interval (e.g. 1 s to 15 s) before
create_wavelet(), cutting the wavelet’s memory and run time
for long, high-frequency records. In the app, step 3 has a thinning
option with a suggested interval based on the lower period.create_wavelet() now records the wavelet’s sampling
interval as sampling_s in wavelet_meta, and
with load_existing_wavelet = TRUE uses the saved wavelet’s
own sampling interval for the figures.plot_TDR() now attaches its ggplot to the returned data
as the attribute TDR_plot.plot_TDR() has a new minmax_bins argument
for fast plotting of large archives: it plots only the shallowest and
deepest record in each of that many time bins, keeping dive extremes
that every_nth can miss. plot_cluster_TDR()
has the same argument.sampling_report() checks a depth record for a
constant sampling interval and reports any irregularities: duplicate
times, gaps, changes of sampling rate, short intervals, times out of
order, and days with fewer records than expected. In the app, step 2
shows each imported tag’s sampling check.import_tag_data() now warns if the sampling interval is
not constant, listing the intervals detected and their record counts,
and suggests sampling_report() for details.create_wavelet(): the wavelet power spectrum figure no
longer has its end cut off for long, high-frequency records (e.g. 29
days at 1 s). Records with millions of samples are now thinned for
drawing only; the saved wavelet is unchanged. Redraw existing figures
with load_existing_wavelet = TRUE.k_clustering() with polygon = TRUE no
longer fails when a cluster’s points are flat in PC1 to PC3
(e.g. duplicate days); that cluster is drawn without a polygon.plot_clusters() with diel_shade = TRUE:
night is now shaded with one rectangle per night period, drawn beneath
the depth line, instead of one semi-transparent rectangle per depth
record drawn on top. Shading is now about as fast as no shading (e.g. 8
s instead of 19 minutes for 2 days per cluster at 1 s sampling),
night-time dives are no longer hidden, and the shade no longer varies
with sampling rate or every_nth.Added optional X-axis limits for TDR plots
select_k() now returns a single ggplot
object (a cowplot::plot_grid) instead of a list. Update
downstream code/tests accordingly..(...) with list(...) in
create_depth_stats().select_k() by using
withr::local_seed().RoxygenNote updated to
7.3.3.ggplot return class.