Skip to contents

`geom_world()` draws a styled global basemap using bundled country polygons, coastlines, and administrative boundary data. It automatically handles antimeridian splitting and CRS transformation, and supports optional country filtering for focused maps.

Usage

geom_world(
  crs = 4326,
  filter_attribute = "SOC",
  filter = NULL,
  show_ocean = TRUE,
  show_admin_boundaries = TRUE,
  show_frame = FALSE,
  ocean_fill = "#c7e8fb",
  frame_color = "black",
  frame_size = 0.2,
  frame_linetype = "solid",
  country_fill = "grey90",
  country_boundary_color = "transparent",
  country_boundary_size = 0.1,
  country_boundary_linetype = "solid",
  coastline_color = "#26ace7",
  coastline_size = 0.1,
  coastline_linetype = "solid",
  international_boundary_color = "grey20",
  international_boundary_size = 0.1,
  international_boundary_linetype = "solid",
  regional_boundary_color = "grey20",
  regional_boundary_size = 0.1,
  regional_boundary_linetype = "dashed",
  undefined_boundary_color = "grey20",
  undefined_boundary_size = 0.1,
  undefined_boundary_linetype = "longdash",
  military_boundary_color = "grey20",
  military_boundary_size = 0.05,
  military_boundary_linetype = "dotted",
  ...
)

Arguments

crs

Coordinate reference system for the basemap. Accepts a numeric EPSG code, a PROJ string, or an [sf::crs] object. The default is `4326` (WGS84).

filter_attribute

Name of the column in the `countries` dataset used for filtering. Default `"SOC"`.

filter

Character vector specifying which values of `filter_attribute` to retain. If `NULL` (default), no filtering is applied. When non-`NULL`, only the selected countries are drawn, and the ocean, coastlines, administrative boundaries, and frame are omitted.

show_ocean

Logical; draw an ocean background polygon. Default `TRUE`. Ignored when `filter` is not `NULL`.

show_admin_boundaries

Logical; draw administrative and political boundaries (international, regional, undefined/disputed, and military demarcation lines). Default `TRUE`. Ignored when `filter` is not `NULL`.

show_frame

Logical; draw an outer frame following the projected outline of the world. Default `FALSE`. Ignored when `filter` is not `NULL`.

ocean_fill

Fill color for the ocean polygon. Default `"#c7e8fb"`.

frame_color

Color of the outer frame line. Default `"grey20"`.

frame_size

Line width of the outer frame. Default `0.1`.

frame_linetype

Line type of the outer frame. Default `"solid"`.

country_fill

Fill color for country polygons. Default `"grey90"`.

country_boundary_color

Color of country boundary outlines. Default `"transparent"`.

country_boundary_size

Width of country boundary outlines. Default `0.1`.

country_boundary_linetype

Line type of country boundaries. Default `"solid"`.

coastline_color

Color of the coastline layer. Default `"#26ace7"`.

coastline_size

Line width of coastlines. Default `0.1`.

coastline_linetype

Line type of coastlines. Default `"solid"`.

international_boundary_color

Color for international boundary lines. Default `"grey20"`.

international_boundary_size

Width for international boundaries. Default `0.1`.

international_boundary_linetype

Line type for international boundaries. Default `"solid"`.

regional_boundary_color

Color for regional boundaries (e.g. states). Default `"grey20"`.

regional_boundary_size

Width for regional boundaries. Default `0.1`.

regional_boundary_linetype

Line type for regional boundaries. Default `"dashed"`.

undefined_boundary_color

Color for undefined or disputed boundaries. Default `"grey20"`.

undefined_boundary_size

Width for undefined boundaries. Default `0.1`.

undefined_boundary_linetype

Line type for undefined boundaries. Default `"longdash"`.

military_boundary_color

Color for military demarcation lines. Default `"grey20"`.

military_boundary_size

Width for military demarcation lines. Default `0.05`.

military_boundary_linetype

Line type for military demarcation lines. Default `"dotted"`.

...

Additional arguments passed to [ggplot2::geom_sf()] for the country polygons layer.

Value

A list of [ggplot2] layers representing the world map (or a filtered subset), ready to be added to a ggplot.

Details

This function supersedes early development versions that required users to supply their own map data.

The current implementation:

- Always uses bundled world map data (countries, coastlines, boundaries). - Exposes dedicated arguments for ocean fill, coastlines, and administrative boundaries. - Builds a projection-aware global outline for the ocean/frame layer. For **geographic CRSs** (including those with a shifted central meridian, e.g., `+lon_0=150`), it creates a seamless rectangular bounding box directly in the target CRS to avoid topological splitting artifacts (vertical lines). For **projected CRSs** (e.g., Robinson, Mollweide), it computes the convex hull of the projected graticule.

Examples

library(ggplot2)

# 1. Simple World Map (WGS84)
ggplot() +
  geom_world() +
  theme_void()


# 2. Pacific-Centered View (Shifted LongLat)
crs_longlat_150 <- "+proj=longlat +datum=WGS84 +lon_0=150"
ggplot() +
  geom_world(crs = crs_longlat_150, show_frame = TRUE, show_ocean = FALSE) +
  theme_void()


# 3. Robinson Projection (Projected CRS)
crs_robin <- "+proj=robin +lon_0=0 +datum=WGS84"
ggplot() +
  geom_world(crs = crs_robin, show_frame = TRUE) +
  theme_void()


# 4. Without administrative boundaries
ggplot() +
  geom_world(show_admin_boundaries = FALSE) +
  theme_minimal()


# 5. Highlighting specific countries (China)
ggplot() +
  geom_world(country_fill = "grey95") +
  geom_world(
    filter_attribute = "SOC",
    filter = "CHN",
    country_fill = "red",
    country_boundary_color = "black"
  ) +
  theme_void()