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.
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 (wraping the gifski cargo crate) and
av (binding to FFmpeg) to render frames into animated GIF or video files.
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.
moveVis 0.10.2 (stable) 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:
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 OpenStreetMaps and Mapbox basemap imergay. 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.
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
view_spatial()displays movement tracks on an interactive
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)library(magrittr)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 scalem <- align_move(move_data, res = 240, digit = 0, unit = "secs")# create spatial frames with a OpenStreetMap watercolour mapframes <- 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 labelsadd_northarrow() %>%add_scalebar() %>%add_timestamps(m, type = "label") %>%add_progress()frames[] # preview one of the frames, e.g. the 100th frame# animate framesanimate_frames(frames, out_file = "/full/path/to/moveVis.gif")
You can find code examples on how to use
Example 4: Custom base maps from raster data (to be added soon)
Example 5: Interaction graphs (to be added soon)
Example 6: Joining frames side by side (to be added soon)
moveVis code snippets, addressing specific issues or questions, could also be helpful to you:
How to hold the last frame of an animation for a defined time and make it look good by using path_fade (requires
moveVis >= 0.10.2)
How to display the full traces of each path using trace_show and trace_colour with frames_spatial() (requires
moveVis >= 0.10.2)
How to assign multiple path colours per individual to indicate e.g. behavioral segments (requires
moveVis >= 0.10.1)
How to overlay frames with additional transparent rasters changing over time (not yet a optimal solution)
Detailed code examples explaining how to use specific functions are provided at the fucntion 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
Things and features that should be added in future versions of
moveVis (feel free to contribute to this list using a pull request):
Next version (0.10.2):
get_maptypes()for bright and dark map types)
The Department of Remote Sensing of the University of Würzburg has developed other R packages that might interest you:
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.
Adding some small but practical features. Released on CRAN: 2019-04-30.
frames_spatial()for defining path transparency.
frames_spatial()makes it now possible to define the colour of the last tail element, to which the path colour is faded. Default is "white".
frames_spatial()for displaying the trace of the complete path (instead that it vanishes after the tail).
frames_spatial()for defining the colour of the trace.
add_colourscale()for defining the colouring of NA values.
add_colourscale()to show or hide NA values in discrete background rasters.
animate_frames()to hold the last frame, adding a pause of a user-defined duration to the end of an animation.
frames_spatial()to define whether paths should be faded towards the last frame or not. Useful in combination with
trace_show = Tand when using
moveVisnow stores the timestamps represented by each frame as an attribute
ggplotframe. Frame times can now be accessed using
add_timestamps()can now extract timestamps directly from frames, which makes defining
get_frametimes()lets you extract the timestamps associated with each frame of a list of frames created using
add_colourscale()now calculates scale and legend with frame-wide fixed limits, when
coloursis defined as a named vector, e.g.
c("-1" = "red", "0" = "blue", "1" = "green").
moveVisnow displays the approximated duration of an animation on the console, when creating frames or rendering frames.
Bug fixes. Released on CRAN: 2019-04-11.
fade_raster = Tin
frames_spatial()due to unequal vector lengths returned by the internal interpolation function (issue #45)
fade_raster = Fand/or
r_timescontained time elements outside the time range covered by the timestamps of
moveVis rewrite introducing a new logic and new functions. Released on CRAN: 2019-03-20
ggplot2syntax can now be added to every single frame, allowing you to customize almost everything that can be customized using
add_functions wrapping pre-defined
ggplot2functions are included. For example,
add_ggoffers dynamic overplotting, e.g. for polygons or points that change over time
colourcolumn in your movement data, allowing segmentation coulouring or colouring based on a logic, you defined beforhand
frames_spatial()you can define user-defined area of interest (AOI), which scales the frame extent to a specific area
moveVissupports Mapbox (free, registration needed). OpenStreetMap and Carto (both free) as base map services. See the manual of
frames_spatial()now takes the argument
equidistantto define whether the map should be stretched to an equidistant (squared) extent (x and y axis representing same distance) or not (projection-native ratio).
coord_sfto display projections (see details section of
animate_frames(): see the README and the description of the individual functions for further details.
subset_move(): subset movement data for a particular time span
df2move(): simple wrapper that converts data.frames into move or moveStack objects
view_spatial(): view movement data on an interactive map using
get_libraries(): These functions have been replaced by a new logic and new functions.
Reorganizing standard basemap usage by moveVis. Released on CRAN: 2018-11-23
map_typeare now retrieved from either OpenStreetMaps for thematic imagery or Microsoft Bing Maps for satellite/hybrid imagery. The usage of OpenStreetMaps is free. For intensive use of the Bing Maps basemap options, please provide your own Bing Maps API key through the
api_keyargument, after registering at Microsoft here: https://msdn.microsoft.com/en-us/library/ff428642.aspx. Google Maps services will be implemented in a future update for restricted usage using an API key.
map_type: "satellite" (default), "hybrid", "roadmap", "roadmap_dark", "roadmap_bw", "roadmap_watercolor".
animate_move: Increase or decrease the degree of detail of a static basemap.
animate_move: Define, if a static basemap should be cropped to the extent of
mor if a wider extent of optimal resolution should be used.
Updating unit tests for CRAN checks. Released on CRAN: 2018-09-14
Windows library detection bugs fixed. Released on CRAN: 2018-09-07
time_pos_xallow to specify the location of the timestamp display
time_sizeallows to specify the font size of the timestamp display
video support, automatic time harmonization, bug fixes. Released on CRAN: 2017-11-01
get_libraries()– handles all extern libraries that are needed for video formats. Just run it to get information on what you need to install. Replaces get_imconvert(), which can still be called for code compatibility reasons
get_formats()– outputs all file formats that can be used with moveVis depending on which libraries are installed on the system.
adding frames_layout, static_data etc., improvements to workflow. Released on CRAN: 2017-08-20
adding animate_stats() and stats arguments for animate_move(). Released on CRAN: 2017-06-28
animate_stats()– Enables creation of statistic plot animations visualizing possible relationships between movement paths and basemap. Define individual plot designs based on ggplot2 syntax.
fixing major bug. Released on CRAN: 2017-06-28
adding frame_width and frame_height arguments. Released on CRAN: 2017-06-28
fixing important bug; adding animate_raster(). Released on CRAN: 2017-05-23
animate_raster()– for animating just basemaps/for doing the same as with animate_move(), but without movement data
initial release. Released on CRAN: 2017-04-28
This document should provide a broad overview on changes that are applied to the moveVis R package. There is no warranty for completeness, since minor changes might not be included. All improvement and feature descriptions are bundled per release version. The document is currently maintained by Jakob Schwalb-Willmann.