Skip to contents

qmplot() is the ggmap equivalent to the ggplot2 function qplot and allows for the quick plotting of maps with data/models/etc.

Usage

qmplot(
  x,
  y,
  ...,
  data,
  zoom,
  source = "stadia",
  maptype = "stamen_toner_lite",
  extent = "device",
  legend = "right",
  padding = 0.02,
  force = FALSE,
  darken = c(0, "black"),
  mapcolor = "color",
  facets = NULL,
  margins = FALSE,
  geom = "auto",
  stat = list(NULL),
  position = list(NULL),
  xlim = c(NA, NA),
  ylim = c(NA, NA),
  main = NULL,
  f = 0.05,
  xlab = "Longitude",
  ylab = "Latitude"
)

Arguments

x

longitude values

y

latitude values

...

other aesthetics passed for each layer

data

data frame to use (optional). If not specified, will create one, extracting vectors from the current environment.

zoom

map zoom, see get_map()

source

map source, see get_map()

maptype

map type, see get_map()

extent

how much of the plot should the map take up? "normal", "panel", or "device" (default)

legend

"left", "right" (default), "bottom", "top", "bottomleft", "bottomright", "topleft", "topright", "none" (used with extent = "device")

padding

distance from legend to corner of the plot (used with extent = "device")

force

