mapsf

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 5,
  fig.height = 6
)

Introduction

The aim of mapsf is to obtain thematic maps with the visual quality of those build with a classical mapping or GIS software.

Users of the package could belong to one of two categories: cartographers willing to use R or R users willing to create maps. Therefore, its functions have to be intuitive to cartographers and ensure compatibility with common R workflows.

mapsf uses sf objects to produce base graphics.

mapsf functions can be classified in the following categories :

Main Features

Symbology

The type column indicates the value to use for the type argument in mf_map(x, var, type). The data column displays the relevant data types for each map types. The cartography column indicates the corresponding function in cartography.

| map type | type | data | polygon | point | line | cartography | |---------|---------|---------|---------|---------|---------|---------| | Base Map | "base" | geometry | | | | - | | Proportional Symbols | "prop" | stock | | | | propSymbolsLayer() | | Typology | "typo" | category | | | | typoLayer() | | Choropleth | "choro" | ratio | | | | choroLayer() | | Graduated Symbols | "grad" | stock | | | | - | | Symbols | "symb" | category | | | | - | | Proportional Symbols + Typo | "prop_typo" | stock & category | | | | propSymbolsTypoLayer() | | Proportional Symbols + Choro | "prop_choro" | stock & ratio | | | | propSymbolsChoroLayer() | | Symbols + Choro | "symb_choro" | category & ratio | | | | - |

Map Layout

| | |:------------------------------:| | {width="4in"} |

| name | cartography | |-------------------|----------------------| | mf_title() | - / layoutLayer() | | mf_arrow() | north() | | mf_credits() | - / layoutLayer() | | mf_scale() | barscale() | | mf_layout() | layoutLayer() | | mf_annotation() | - | | mf_label() | labelLayer() |

Themes

mf_theme() defines a map theme. It sets the margins of the figure, a background color, a foreground color and some parameters of the title. A set of theme is included in the package and it is possible to create custom ones.

| | | | |:----------------------:|:-----------------------:|:----------------------:| | {width="2in"} | {width="2in"} | {width="2in"} | | {width="192"} | {width="192"} | {width="192"} | | {width="192"} | {width="192"} | {width="192"} | | {width="192"} | {width="192"} | |

Export

The mf_export() function exports maps in raster (.png) or vector formats (.svg). The size of the exported map will fit the height/width ratio of a spatial object.

Datasets

Several datasets are embedded in the package:

Examples of thematic maps

Base map

mf_theme() allows to apply a theme to the map.

mf_shadow() plots the shadow of a polygon layer.

mf_map(x, type = "base") displays sf objects geometries.

mf_layout() add a complete layout to the map (title, credits, north arrow, scale bar). Each layout elements can also be set separately (with mf_title(), mf_credits(), mf_arrow() and mf_scale()).

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# set a theme
mf_theme("iceberg")
# plot a shadow
mf_shadow(mtq)
# plot municipalities
mf_map(mtq, type = "base", add = TRUE)
# layout
mf_layout(
  title = "Martinique",
  credits = paste0(
    "Sources: IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  )
)

Proportional Symbols

mf_map(x, var, type = "prop") displays symbols with areas proportional to a quantitative variable (stocks). The inches argument is used to customize the symbols sizes.

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# set a theme
mf_theme("darkula")
# plot a shadow
mf_shadow(mtq)
# plot municipalities
mf_map(mtq, add = TRUE)
# plot population
mf_map(
  x = mtq,
  var = "POP",
  type = "prop",
  inches = 0.25,
  col = "brown4",
  leg_pos = "topright",
  leg_adj = c(0, -2),
  leg_title = "Total population"
)
# layout
mf_layout(
  title = "Population Distribution in Martinique",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  )
)

Choropleth Map

In choropleth maps, areas are shaded according to the variation of a quantitative variable. They are used to represent ratios or indices.\ mf_map(x, var, type = "choro") displays choropleth maps . Arguments nbreaks, and breaks allow to customize the variable classification. mf_get_breaks() allows to classify data outside of the function itself. Colors palettes, defined with pal, can be created with mf_get_pal() or you can use palette names from hcl.pals().

Use mf_theme() to set a theme without plotting anything.

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# population density (inhab./km2) using sf::st_area()
mtq$POPDENS <- 1e6 * mtq$POP / sf::st_area(mtq)
# set a theme
mf_theme("green")
# plot population density
mf_map(
  x = mtq,
  var = "POPDENS",
  type = "choro",
  breaks = "geom",
  nbreaks = 5,
  pal = "Greens",
  border = "white",
  lwd = 0.5,
  leg_pos = "topright",
  leg_title = "Population Density\n(people per km2)"
)
# layout
mf_layout(
  title = "Population Distribution in Martinique",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  )
)

Typology Map

mf_map(x, var, type = "typo") displays a typology map of a qualitative variable. val_order is used to set the modalities order in the legend.

