💾 Archived View for republic.circumlunar.space › users › johngodlee › posts › 2017-09-05-whites-veg-… captured on 2021-12-04 at 18:04:22. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
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