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", ...)
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 = ''
.
Arguments
character string naming a geographical database, a list of 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 If If If character string that names a map projection to use. See numeric vector of parameters for use with the a vector logical flag that says whether to draw lines or fill areas. If vector of colors. If logical flag that specifies whether plotting should be done. If logical flag that specifies whether to add to the current plot. If If 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 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 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. 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 character string that controls drawing of the map. Aside from the default background color. margins, as in scalar or vector of length 2 specifying the porportion of the plot to add to the defined or computed limits as borders. A vector of column names to be used as region name if Limit enforcement. Only taken into account if Extra arguments passed to x
, y
, and names
obtained from a previous call to map
or a spatial object of class SpatialPolygons
or SpatialLines
. The string choices include a world
map, three USA databases (usa
, state
, county
), and more (type help(package='maps')
to see the package index). If the requied database is in a different package that has not been attached, the string may be started with "packagename::". The location of the map databases may be overridden by setting the R_MAP_DATA_DIR
environment variable.michigan:north
and michigan:south
. Each element of regions
is matched against the polygon names in the database and, according to exact
, a subset is selected for drawing. The regions may also be defined using (perl) regular expressions. This makes it possible to use 'negative' expressions like "Norway(?!:Svalbard)"
, which means Norway and all islands except Svalbard. All entries are case insensitive. The default selects all polygons in the database.TRUE
, only exact matches with regions
are selected for drawing. If FALSE
, each element of regions
is matched as a regular expression against the polygon names in the database and all matches are selected for drawing.FALSE
, boundary segments are not drawn. A boundary segment is a line segment of the map that bounds only one of the polygons to be drawn. This argument is ignored if fill
is TRUE
.FALSE
, interior segments are not drawn. An interior segment is a line segment of the map that bounds two of the polygons to be drawn. This argument is ignored if fill
is TRUE
.mapproject
(in the mapproj
library). The default is to use a rectangular projection with the aspect ratio chosen so that longitude and latitude scales are equivalent at the center of the picture.projection
argument. This argument is optional only in the sense that certain projections do not require additional parameters. If a projection does require additional parameters, these must be given in the parameters
argument.c(latitude, longitude, rotation)
describing where the map should be centered and a clockwise rotation (in degrees) about this center.FALSE
, the lines bounding each region will be drawn (but only once, for interior lines). If TRUE
, each region will be filled using colors from the col =
argument, and bounding lines are drawn by default using par("fg")
. To hide the bounding lines, use border=NA
(see ...
).fill
is FALSE
, the first color is used for plotting all lines, and any other colors are ignored. Otherwise, the colors are matched one-one with the polygons that get selected by the region
argument (and are reused cyclically, if necessary). If fill = TRUE
, the default boundary line colour is given by par("fg")
. To change this, you can use the border
argument (see '...'). A color of NA
causes the corresponding region to be deleted from the list of polygons to be drawn. Polygon colors are assigned after polygons are deleted due to values of the xlim
and ylim
arguments.plot
is TRUE
the return value of map
will not be printed automatically .FALSE
, a new plot is begun, and a new coordinate system is set up.TRUE
, the return value will be a character vector of the names of the selected polygons. See the Value section below.fill = TRUE
, polygons selected by region
must be entirely inside the xlim
range. The default value of this argument spans the entire longitude range of the database
.fill = TRUE
, polygons selected by region
must be entirely inside the ylim
range. The default value of this argument spans the entire latitude range of the database
.c(-180,180)
or c(0,360)
. This wrapping even works when fill=TRUE
and is performed before any projection (so the range must always be in degrees). However, the wrapping is performed after xlim, ylim
are applied, so these options should probably never be combined. If there is a third component, this signifies the latitude at which Antarctica will be "closed". The default value is -89.9. Special values are NA
(don't draw Antarctica at all) and 0 (draw the line at the latitude of the extremal points, not at a fixed lower latitude).resolution
device pixels of one another are collapsed to a single point (see the Reference for further details). Thinning is not performed if plot = FALSE
or when polygons are drawn (fill = TRUE
or database
is a list of polygons).type = "l"
, the value type = "n"
can be used to set up the coordinate system and projection for a map that will be added to in later calls.par
. Defaults allow for map.axes().database
is a SpatialPolygonsDataFrame
. Ignored in all other cases.xlim
and/or ylim
are defined and (for "s" and "l") a projection is used. Possible values are "n"
(none) "e"
(exact),"s"
(small),"l"
(large). If lforce="e"
, map data is restricted exactly to the given limits prior to projection. This option affects the output value of the map, not only the plot window.If lforce="s"
, the four corners defined by xlim
and ylim
are projected and the plot window is restricted to the largest rectangle inside this region. "l"
will result in a larger rectangle that includes the four corners. However, the parts that fall outside the original limits may not be complete (only polygons that partially fall inside the boundaries are included). This will also work with fill=TRUE
. In this case the output value of the data is not changed, only the plot window is affected. These options are only useful for some projections.polygon
or lines
. Of particular interest may be the options border
andlty
that control the color and line type of the polygon borders when fill = TRUE
.
Details
The simplest form of use of this function is:
map(mymap)
where mymap
is the returned value from a previous call tomap()
.
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 worldmap(wrap = c(0,360), fill = TRUE, col = 2) # pacific-centered map of the worldmap(wrap = c(0, 360, NA), fill = TRUE, col = 2) # idem, without Antarcticamap('usa')# national boundariesmap('county', 'new jersey')# county map of New Jerseymap('state', region = c('new york', 'new jersey', 'penn'))# map of three statesmap("state", ".*dakota", myborder = 0)# map of the dakotasmap.axes()# show the effect of myborder = 0if(require(mapproj)) map('state', proj = 'bonne', param = 45)# Bonne equal-area projection of states# names of the San Juan islands in Washington statemap('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}
Run the code above in your browser using DataLab