## Intro

A couple of months ago, I bought a mobile GPS navigation device. The device makes it possible to record the routes we travel with our car. Since the routes can by exported as .gpx files, it is rather easy to plot them using R.

## Packages

To replicate this blog post, three R packages are required: plotKML to import the data into R and ggplot2 and ggmap to plot the data.

library(plotKML)
library(ggplot2)
library(ggmap)

As a prerequisite for the installation of the plotKML package on my Linux Mint 18.3 OS (based on Ubuntu 16.04), I needed to add the ubuntugis PPA.

sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get dist-upgrade

## Import

All what's required for importing the .gpx file into R is the readGPX() function of the plotKML package. After importing the file into R, we receive a list (lst.rd) conatining some meta information and one data frame. To be able to plot the GPS data using ggplot2, we need to subset this list and save the data frame into a new object (df).

lst.rd <- readGPX('29 Dez. 1413.gpx')
df <- lst.rd\$tracks[[1]][[1]]

Using the head function, we have a short look on the data:

head(df)
##        lon      lat                 time
## 1 12.98376 51.05915 2017-12-29T12:16:28Z
## 2 12.98377 51.05912 2017-12-29T12:16:29Z
## 3 12.98374 51.05912 2017-12-29T12:16:30Z
## 4 12.98372 51.05914 2017-12-29T12:16:31Z
## 5 12.98372 51.05914 2017-12-29T12:16:32Z
## 6 12.98372 51.05914 2017-12-29T12:16:33Z

As we can see, our data frame consists of three variables: longitude, latitude and time.

## Plotting

Whithout much efford, we can plot our GPS data using ggplot2. Please note that GPS coordinates must be plotted as points.

ggplot(df, aes(x = lon, y = lat)) +
coord_quickmap() +
geom_point()

In addition, the ggmap package offers some functionality to plot the data on maps.

The first example shows how to plot the data on a map provided by Google Maps.

mapImageData <- get_googlemap(center = c(lon = mean(df\$lon), lat = mean(df\$lat)),
zoom = 10,
color = 'bw',
scale = 1,
maptype = "terrain")
ggmap(mapImageData, extent = "device") + # removes axes, etc.
geom_point(aes(x = lon,
y = lat),
data = df,
colour = "red3",
alpha = .1,
size = .1)

The second example shows how to plot the data on a Stamen map.

mapImage <- get_map(location = c(lon = mean(df\$lon) - 0.05, lat = mean(df\$lat)),
source = "stamen",
maptype = "toner",
zoom = 10)

ggmap(mapImage, extent = "device") +
geom_point(aes(x = lon,
y = lat),
data = df,
colour = "red3",
size = .2)

## References

This blog post heavily borrows from the tutorial Mapping GPS Tracks in R. Thanks very much!

Advertisements

## About norbert

Biometrician at Clinical Trial Centre, Leipzig University (GER), with degrees in sociology (MA) and public health (MPH).
This entry was posted in Visualizing Data and tagged , . Bookmark the permalink.

This site uses Akismet to reduce spam. Learn how your comment data is processed.