map {maps} | R Documentation |
Draw Geographical Maps
Description
Draw lines and polygons as specified by a map database.
Usage
map(database = "world", regions = ".", exact = FALSE, boundary = TRUE,
interior = TRUE, projection = "", parameters = NULL, orientation = NULL,
fill = FALSE, col = 1, plot = TRUE, add = FALSE, namesonly = FALSE,
xlim = NULL, ylim = NULL, wrap = FALSE, resolution = if (plot) 1 else 0,
type = "l", bg = par("bg"), mar = c(4.1, 4.1, par("mar")[3], 0.1),
myborder = 0.01, namefield="name", lforce="n", ...)
Arguments
database |
character string naming a geographical database, a list of
|
regions |
character vector that names the polygons to draw.
Each database is composed of a collection of polygons, and each polygon has
a unique name.
When a region is composed of more than one polygon, the individual polygons
have the name of the region, followed by a colon and a qualifier,
as in |
exact |
If |
boundary |
If |
interior |
If |
projection |
character string that names a map projection to use.
See |
parameters |
numeric vector of parameters for use with the
|
orientation |
a vector |
fill |
logical flag that says whether to draw lines or fill areas.
If |
col |
vector of colors.
If |
plot |
logical flag that specifies whether plotting
should be done.
If |
add |
logical flag that specifies whether to add to the
current plot.
If |
namesonly |
If |
xlim |
two element numeric
vector giving a range of longitudes, expressed
in degrees, to which drawing
should be restricted.
Longitude is measured in degrees east of Greenwich, so that, in particular,
locations in the USA have negative longitude.
If |
ylim |
two element
numeric vector giving a range of latitudes,
expressed in degrees, to which drawing
should be restricted.
Latitude is measured in degrees north of the
equator, so that, in particular,
locations in the USA have positive latitude.
If |
wrap |
Boolean or a numeric vector. If TRUE, lines that cross too far across the map
(due to a strange projection) are omitted. If wrap is a vector of length 2 or more, it is interpreted as the longitude range to be used for a global map, e.g. |
resolution |
number that specifies the resolution with which
to draw the map.
Resolution 0 is the full resolution of the database.
Otherwise, just before polylines are plotted they are thinned:
roughly speaking, successive points on the polyline that are
within |
type |
character string that controls drawing of the map.
Aside from the default |
bg |
background color. |
mar |
margins, as in |
myborder |
scalar or vector of length 2 specifying the porportion of the plot to add to the defined or computed limits as borders. |
namefield |
A vector of column names to be used as region name if |
lforce |
Limit enforcement. Only taken into account if |
... |
Extra arguments passed to |
Details
The simplest form of use of this function is:
map(mymap)
where mymap
is the returned value from a previous call to
map()
.
Value
If plot = TRUE
, a plot is made where
the polygons selected from database
, through the
regions
, xlim
, and ylim
arguments, are outlined
(fill
is FALSE
) or filled (fill
is TRUE
)
with the colors in col
.
The return value is a list with
x
, y
, range
, and names
components.
This object can be used as a database
for successive calls
to map
and functions.
If fill
is FALSE
, the x
and y
vectors are
the coordinates of successive polylines, separated by NA
s. If
fill
is TRUE
, the x
and y
vectors have
coordinates of successive polygons, again separated by NA
s.
Thus the return value can be handed directly to lines
or
polygon
, as appropriate.
When namesonly
is TRUE
, only the names component is returned.
After a call to map
for which the projection
argument was
specified there will be a global variable .Last.projection
containing information about the projection used.
This will be consulted in subsequent calls to map
which use
projection = ''
.
References
Richard A. Becker, and Allan R. Wilks, "Maps in S", AT&T Bell Laboratories Statistics Research Report [93.2], 1993. https://web.archive.org/web/20050825145143/http://www.research.att.com/areas/stat/doc/93.2.ps
Richard A. Becker, and Allan R. Wilks, "Constructing a Geographical Database", AT&T Bell Laboratories Statistics Research Report [95.2], 1995. https://web.archive.org/web/20050825145143/http://www.research.att.com/areas/stat/doc/95.2.ps
See Also
map.text
, map.axes
,
map.scale
, map.grid
(in the mapproj
library),
polygon
, SpatialPolygons2map
Examples
map() # low resolution map of the world
map(wrap = c(0,360), fill = TRUE, col = 2) # pacific-centered map of the world
map(wrap = c(0, 360, NA), fill = TRUE, col = 2) # idem, without Antarctica
map('usa') # national boundaries
map('county', 'new jersey') # county map of New Jersey
map('state', region = c('new york', 'new jersey', 'penn')) # map of three states
map("state", ".*dakota", myborder = 0) # map of the dakotas
map.axes() # show the effect of myborder = 0
if(require(mapproj))
map('state', proj = 'bonne', param = 45) # Bonne equal-area projection of states
# names of the San Juan islands in Washington state
map('county', 'washington,san', names = TRUE, plot = FALSE)
# national boundaries in one linetype, states in another
# (figure 5 in the reference)
map("state", interior = FALSE)
map("state", boundary = FALSE, lty = 2, add = TRUE)
# plot the ozone data on a base map
# (figure 4 in the reference)
data(ozone)
map("state", xlim = range(ozone$x), ylim = range(ozone$y))
text(ozone$x, ozone$y, ozone$median)
box()
if(require(mapproj)) { # mapproj is used for projection="polyconic"
# color US county map by 2009 unemployment rate
# match counties to map using FIPS county codes
# Based on J's solution to the "Choropleth Challenge"
# http://blog.revolutionanalytics.com/2009/11/choropleth-challenge-result.html
# load data
# unemp includes data for some counties not on the "lower 48 states" county
# map, such as those in Alaska, Hawaii, Puerto Rico, and some tiny Virginia
# cities
data(unemp)
data(county.fips)
# define color buckets
colors = c("#F1EEF6", "#D4B9DA", "#C994C7", "#DF65B0", "#DD1C77", "#980043")
unemp$colorBuckets <- as.numeric(cut(unemp$unemp, c(0, 2, 4, 6, 8, 10, 100)))
leg.txt <- c("<2%", "2-4%", "4-6%", "6-8%", "8-10%", ">10%")
# align data with map definitions by (partial) matching state,county
# names, which include multiple polygons for some counties
cnty.fips <- county.fips$fips[match(map("county", plot=FALSE)$names,
county.fips$polyname)]
colorsmatched <- unemp$colorBuckets [match(cnty.fips, unemp$fips)]
# draw map
map("county", col = colors[colorsmatched], fill = TRUE, resolution = 0,
lty = 0, projection = "polyconic")
map("state", col = "white", fill = FALSE, add = TRUE, lty = 1, lwd = 0.2,
projection="polyconic")
title("unemployment by county, 2009")
legend("topright", leg.txt, horiz = TRUE, fill = colors)
# Choropleth Challenge example, based on J's solution, see:
# http://blog.revolutionanalytics.com/2009/11/choropleth-challenge-result.html
# To see the faint county boundaries, use RGui menu: File/SaveAs/PDF
}