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()
orfacet_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