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%20vegetation.htm {IMAGE} 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] [I also wrote a tutorial for the Coding Club group I’m involved with on using R as a GIS]: https://ourcodingclub.github.io/2016/12/11/maps_tutorial.html