force new map (don't use archived version)

darken

vector of the form c(number, color), where number is in (0,1) and color is a character string indicating the color of the darken. 0 indicates no darkening, 1 indicates a black-out.

mapcolor

color ("color") or black-and-white ("bw")

facets

faceting formula to use. Picks facet_wrap() or facet_grid() depending on whether the formula is one sided or two-sided

margins

whether or not margins will be displayed

geom

character vector specifying geom to use. defaults to "point"

stat

character vector specifying statistics to use

position

character vector giving position adjustment to use

xlim

limits for x axis

ylim

limits for y axis

main

character vector or expression for plot title

f

number specifying the fraction by which the range should be extended

xlab

character vector or expression for x axis label

ylab

character vector or expression for y axis label

Examples


if (FALSE)  # these are skipped to conserve R check time

qmplot(lon, lat, data = crime)


# only violent crimes
violent_crimes <- subset(crime,
  offense != "auto theft" &
  offense != "theft" &
  offense != "burglary"
)
#> Error in eval(expr, envir, enclos): object 'crime' not found

# rank violent crimes
violent_crimes$offense <- factor(
  violent_crimes$offense,
  levels = c("robbery", "aggravated assault", "rape", "murder")
)
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found

# restrict to downtown
violent_crimes <- subset(violent_crimes,
  -95.39681 <= lon & lon <= -95.34188 &
   29.73631 <= lat & lat <=  29.78400
)
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found

theme_set(theme_bw())

qmplot(lon, lat, data = violent_crimes, colour = offense,
  size = I(3.5), alpha = I(.6), legend = "topleft")
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found

qmplot(lon, lat, data = violent_crimes, geom = c("point","density2d"))
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found
qmplot(lon, lat, data = violent_crimes) + facet_wrap(~ offense)
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found
qmplot(lon, lat, data = violent_crimes, extent = "panel") + facet_wrap(~ offense)
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found
qmplot(lon, lat, data = violent_crimes, extent = "panel", colour = offense, darken = .4) +
  facet_wrap(~ month)
#> Error in eval(expr, envir, enclos): object 'violent_crimes' not found




qmplot(long, lat, xend = long + delta_long,
  color = I("red"), yend = lat + delta_lat, data = seals,
  geom = "segment", zoom = 5)
#>  © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
#> Error in get_stamen_url(maptype = maptype, zoom = zoom, x = row["x"],     y = row["y"]): Stadia Maps requires an API key; see `ggmap::register_stadiamaps()`.

qmplot(long, lat, xend = long + delta_long, maptype = "stamen_watercolor",
  yend = lat + delta_lat, data = seals,
  geom = "segment", zoom = 6)
#>  © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
#>  72 tiles needed, this may take a while (try a smaller zoom?)
#> Error in get_stamen_url(maptype = maptype, zoom = zoom, x = row["x"],     y = row["y"]): Stadia Maps requires an API key; see `ggmap::register_stadiamaps()`.

qmplot(long, lat, xend = long + delta_long, maptype = "stamen_terrain",
  yend = lat + delta_lat, data = seals,
  geom = "segment", zoom = 6)
#>  © Stadia Maps © Stamen Design © OpenMapTiles © OpenStreetMap contributors.
#>  72 tiles needed, this may take a while (try a smaller zoom?)
#> Error in get_stamen_url(maptype = maptype, zoom = zoom, x = row["x"],     y = row["y"]): Stadia Maps requires an API key; see `ggmap::register_stadiamaps()`.


qmplot(lon, lat, data = wind, size = I(.5), alpha = I(.5)) +
  ggtitle("NOAA Wind Report Sites")
#> Error in eval(expr, envir, enclos): object 'wind' not found

# thin down data set...
s <- seq(1, 227, 8)
thinwind <- subset(wind,
  lon %in% unique(wind$lon)[s] &
  lat %in% unique(wind$lat)[s]
)
#> Error in eval(expr, envir, enclos): object 'wind' not found

# for some reason adding arrows to the following plot bugs
theme_set(theme_bw(18))

qmplot(lon, lat, data = thinwind, geom = "tile", fill = spd, alpha = spd,
    legend = "bottomleft") +
  geom_leg(aes(xend = lon + delta_lon, yend = lat + delta_lat)) +
  scale_fill_gradient2("Wind Speed\nand\nDirection",
    low = "green", mid = scales::muted("green"), high = "red") +
  scale_alpha("Wind Speed\nand\nDirection", range = c(.1, .75)) +
  guides(fill = guide_legend(), alpha = guide_legend())
#> Error in eval(expr, envir, enclos): object 'thinwind' not found




## kriging
############################################################
# the below examples show kriging based on undeclared packages
# to better comply with CRAN's standards, we remove it from
# executing, but leave the code as a kind of case-study
# they also require the rgdal library


library(lattice)
library(sp)
#> Error in library(sp): there is no package called ‘sp’
library(rgdal)
#> Error in library(rgdal): there is no package called ‘rgdal’

# load in and format the meuse dataset (see bivand, pebesma, and gomez-rubio)
data(meuse)
#> Warning: data set ‘meuse’ not found
coordinates(meuse) <- c("x", "y")
#> Error: object 'meuse' not found
proj4string(meuse) <- CRS("+init=epsg:28992")
#> Error in CRS("+init=epsg:28992"): could not find function "CRS"
meuse <- spTransform(meuse, CRS("+proj=longlat +datum=WGS84"))
#> Error in spTransform(meuse, CRS("+proj=longlat +datum=WGS84")): could not find function "spTransform"

# plot
plot(meuse)
#> Error in eval(expr, envir, enclos): object 'meuse' not found

m <- data.frame(slot(meuse, "coords"), slot(meuse, "data"))
#> Error in eval(expr, envir, enclos): object 'meuse' not found
names(m)[1:2] <- c("lon", "lat")
#> Error: object 'm' not found

qmplot(lon, lat, data = m)
#> Error in eval(expr, envir, enclos): object 'm' not found
qmplot(lon, lat, data = m, zoom = 14)
#> Error in eval(expr, envir, enclos): object 'm' not found


qmplot(lon, lat, data = m, size = zinc,
  zoom = 14, source = "google", maptype = "satellite",
  alpha = I(.75), color = I("green"),
  legend = "topleft", darken = .2
) + scale_size("Zinc (ppm)")
#> Error in eval(expr, envir, enclos): object 'm' not found








# load in the meuse.grid dataset (looking toward kriging)
library(gstat)
#> Error in library(gstat): there is no package called ‘gstat’
data(meuse.grid)
#> Warning: data set ‘meuse.grid’ not found
coordinates(meuse.grid) <- c("x", "y")
#> Error: object 'meuse.grid' not found
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
#> Error in CRS("+init=epsg:28992"): could not find function "CRS"
meuse.grid <- spTransform(meuse.grid, CRS("+proj=longlat +datum=WGS84"))
#> Error in spTransform(meuse.grid, CRS("+proj=longlat +datum=WGS84")): could not find function "spTransform"

# plot it
plot(meuse.grid)
#> Error in eval(expr, envir, enclos): object 'meuse.grid' not found

mg <- data.frame(slot(meuse.grid, "coords"), slot(meuse.grid, "data"))
#> Error in eval(expr, envir, enclos): object 'meuse.grid' not found
names(mg)[1:2] <- c("lon", "lat")
#> Error: object 'mg' not found

qmplot(lon, lat, data = mg, shape = I(15), zoom = 14, legend = "topleft") +
  geom_point(aes(size = zinc), data = m, color = "green") +
  scale_size("Zinc (ppm)")
#> Error in eval(expr, envir, enclos): object 'mg' not found



# interpolate at unobserved locations (i.e. at meuse.grid points)
# pre-define scale for consistency
scale <- scale_color_gradient("Predicted\nZinc (ppm)",
  low = "green", high = "red", lim = c(100, 1850)
)



# inverse distance weighting
idw <- idw(log(zinc) ~ 1, meuse, meuse.grid, idp = 2.5)
#> Error in idw(log(zinc) ~ 1, meuse, meuse.grid, idp = 2.5): could not find function "idw"
mg$idw <- exp(slot(idw, "data")$var1.pred)
#> Error in eval(expr, envir, enclos): object 'idw' not found

qmplot(lon, lat, data = mg, shape = I(15), color = idw,
  zoom = 14, legend = "topleft", alpha = I(.75), darken = .4
) + scale
#> Error in eval(expr, envir, enclos): object 'mg' not found



# linear regression
lin <- krige(log(zinc) ~ 1, meuse, meuse.grid, degree = 1)
#> Error in krige(log(zinc) ~ 1, meuse, meuse.grid, degree = 1): could not find function "krige"
mg$lin <- exp(slot(lin, "data")$var1.pred)
#> Error in eval(expr, envir, enclos): object 'lin' not found

qmplot(lon, lat, data = mg, shape = I(15), color = lin,
  zoom = 14, legend = "topleft", alpha = I(.75), darken = .4
) + scale
#> Error in eval(expr, envir, enclos): object 'mg' not found



# trend surface analysis
tsa <- krige(log(zinc) ~ 1, meuse, meuse.grid, degree = 2)
#> Error in krige(log(zinc) ~ 1, meuse, meuse.grid, degree = 2): could not find function "krige"
mg$tsa <- exp(slot(tsa, "data")$var1.pred)
#> Error in eval(expr, envir, enclos): object 'tsa' not found

qmplot(lon, lat, data = mg, shape = I(15), color = tsa,
  zoom = 14, legend = "topleft", alpha = I(.75), darken = .4
) + scale
#> Error in eval(expr, envir, enclos): object 'mg' not found



# ordinary kriging
vgram <- variogram(log(zinc) ~ 1, meuse)   # plot(vgram)
#> Error in variogram(log(zinc) ~ 1, meuse): could not find function "variogram"
vgramFit <- fit.variogram(vgram, vgm(1, "Exp", .2, .1))
#> Error in fit.variogram(vgram, vgm(1, "Exp", 0.2, 0.1)): could not find function "fit.variogram"
ordKrige <- krige(log(zinc) ~ 1, meuse, meuse.grid, vgramFit)
#> Error in krige(log(zinc) ~ 1, meuse, meuse.grid, vgramFit): could not find function "krige"
mg$ordKrige <- exp(slot(ordKrige, "data")$var1.pred)
#> Error in eval(expr, envir, enclos): object 'ordKrige' not found

qmplot(lon, lat, data = mg, shape = I(15), color = ordKrige,
  zoom = 14, legend = "topleft", alpha = I(.75), darken = .4
) + scale
#> Error in eval(expr, envir, enclos): object 'mg' not found



# universal kriging
vgram <- variogram(log(zinc) ~ 1, meuse) # plot(vgram)
#> Error in variogram(log(zinc) ~ 1, meuse): could not find function "variogram"
vgramFit <- fit.variogram(vgram, vgm(1, "Exp", .2, .1))
#> Error in fit.variogram(vgram, vgm(1, "Exp", 0.2, 0.1)): could not find function "fit.variogram"
univKrige <- krige(log(zinc) ~ sqrt(dist), meuse, meuse.grid, vgramFit)
#> Error in krige(log(zinc) ~ sqrt(dist), meuse, meuse.grid, vgramFit): could not find function "krige"
mg$univKrige <- exp(slot(univKrige, "data")$var1.pred)
#> Error in eval(expr, envir, enclos): object 'univKrige' not found

qmplot(lon, lat, data = mg, shape = I(15), color = univKrige,
  zoom = 14, legend = "topleft", alpha = I(.75), darken = .4
) + scale
#> Error in eval(expr, envir, enclos): object 'mg' not found



# adding observed data layer
qmplot(lon, lat, data = mg, shape = I(15), color = univKrige,
  zoom = 14, legend = "topleft", alpha = I(.75), darken = .4
) +
  geom_point(
    aes(x = lon, y = lat, size = zinc),
    data = m, shape = 1, color = "black"
  ) +
  scale +
  scale_size("Observed\nLog Zinc")
#> Error in eval(expr, envir, enclos): object 'mg' not found






 # end dontrun