mf_label() displays labels on the map.

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# set theme
mf_theme("dark")
# plot administrative status
mf_map(
  x = mtq,
  var = "STATUS",
  type = "typo",
  pal = c("aquamarine4", "yellow3", "wheat"),
  lwd = .5,
  val_order = c(
    "Prefecture",
    "Sub-prefecture",
    "Simple municipality"
  ),
  leg_pos = "topright",
  leg_adj = c(0, 1),
  leg_title = ""
)
# labels for a few  municipalities
mf_label(
  x = mtq[mtq$STATUS != "Simple municipality", ], var = "LIBGEO",
  cex = 0.9, halo = TRUE, r = 0.15
)
# layout
mf_layout(
  title = "Administrative Status",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  )
)

Proportional Symbols using Choropleth Coloration

mf_map(x, var, type = "prop_choro") creates a map of symbols that are proportional to values of a first variable and colored to reflect the classification of a second variable.

expandBB argument in mf_map() allows to expand the map space. Here, we increase the space available on the right of the map to avoid overlaps between the legends and the map.

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# set theme
mf_theme("candy")
# Plot the municipalities and expand the map space on the right
mf_map(x = mtq, expandBB = c(0, 0, 0, .15))
# Plot symbols with choropleth coloration
mf_map(
  x = mtq,
  var = c("POP", "MED"),
  type = "prop_choro",
  border = "grey50",
  lwd = 1,
  leg_pos = c("topright"),
  leg_title = c("Population", "Median Income\n(in euros)"),
  breaks = "equal",
  nbreaks = 4,
  pal = "Greens",
  leg_val_rnd = c(0, -2),
  leg_frame = TRUE
)
# layout
mf_layout(
  title = "Population & Wealth in Martinique, 2015",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  ),
  frame = TRUE
)

Proportional Symbols using Typology Coloration

mf_map(x, var, type = "prop_typo") creates a map of symbols that are proportional to values of a first variable and colored to reflect the modalities of a second qualitative variable.

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# set theme
mf_theme("ink")
# plot the municipalities and expand the map space on the right
mf_map(x = mtq, expandBB = c(0, 0, 0, .15))
# plot symbols with choropleth coloration
mf_map(
  x = mtq,
  var = c("POP", "STATUS"),
  type = "prop_typo",
  symbol = "square",
  border = "white",
  lwd = .5,
  leg_pos = "topright",
  leg_title = c("Population", "Administrative\nStatus"),
  val_order = c(
    "Prefecture", "Sub-prefecture",
    "Simple municipality"
  )
)
# layout
mf_layout(
  title = "Population Distribution in Martinique",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  )
)

Label Map

mf_label() is dedicated to the display of labels on a map. The overlap = FALSE argument displays non overlapping labels.

In this example we have built a custom theme with mf_theme().

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# set theme
my_theme <- list(
  name = "mytheme",
  bg = "lightblue1",
  fg = "darkseagreen4",
  mar = c(0, 0, 0, 0),
  tab = TRUE,
  pos = "left",
  inner = TRUE,
  line = 1,
  cex = .9,
  font = 3
)
mf_theme(my_theme)
# plot municipalities
mf_map(mtq, col = "#e4e9de", border = "darkseagreen4")
# plot labels
mf_label(
  x = mtq,
  var = "LIBGEO",
  col = "black",
  cex = 0.7,
  font = 4,
  halo = TRUE,
  bg = "white",
  r = 0.1,
  overlap = FALSE,
  lines = FALSE
)
# layout
mf_layout(
  title = "Municipalities of Martinique",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  ),
  arrow = FALSE
)
# north arrow
mf_arrow(pos = "topright")

Links Map

mf_get_links() creates a link layer from an sf object and a link data.frame (long format).

mf_map(x, var, type = "grad") displays graduated links.

library(mapsf)
# import the sample data set
mtq <- mf_get_mtq()
# import the csv file embedded in mapsf
mob <- read.csv(system.file("csv/mob.csv", package = "mapsf"))
# Select links from Fort-de-France (97209))
mob_97209 <- mob[mob$i == 97209, ]
# create an sf object of links
mob_links <- mf_get_links(x = mtq, df = mob_97209)
# set theme
mf_theme("jsk")
# Plot the municipalities
mf_map(mtq)
# plot graduated links
mf_map(
  x = mob_links,
  var = "fij",
  type = "grad",
  breaks = c(100, 500, 1000, 4679.0),
  lwd = c(1, 4, 8),
  leg_pos = "topright",
  leg_title = "Nb. of\nCommuters",
  col = "red4",
  leg_frame = TRUE
)
# map layout
mf_layout(
  title = "Commuting to Fort-de-France",
  credits = paste0(
    "Sources: Insee and IGN, 2018\n",
    "mapsf ",
    packageVersion("mapsf")
  ),
  arrow = FALSE
)
mf_theme("default")


Try the mapsf package in your browser

Any scripts or data that you put into this service are public.

mapsf documentation built on Nov. 21, 2023, 5:09 p.m.