Note: moveVis
is currently being updated to support move2
for representing trajectory data and terra
for representing raster data. The package version currently hosted on GitHub is provided “as is”. It is work in progress and subject to changes. Unit tests are partially non-functioning, documentation may be not yet up-to-date, and there are bugs that are not yet fixed.
Introduction
moveVis
provides tools to visualize movement data (e.g. from GPS tracking) and temporal changes of environmental data (e.g. from remote sensing) by creating video animations. It works with move
and raster
class inputs and turns them into ggplot2
frames that can be further customized. moveVis
uses gifski
(wrapping the gifski cargo crate) and av
(binding to FFmpeg) to render frames into animated GIF or video files.
A peer-reviewed open-access paper accompanying moveVis
has been published in Methods in Ecology and Evolution.
Figure 1: Example movement tracks nearby Lake of Constance on top of a OSM watercolor and a mapbox satellite base map
Figure 2: Example movement tracks nearby Lake of Constance and a gradient base layer faded over time
Installation
Install the latest stable relasae of moveVis
from CRAN:
install.packages("moveVis")
Install the latest development version of moveVis
from GitHub:
devtools::install_github("16EAGLE/moveVis")
Get started
The following example shows how to make a simple animation using a default basemap by first aligning your movement data to a uniform time scale, creating frames that can be viewed or modified using ggplot2
or add*()
functions and turning these frames into an animated GIF
:
library(moveVis)
library(move2)
data("move_data", package = "moveVis") # move2 class object
# align move_data to a uniform time scale
m <- align_move(move_data, res = units::set_units(4, "min"))
# create spatial frames with an OpenStreetMap basemap
frames <- frames_spatial(
m, path_colours = c("blue", "cyan", "purple"),
map_service = "osm", map_type = "topographic", alpha = 0.5) %>%
add_labels(x = "Longitude", y = "Latitude") %>% # add some customizations, such as axis labels
add_northarrow() %>%
add_scalebar() %>%
add_timestamps(type = "label") %>%
add_progress()
frames[[100]] # preview one of the frames, e.g. the 100th frame
# animate frames
animate_frames(frames, out_file = "moveVis.gif")
Function overview
moveVis
includes the following functions, sorted by the order they would be applied to create an animation from movement and environmental data:
Preparing movement tracks
-
align_move()
aligns single and multi-individual movement data to a uniform time scale with a uniform temporal resolution needed for creating an animation from it. Use this function to prepare your movement data for animation depending on the temporal resolution that suits your data.
Creating frames
-
get_maptypes()
returns a character vector of available map types that can be used withframes_spatial()
.moveVis
supports OpenStreetMap and Mapbox basemap imagery. Alternatively, you can provide custom imagery toframes_spatial()
. -
frames_spatial()
createsmoveVis
frames spatio-temporally displaying movement. Frames can be individually plotted usingggplot2
, modified individually or as a whole usingadd*()
functions, or animated usinganimate_frames()
. -
frames_graph()
createsmoveVis
frames displaying movement-environment interaction graphs. Frames can be individually plotted usingggplot2
, modified individually or as a whole usingadd*()
functions, or animated usinganimate_frames()
.
Adapting frames
-
add_gg()
addsggplot2
functions (e.g. to add layers such as points, polygons, lines, or to change scales etc.) to the animation frames created withframes_spatial()
orframes_graph()
. Instead of creating your ownggplot2
functions, you can use one of the othermoveVis
`add_``functions: -
add_labels()
adds character labels such as title or axis labels to animation frames created withframes_spatial()
orframes_graph()
. -
add_scalebar()
adds a scalebar to the animation frames created withframes_spatial()
orframes_graph()
. -
add_northarrow()
adds a north arrow to the animation frames created withframes_spatial()
orframes_graph()
. -
add_progress()
adds a progress bar to animation frames created withframes_spatial()
orframes_graph()
. -
add_timestamps()
adds timestamps to animation frames created withframes_spatial()
orframes_graph()
. -
add_text()
adds static or dynamically changing text to the animation frames created withframes_spatial()
orframes_graph()
. -
add_colourscale()
adjusts the colour scales of the animation frames created withframes_spatial()
and custom map imagery using ther_list
argument. -
join_frames()
side-by-side joins two or moremoveVis
frame sequences of equal lengths into a single plot per frame usingcowplot::plot_grid
. This is useful if you want to side-by-side combine spatial frames returned byframes_spatial()
with graph frames returned byframes_graph()
. -
get_frametimes()
extracts the timestamps associated with each frame from amoveVis
object created usingframes_spatial()
orframes_graph()
and returns them as a vector.
Animating frames (as GIF or video)
-
suggest_formats()
returns a selection of suggested file formats that can be used without_file
ofanimate_frames()
on your system. -
animate_frames()
creates an animation frommoveVis
frames computed withframes_spatial()
,frames_graph()
orjoin_frames()
.
Viewing movement tracks
-
render_frame()
renders an individual frame. It yields the same result as if an individual frame is extracted using default subsetting[[
. -
view_spatial()
displays movement tracks on an interactivemapview
orleaflet
map.
Methods
-
[
extracts individual frames or a sequence of frames from amoveVis
frames object. -
[[
renders an individual frame. -
c
combines multiplemoveVis
frames objects. -
tail()
andhead()
returnn
last or first frames of amoveVis
frames object. -
length()
return length ofmoveVis
frames, i.e. number of frames. -
print()
shows basic information about amoveVis
frames object, i.e. number of frames, extent and more. -
rev()
reverses the order of amoveVis
frames object.
Processing settings
-
use_multicore()
enables multi-core usage for computational expensive processing steps. -
use_disk()
enables the usage of disk space for creating frames, which can prevent memory overload when creating frames for very large animations.
Example data
-
data("move_data")
returns amove2
object representing coordinates and acquisition times of three simulated movement tracks, covering a location nearby Lake of Constance, Germany. -
data("whitestork_data")
returns adata.frame
and amove2
object, both representing coordinates and acquisition times of 15 White Storks, migrating from Lake of Constance, SW Germany, to Africa. -
readRDS(example_data(file = "basemap_data.rds"))
returns aSpatRasterDataset
, representing simulated NDVI images covering the Lake of Constance area, as well as invented dates and times that simulate acquisition times.
Examples
You can find code examples on how to use moveVis
here:
Example 1: Creating a simple movement animation
Example 3: Using a mapbox satellite base map
Example 4: View movement tracks
Real-data example using White Storks (Ciconia ciconia) migration movement data [.docx]
Code snippets
These commented moveVis
code snippets, addressing specific issues or questions, could also be helpful to you:
How to display the full traces of each path using trace_show and trace_colour with frames_spatial()
How to colour paths based on a continuous variable
How to assign multiple path colours per individual, e.g. to indicate behavioral segments
How to adapt the path legend of frames created with frames_spatial()
How to create a data.frame containing each track coordinate per frame
How to overlay frames with additional transparent rasters changing over time (hacky, not a very optimal solution)
Further resources
Detailed code examples explaining how to use specific functions are provided at the function help pages. User contributions such as code examples or tutorials are very welcome and are linked below as soon as they have been spotted somewhere on the web:
Animating animal tracks from multiple years over a common year with moveVis: An example with Blue Whale Argos tracks on Movebank by Daniel M. Palacios, Marine Mammal Institute, Oregon State University
Reproducible example of how to combine animal tracking data, tidal water height data and a heightmap to visualize animal movement with moveVis by Henk-Jan van der Kolk, The Netherlands Institute of Ecology (NIOO-KNAW)
How to build animated tracking maps using tracking data in Movebank and environmental covariates in track and raster annotations from EnvDATA with moveVis by Sarah C. Davidson, Data Curator at Movebank
Mentions
Blog post: Featured article in Issue 11.5: Our May issue is now online! by Methods in Ecology and Evolution
Related packages
Other R packages that might interest you:
- basemaps, a package to download and cache spatial basemaps from open sources such as OpenStreetMap, Stamen, Thunderforest, Carto, Mapbox and others,
- getSpatialData, a package to query, preview and download satellite data,
- RStoolbox, a package providing a wide range of tools for every-day remote sensing processing needs,
Acknowledgements
This initiative was part of the Opt4Environment project and had been funded by the German Aerospace Center (DLR) on behalf of the Federal Ministry for Economic Affairs and Energy (BMWi) with the research grant 50 EE 1403.
<a href="https://www.geographie.uni-wuerzburg.de/en/fernerkundung/startseite/"><img width="29%" src="https://www.uni-wuerzburg.de/typo3conf/ext/uw_sitepackage/Resources/Public/Images/uni-wuerzburg-logo.svg"></a>
<a href="http://www.dlr.de/eoc/en/"><img width="16%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/f/f5/DLR_Logo.svg/744px-DLR_Logo.svg.png"></a>
<a href="https://www.bmu.de/en/"><img width="29%" src="https://upload.wikimedia.org/wikipedia/commons/b/b1/Logo_Bundesministerium_f%C3%BCr_Umwelt_Naturschutz_und_nukleare_Sicherheit.png"></a>
<a href="https://www.ab.mpg.de/"><img width="16%" src="https://www.ab.mpg.de/assets/og-logo-281c44f14f2114ed3fe50e666618ff96341055a2f8ce31aa0fd70471a30ca9ed.jpg"></a>
Citation
An open-access paper accompanying the moveVis
R package has been peer-reviewed by and published in ‘Methods in Ecology and Evolution’ (see https://doi.org/10.1111/2041-210X.13374). Please cite moveVis, e.g. when you use it in publications or presentations, using the output of citation("moveVis")
or as follows:
Schwalb-Willmann, J.; Remelgado, R.; Safi, K.; Wegmann, M. (2020). moveVis: Animating movement trajectories in synchronicity with static or temporally dynamic environmental data in R. Methods Ecol Evol. 2020; 11: 664–669. https://doi.org/10.1111/2041-210X.13374