TITLE: 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.

 [which I found here]:
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. 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.

 [shapefile version of White's 1983 Vegetation Map]:
http://omap.africanmarineatlas.org/BIOSPHERE/pages/3_terrestrial%20v
egetation.htm

 ![White's map of vegetation types in
Africa](https://johngodlee.xyz/img_full/white_veg_map/veg_map.png)

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