A series of paleogeography maps

Motivation

Two years ago, I wrote a post about plotting maps in R. Recently, I wanted to understand more about the paleogeography evolution (e.g., Pohl et al. 2022 Nature) and its corresponding geological time, so I explored the available resources on the Internet.

Data

AFAIK, there are two main sources of paleogeography data: PALEOMAP by Christopher Scotese and GPlates by EarthByte group. The PBDB database possibly also contains some portals to explore this, but it is essentially a fossil database.

There are also different types of paleogeography data: coastlines, polygons, digital elevation model (DEM), tectonic plates etc.

Softwares and packages

Then, there are many packages in R/Python to access these data (mostly the GWS service of Gplates). Ben Moon has written some posts on this, check it here. Below is a list of softwares/packages I reviewed:

SoftwareDescriptionURL
GplatesA standalone plate reconstruction software (No programming)https://www.gplates.org/
pyGplatesA python interface to Gplateshttps://www.gplates.org/docs/pygplates/
gplatelyA high-level interface to pyGPlateshttps://github.com/GPlates/gplately
rgplatesGplates R APIhttps://github.com/adamkocsis/rgplates
paleoMapA R package, not “the PLAEOMAP”https://github.com/sonjaleo/paleoMap
gplatesrAnother R package using Gplates APIhttps://github.com/LunaSare/gplatesr
mapastAnother R package using Gplates APIhttps://github.com/macroecology/mapast
velociraptrR package using macrostrat APIhttps://github.com/LunaSare/gplatesr
chronosphereA R package collecting lots of data in Zenodo beyond paleogeographyhttps://github.com/chronosphere-info/r_client
viaA dataset (paleocoastlines) is provided to describe coastlines of 0, 10, 20 Mahttps://cran.r-project.org/web/packages/via/index.html

What if someone just wants to use a fancy map for demonstration? I think it is easist to use the exisitng PALEOMAP Atlas. Download the data and use the pictures directly (or put into Gplates for a different projection and export in different format), here is an example of the modern global map.

Modern State
Modern State

Plotting the paleogeography evolution in the whole Phanerozoic

Making a pretty paleogeography map from scratch requires a bunch of data (and proper tool and knowledge). I have tried several ways but still can’t reproduce a full-feature map as the PaleoAtlas because of lacking data. For instance, in Gplately, many features in Scotese2016 are missing (only has static polygons, coastlines, and rotation file). Nevertheless, below is some codes for plotting paleocontinent/paleoDEM.

Tectonic plates

Here I use velociraptr to reconstruct the Pohl2022 like map series, it starts from 540 Ma and ends in the present with a time gap of 20 Myr. This package downloads paleocontinents from Macrostrat.org as a shapefile.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
library(velociraptr)

age_to_plot <- seq(0, 540, 20)

## download data and save into a list
paleo_data <- lapply(age_to_plot, downloadPaleogeography)

## add age to each data
paleo_data <- lapply(1:length(paleo_data), function(x) {
  paleo_data[[x]]$age <- paste(age_to_plot[x], "Ma")
  return(paleo_data[[x]])
})

## combine all data into one data frame
paleo_data <- do.call(rbind, paleo_data)
paleo_data$age <- forcats::fct_reorder(paleo_data$age,
                                       readr::parse_number(paleo_data$age))

## plot in Robin projection
library(ggplot2)
p <- ggplot(paleo_data)+
  geom_sf(aes(fill=plate_id))+
  coord_sf(crs = "+proj=robin")+
  facet_wrap(~age, ncol=5) +
  theme_minimal()+
  theme(panel.grid = element_line(color = "black", linewidth = .2),
        strip.text = element_text(size=12, face="bold"),
        legend.position = "none")

p + scale_fill_viridis_c() + theme(legend.position='none')

/2023-12-30-a-series-of-paleogeography-maps/images/example.png

Topography (PaleoDEM)

Here I plot the topography using PaleoDEM data. Note there’re many data formats and here I use .csv.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
library(data.table)
library(stringr)
library(marmap)

## list all files
## data is downloaded from https://zenodo.org/records/5460860
## NetCDF is also available
folder <- "~/Downloads/PaleoDEMS_long_lat_elev_csv_v2/PaleoDEMS_long_lat_elev_csv_v2.csv/"
data_files <- list.files(folder, full.names = T)[seq(1, 88, 4)]

## read in data and add age column
paleo_dem <- lapply(data_files, fread)

## add age info
paleo_dem <- lapply(1:length(paleo_dem), function(x) {
  filename <- list.files(folder, full.names = F)[seq(1, 88, 4)][x]
  ## parse age from filename
  age <- str_extract(filename, "\\d+Ma")
  paleo_dem[[x]]$age <- age
  return(paleo_dem[[x]])
})
paleo_dem<- do.call(rbind,paleo_dem)

p <- ggplot(paleo_dem) +
  geom_raster(aes(x = `# lon`, y = lat, fill = elev))+
  coord_fixed()+
  facet_wrap(~age)

p + scale_fill_etopo()+theme_minimal()+
  theme(panel.grid = element_blank(),
        legend.position='none')+
  labs(x='',y='')

/2023-12-30-a-series-of-paleogeography-maps/images/dem.png

References

Pohl, Alexandre, et al. “Continental configuration controls ocean oxygenation during the Phanerozoic.” Nature 608.7923 (2022): 523-527.

Cermeño, Pedro, et al. “Post-extinction recovery of the Phanerozoic oceans and biodiversity hotspots.” Nature 607.7919 (2022): 507-511.

0%