The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
This vignette demonstrates a full ezTrack workflow: importing tracking data with non-standard column names, cleaning and standardizing it, converting it to a spatial object, generating summary tables, visualizing fix rates and latitude over time, and plotting tracks and home ranges on an interactive map.
We pass a dataset of GPS-tagged migratory shorebirds to
ez_track()
. If column names aren’t provided,
ez_track()
will automatically attempt to guess which
columns correspond to ID, timestamp, longitude, and latitude.
data(godwit_tracks)
head(godwit_tracks)
#> individual.local.identifier timestamp location.long location.lat
#> 3935 animal1 2024-12-31 16:00:00 -15.84644 16.33822
#> 3936 animal1 2024-12-31 20:00:00 -15.82790 16.38281
#> 3937 animal1 2024-12-31 22:00:00 -15.82829 16.38226
#> 3938 animal1 2025-01-01 00:00:00 -15.82715 16.38327
#> 3939 animal1 2025-01-01 04:00:00 -15.82761 16.38304
#> 3940 animal1 2025-01-01 10:00:00 -15.84629 16.32770
tracks <- ez_track(
data = godwit_tracks
)
#> Detected columns - id: individual.local.identifier, timestamp: timestamp, x: location.long, y: location.lat
#> Removed 852 row(s) with missing or duplicate values.
If automatic column guessing fails or guesses incorrectly, you can manually specify which columns represent the ID, timestamp, longitude, and latitude.
tracks_manual <- ez_track(
data = godwit_tracks,
id = 'individual.local.identifier',
timestamp = 'timestamp',
x = 'location.long',
y = 'location.lat',
)
#> Detected columns - id: individual.local.identifier, timestamp: timestamp, x: location.long, y: location.lat
#> Removed 852 row(s) with missing or duplicate values.
You can also subsample the dataset using the subsample()
argument, which limits the number of location fixes per time unit. Use a
simple string format such as “1 per hour” or “2 per day” to control the
sampling frequency.
Summary reports can be computed for each individual using
ez_summary()
. For easy use in reports or presentations,
HTML reports can be generated using report = TRUE
.
Summaries can also be filtered by date using the start_date
and end_date
arguments.
The following summary statistics are returned for each unique id:
summary_table <- ez_summary(tracks)
summary_table
#> id n_fixes first_location last_location
#> 1 animal1 1095 2024-12-31 16:00:00 2025-04-25 14:00:00
#> 2 animal2 1153 2024-12-31 16:00:00 2025-04-27 22:00:00
#> 3 animal3 1022 2024-12-31 16:00:00 2025-04-23 16:00:00
#> 4 animal4 214 2024-12-31 16:00:00 2025-04-27 16:00:00
#> 5 animal5 223 2024-12-31 16:00:00 2025-04-27 16:00:00
#> 6 animal6 551 2024-12-31 16:00:00 2025-04-27 16:00:00
#> tracking_duration_days fixes_per_day median_interval_hours max_time_gap_days
#> 1 114.92 9.53 2 0.33
#> 2 117.25 9.83 2 1.00
#> 3 113.00 9.04 2 1.00
#> 4 117.00 1.83 6 10.00
#> 5 117.00 1.91 6 13.38
#> 6 117.00 4.71 4 1.00
#> distance_km avg_speed_kmh
#> 1 5649.19 2.05
#> 2 5495.39 1.95
#> 3 6370.80 2.35
#> 4 2414.07 0.86
#> 5 2372.16 0.84
#> 6 5438.92 1.94
ez_latitude_plot()
can be used to visualize latitudinal
movement (north-south) over time for each tracked animal.
The plot supports:
Optional faceting by individual
Date axis customization
Date range filtering
ggplot2
parameters for further
customization.
ez_latitude_plot(
tracks,
facet = TRUE,
start_date = "2025-01-01",
end_date = "2025-04-28",
date_breaks = "2 months",
date_format = "%b"
)
ez_fix_rate_plot()
can be used to visualize fix rates
over time for each tracked animal, using a tick mark to represent each
location fix.
The plot supports:
Date axis customization
Date range filtering
ggplot2
parameters for further
customization.
We can display tracks using an interactive Leaflet map with
ez_map()
with a simple command.
As well as with date range filters and a variety of style arguments.
Individual or population-level Minimum Convex Polygons (MCP) or
Kernel Density Estimate (KDE) home ranges can be created with
ez_home_range()
.
home_ranges_mcp <- ez_home_range(tracks, method = 'mcp', level = 95, start_date = '2025-04-12')
#> Registered S3 methods overwritten by 'adehabitatMA':
#> method from
#> print.SpatialPixelsDataFrame sp
#> print.SpatialPixels sp
The result is an sf
object containing one home range
polygon per tracked individual or population (if
population = TRUE
).
Home ranges can be visualized with ez_map
.
Home ranges can also be mapped alongside tracking data. In this example, we use the start_date argument to ensure the tracking data aligns temporally with the home range period.
To update vignette pkgdown site: pkgdown::build_site()
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.