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!