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
raster class inputs and turns them into
ggplot2 frames that can be further customized.
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
With version 0.10.0, the package has been rewritten from the ground up with the goal to make it easier to customize the appearance of movement animations. Thus, the logic of the package, its functions and their syntax have changed.
The latest stable version of
moveVis can be installed from CRAN:
The development version can be installed from GitHub:
Code written for
moveVis version <=0.9.9 will not work with newer versions, but it is quite simple and thus highly recommended to switch to the new syntax due to a variety of advantages.
moveVis version <=0.9.9 can still be downloaded here and installed manually:
setwd("your/download/directory") install.packages("moveVis-0.9.9.tar.gz", repos = NULL)
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
moveStackobject. This is useful if you do not usually work with the
moveclasses and your tracks are present as
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.
moveStackby a given time span. This is useful if you want to create a movement animation of only a temporal subset of your data, e.g. a particular day.
get_maptypes()returns a character vector of available map types that can be used with
moveVissupports OpenStreetMap and Mapbox basemap imagery. Alternatively, you can provide custom imagery to
frames_spatial()creates a list of
ggplot2maps displaying movement. Each object represents a single frame. Each frame can be viewed or modified individually. The returned list of frames can be animated using
frames_graph()creates a list of
ggplot2graphs displaying movement-environment interaction. Each object represents a single frame. Each frame can be viewed or modified individually. The returned list of frames can be animated using
ggplot2functions (e.g. to add layers such as points, polygons, lines, or to change scales etc.) to the animation frames created with
frames_graph(). Instead of creating your own
ggplot2functions, you can use one of the other
add_labels()adds character labels such as title or axis labels to animation frames created with
add_scalebar()adds a scalebar to the animation frames created with
add_northarrow()adds a north arrow to the animation frames created with
add_progress()adds a progress bar to animation frames created with
add_timestamps()adds timestamps to animation frames created with
add_text()adds static or dynamically changing text to the animation frames created with
add_colourscale()adjusts the colour scales of the animation frames created with
frames_spatial()and custom map imagery using the
join_frames()side-by-side joins the
ggplot2objects of two or more frames lists of equal lengths into a single list of
ggplot2objects per frame using
cowplot::plot_grid. This is useful if you want to side-by-side combine spatial frames returned by
frames_spatial()with graph frames returned by
get_frametimes()extracts the timestamps associated with each frame of a list of frames created using
frames_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 with
animate_frames()on your system.
animate_frames()creates an animation from a list of frames computed with
Viewing movement tracks
view_spatial()displays movement tracks on an interactive
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.
The following example shows how to make a simple animation using a default base map by first aligning your movement data to a uniform time scale, creating a list of
ggplot2 frames and turning these frames into an animated
library(moveVis) library(move) data("move_data", package = "moveVis") # move class object # if your tracks are present as data.frames, see df2move() for conversion # align move_data to a uniform time scale m <- align_move(move_data, res = 4, unit = "mins") # create spatial frames with a OpenStreetMap watercolour map frames <- frames_spatial(m, path_colours = c("red", "green", "blue"), map_service = "osm", map_type = "watercolor", alpha = 0.5) %>% add_labels(x = "Longitude", y = "Latitude") %>% # add some customizations, such as axis labels add_northarrow() %>% add_scalebar() %>% add_timestamps(m, type = "label") %>% add_progress() frames[] # preview one of the frames, e.g. the 100th frame # animate frames animate_frames(frames, out_file = "moveVis.gif")
You can find code examples on how to use
moveVis code snippets, addressing specific issues or questions, could also be helpful to you:
How to overlay frames with additional transparent rasters changing over time (hacky, not a very optimal solution)
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
Features to be added
Things and features that should be added in future versions of
moveVis (feel free to contribute to this list using a pull request):
- follow population mode
- follow individual mode
- 3D animations, e.g. for including altitude data
The Department of Remote Sensing of the University of Würzburg has developed other R packages that might interest you:
- 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,
- rsMove, a package providing tools to query and analyze movement data using remote sensing.
For other news on the work at at the Department of Remote Sensing of the University of Würzburg, click here.
This initiative is part of the Opt4Environment project and was 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.
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