What is moveVis?

moveVis is an R package providing tools to visualize movement data by creating path animations from geo-location point data. The package is under ongoing development. The moveVis package is working hand in hand with the move package by using the move and moveStack class and the raster package. It is based on a ggplot2 plotting architecture and relys on the libraries ImageMagick, ffmpeg and libav. To be informed about updates, new features and the current version, visit www.moveVis.org.

What can I do with it?

Here are two moveVis output examples. You find more in other posts of this blog. This image shows an animate_move() output, displaying White Storks movement nearby Lake Constance, using a static land cover/land use map in the background:

moveVis example 1

The following image shows an animate_move() output, displaying White Storks movement nearby Lake Constance, using a dynamic MODIS NDVI layer in the background:

moveVis example 2


For operational use of moveVis, please use the current stable CRAN version of moveVis. If you want to test new features or help finding bugs, you are welcome to install the development version:

## Install stable CRAN version

## Install development version

Getting started

You can use moveVis with any move or moveStack object. This guide shortly explains how to prepare your own geo-location point data for the animate_move() function by creating a move class object from a data.frame class object. As an example, the provided example data (data.frame) are used. Instead, you could use any similar prepared data of yours.

First, load moveVis and the move package:

#Load packages

External libraries

moveVis requires at least one of the three external libraries ‘ffmpeg’, ‘libav’ and/or ‘ImageMagick’. They support different types of output formats (gif, mov, mp4 etc.). If you have ‘ImageMagick’ and either ‘ffmepg’ or ‘libav’ installed, you can use all output formats supported by moveVis.

Run get_libraries() to find out, which libraries are installed on your system and to get instructions how to download and to install the needed libraries:

ImageMagick: For GIF outputs, ImageMagick is needed. On many Linux distributions, ImageMagick is preinstalled or can be installed via the package manager (on Ubuntu: sudo apt-get install imagemagick). On Windows, install ImageMagick from here. Make sure that you select “Install legacy utilities (e.g. convert)” during the installation process.

ffmpeg/libav: To be able to output video formats, ffmpeg is recommended. Ubuntu users can easily install it executing sudo apt-get install ffmpeg from the terminal (similar on other Linux platforms). On Windows, installation takes a little more steps, which are nicely described in this recommended guide (including the link to the binary download, which you need). Alternatively, moveVis supports libav, which is preinstalled on some Linux distributions.

After the required libraries are once installed, restart your R session and then run get_libraries() again to check, if they are recognized by moveVis. If so, everything is set for starting to create your first moveVis animation.

Data preperation

You will need to load the example data for this tutorial:

#Load data (data.frame) (or use your own as data.frame)

As the provided example data, your data.frame needs to have at least three columns: two columns for your coordinates (here “lat”, “lon”) and one for the date/time stamp (here “dt”). The date/time stamps need to be converted to POSIXct as follows:

move_data$dt <- as.POSIXct(strptime(move_data$dt, "%Y-%m-%d %H:%M:%S", tz = "UTC"))

Your movement data need to be provided as move class objects to the animate_move() function. For each individual movement path you want to display simultaniously within a single animation, you will need one move class object. The move class objects per path are provided as a list. If your data.frame contains several individuals (e. g. differentiable by a “individuals” column, as the example data.frame does), then subset the data per individual and store the namings. If you just want to display a single path, you do not have to do this.

#Create new move class object list by individual
data_ani <- split(move(move_data$lon, move_data$lat, proj=CRS("+proj=longlat +ellps=WGS84"),
                       time = move_data$dt, animal=move_data$individual, data=move_data))

Additional input variables

get_libraries() returns the library commands that are needed by the animate functions. Just save them to a variable that you can later pass to the animate function so that it knows how to call the extern library commands. You can also call get_formats() to see all output formats, you can choose from.

#Get libraries 
conv_dir <- get_libraries()

#Find out, which output file formats can be used

Last, you need to specify the output directory path and you can specify some optional variables such as the animation title (for details on all the arguments of animate_move() , read the animate_move() help).

#Specify output directory
out_dir <- paste0(getwd(),"/test")

#Specify some optional appearance variables
img_title <- "Movement of the white stork population at Lake Constance, Germany"
img_sub <- paste0("including individuals ",indi_names)
img_caption <- "Projection: Geographical, WGS84; Sources: Movebank 2013; Google Maps"

Animate function call

Finally, you are now prepared to call animate_move(), which will have to work for a while depending on your input. Here, for demonstrational purposes, we use frames_nmax set to 50 to force the function to only produce 50 frames and then finish the animation, regardless how many input points you provided. Set log_level to 1 to be informed of anything the function is doing. Set out_format to “mov” to get a .mov video output file.

#Call animate_move()
animate_move(data_ani, out_dir, conv_dir = conv_dir, tail_elements = 10,
             paths_mode = "true_data", frames_nmax = 50,
             img_caption = img_caption, img_title = img_title,
             img_sub = img_sub, log_level = 1, out_format = "mov")

After the function is finished, check the output directory. Retry everything with different settings and modes, described in the function manuals. Further examples and explanations are provided within the function manuals.