Map Elements and Basic Print Layout

One important characteristic of maps is that they need to be both functional and aesthetically pleasing. The craft of map making is called cartography.

This tutorial will describe some fundamental elements of cartography and demonstrate how to perform formatting of a choropleth map in ArcMap to create a simple print layout suitable for basic needs.

Map Elements

Framing Elements

The mapped area is the region of the earth being represented.

Frame lines are used to help clearly delineate the map content. Frame lines are often drawn to contain all map elements, and are separated from the edge of the page by a fixed margin width.

Example Frame Line

Neat lines are borders placed around individual map areas within a layout.

Example Neat Line Within a Frame Line

Inset maps are smaller maps included within the context of the larger map. Inset maps are often used to give close-up views of specific areas within the broader mapped area, or show related but spatially discontinuous areas, as with insets of Alaska and Hawaii on a map of the USA.

Example Inset Maps of Alaska and Hawaii

A special case of an inset map is a key map which shows an area larger than the mapped area, but contains a box or highlighted area giving geographic context for the location being mapped.

Example Key Map (NY Times)


Marginalia is additional information that helps explain or support the map. While, as the name implies, this material is often placed in the margins of the map, the term is more-generally used to include explanatory material placed anywhere on the map.

Most maps have a title that succinctly summarizes the contents of the map or the area represented. Some maps have an additional subtitle that provides additional descriptive information. Additionally, maps should have documentation of:

A legend defines all of the thematic symbols on the map.

Example Marginalia (Legend, Title, Metadata)

Scale and Orientation

Although cartographic convention places north at the top of the page, this is not always the case, notably in situations where a map is rotated to reflect usage or display situations where a north-up orientation would be confusing. A north arrow is used to indicate which direction on a map is north.

Example North Arrow

In cases where the projection causes the direction of north to be different at different parts of the map, a north arrow is not literally correct, although they may still be used to clarify general orientation.

A graticule is a set of grid lines separated by a regular distance or number of degrees. Parallels show the latitude and meridians show longitude.

Closeup of Graticule Lines

A scale bar can also be used to show how land distance is represented by space on the map.

Example Scale Bar


There are a wide variety of different typefaces or fonts used for map text. However, typefaces generally fall into two categories. Serifs are short lines or ornamentations stemming from the upper and lower ends of the strokes of a letter. Fonts that have letters with serifs are called serif fonts. Fonts without serifs are called sans-serif fonts.


Annotating a David Rumsey Map

Annotating a David Rumsey Map

Basic Cartographic Elements in ArcMap

Basic Print Layout in ArcMap

Maps used in this video:

Creating a Print Layout in ArcMap

Creating a Print Layout in ArcMap

The county-level election data for this tutorial is available here.

  1. Introduction (0:00)
  2. Downloading shapefiles (1:15)
  3. Page templates and setup (1:50)
  4. Adding data (2:30)
  5. Changing projections (3:05)
  6. Symbology (3:35)
  7. Adding a base map (4:40)
  8. Layout view and marginalia (5:15)
  9. Adding a legend (6:10)
  10. Adding metadata, logos and frames(7:05)
  11. Adding insets (8:40)
  12. Exporting to PDF (11:25)
  13. Layout templates (11:45)

Creating a Print Layout in R

While R has strong capabilities for creating data visualizations, including map figures, interactive GIS and graphics programs (like ArcMap, QGIS and Adobe Illustrator) are much more flexible when creating complex print layouts. However, it is possible to create acceptable printable maps assuming you have patience and don't ask for too much.

The following is a script that creates a county-level election data map for the 2012 US presidential election using data that is available here.

Simple Print Layout Map Created Using R
# Open the device to print to a PDF file
pdf(file="2012-election.pdf", height=8.5, width=11, title="2012 US Presidential Election Results by County")

# Plot the base map with extra space on the bottom

upperLeft = c(51, -130)
lowerRight = c(15, -60)
basemap = openmap(upperLeft, lowerRight, type="osm")

plot(basemap, mar=c(1,1,1,1), removeMargin=F)

# Import county polygons and data

counties = readOGR(dsn=".", layer="2016-presidential-counties", stringsAsFactors=F)

# Show only the continental US
counties = counties[!(counties$ST %in% c("AK", "HI")),]

# Transform to the OSM spherical Mercator projection
counties = spTransform(counties, osm())

# Cut counties into quantiles by percent of vote going to Democrats
quant = quantile(counties$PCDEM2012)

# Use the quantiles to pick colors from a red-blue color ramp
palette = colorRampPalette(c("red2", "navy"))
ramp = palette(4)
colors = ramp[cut(counties$PCDEM2012, quant)]

plot(counties, col = colors, add=T)

# Functions to calculate plot locations based on percent from left and bottom, respectively
plotx = function(percent) {
	return(basemap$bbox$p1[1] + ((basemap$bbox$p2[1] - basemap$bbox$p1[1]) * percent)) }

ploty = function(percent) {
	return(basemap$bbox$p2[2] + ((basemap$bbox$p1[2] - basemap$bbox$p2[2]) * percent)) }

# Function to draw boxed areas
drawbox = function(left, top, right, bottom, ...) {
	polygon(x = c(left, right, right, left, left), y = c(top, top, bottom, bottom, top), ...) }

# White out marginalia area
drawbox(left = plotx(0), top = ploty(0.22), right = plotx(1), bottom = ploty(0), col="white", border=NA)

# Marginalia border
drawbox(left = plotx(0), top = ploty(0.2), right = plotx(1), bottom = ploty(0), col="white", border="gray", lwd=2)

# Neatline
drawbox(left = plotx(0), top = ploty(1), right = plotx(1), bottom = ploty(.22), col=NA, border="gray", lwd=2)

# Draw legend

ranges = sapply(1:4, function(x) paste0(quant[x], '% - ', quant[x + 1], '%'))

legend(x = plotx(0.04), y = ploty(0.17), cex=0.9, bty='n',
	legend = ranges, fill=ramp, bg="white", inset=0.05 )

# Title and metadata

text(x = plotx(0.5), y = ploty(0.15), pos=1, font=2, cex=1.8,
	labels="2012 US Presidential\nDemocratic Vote by County")

text(x = plotx(0.75), y = ploty(0.09), pos=4, font=1, cex=0.9,
	labels="Cartographer: Michael Minn\nDate: 3 March 2017\nSource: AP via Politico\nProjection: Spherical Mercator")

# Close the output PDF file