-- Leo's gemini proxy

-- Connecting to republic.circumlunar.space:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Mapping The Vegetation and Climate of Africa in R


DATE: 2017-09-05

AUTHOR: John L. Godlee



As I'll soon be embarking on my PhD research into biodiversity and woodland productivity in Southern Africa, I thought I should get a better idea of how the vegatation differs across the continent.


I normally try to use R instead of point and click GIS packages like ArcMap or QGIS, so all the code here is to be used in an R session.


The packages I used are:


library(maps)
library(rgdal)
library(ggplot2)
library(ggmap)

First I needed a base map of Africa, ideally with countries on, which I found here[1].


1: http://maplibrary.org/library/stacks/Africa/index.htm


# Import shapefile of country borders ----
countries <- readOGR(dsn="africa",
                     layer="Africa")
countries@data

countries_fort <- fortify(countries, region = "COUNTRY")

# Plot country borders ----
ggplot() +
    geom_polygon(aes(x = long, y = lat, group = group, fill = NA),
    						 colour = "black",
    						 data = countries_fort) +
    theme_classic()  +
    scale_fill_manual(values = palette_veg_type_19) +
    labs(fill = "Biome") +
    xlab("Longitude") +
    ylab("Latitude") +
    coord_map()

To investigate vegetation types I tracked down a shapefile version of White's 1983 Vegetation Map[2]. The map is the result of 15 years of work by UNESCO and AEFTET and was created by first compiling many existing maps, then cross-checking with extensive fieldwork and consultation with local experts.


2: http://omap.africanmarineatlas.org/BIOSPHERE/pages/3_terrestrial%20vegetation.htm


White's map of vegetation types in Africa


To create the map above I used the ggplot2 and rgdal packages:


# Read shapefile ----
white_veg <- readOGR(dsn="whitesveg",
                     layer="Whites vegetation")

# Explore shapefile
white_veg@data
white_veg@bbox
white_veg@proj4string

# Fortify shapefile for use in ggplot2 ----
white_veg_fort <- fortify(white_veg, region = "DESCRIPTIO")
names(white_veg_fort)
length(unique(white_veg_fort$id))

# Create colour palette for ggplot2 ----
palette_veg_type_19 <- c("#FF4A46","#008941","#006FA6","#A30059","#FFDBE5",
                         "#7A4900","#0000A6","#63FFAC","#B79762","#004D43",
                         "#8FB0FF","#997D87","#5A0007","#809693","#FEFFE6",
                         "#1B4400","#4FC601","#3B5DFF","#4A3B53")

# ggplot Africa with vegetation ----
ggplot() +
  geom_polygon(aes(x = long, y = lat, group = group, fill = id),
               data = white_veg_fort) +
  geom_polygon(aes(x = long, y = lat, group = group, fill = NA),
               colour = "black",
               data = countries_fort) +
  theme_classic()  +
  scale_fill_manual(values = palette_veg_type_19) +
  labs(fill = "Biome") +
  xlab("Longitude") +
  ylab("Latitude") +
  coord_map()

To look specifically at Southern Africa I had to use some trial and error to get the x and y limits right in the ggplot() call:


# ggplot Southern Africa ----
ggplot() +
  geom_polygon(aes(x = long, y = lat, group = group, fill = id),
               data = white_veg_fort) +
  geom_polygon(aes(x = long, y = lat, group = group, fill = NA),
               colour = "black",
               data = countries_fort) +
  theme_classic()  +
  scale_fill_manual(values = palette_veg_type_19) +
  labs(fill = "Biome") +
  xlab("Longitude") +
  ylab("Latitude") +
  coord_map(xlim = c(10, 40), ylim = c(-35, -10))

The steps once again for anyone interested in a mapping workflow in R:


1. Import shapefile with readOGR()

2. Explore shapefile

3. "Fortify" shapefile for use in ggplot()

4. Plot using ggplot()


I also wrote a tutorial for the Coding Club group I'm involved with on using R as a GIS

-- Response ended

-- Page fetched on Fri May 24 14:01:18 2024