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 found:

SoftwareDescriptionURL
GplatesA standalone plate reconstruction softwarehttps://www.gplates.org/
gplatelyOfficial Gplates Python APIhttps://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, here is an example of the Cretaceous-Paleogene Boundry (66 Ma):

/2023-12-30-a-series-of-paleogeography-maps/images/paleomap_066.jpg

Phanerozoic paleogeography evolution

Tectonic plates

Next 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. The code is as follows:

 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

Then I also 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
library(data.table)
library(stringr)
library(marmap)

## list all files
## data is downloaded from https://zenodo.org/records/5460860
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%