diff --git a/rMappingExample.Rmd b/rMappingExample.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..e1b9e7d163982a4ab63ad785f67b564e7cfa235f
--- /dev/null
+++ b/rMappingExample.Rmd
@@ -0,0 +1,210 @@
+---
+title: "Maps in R"
+subtitle: "A very simple introduction"
+author: "Ben Anderson & Tom Rushby (ECCD)"
+date: 'Last run at: `r Sys.time()`'
+output:
+  bookdown::html_document2:
+    fig_caption: yes
+    code_folding: hide
+    number_sections: yes
+    toc: yes
+    toc_depth: 4
+    toc_float: TRUE
+  bookdown::pdf_document2:
+    toc: yes
+    fig_caption: yes
+    number_sections: yes
+  bookdown::word_document2:
+    fig_caption: yes
+    number_sections: yes
+    toc: yes
+    toc_depth: 4
+    fig_width: 5
+always_allow_html: yes
+---
+
+```{r setup, include=FALSE}
+
+# you might need to install these first
+# install.packages("sf")
+# install.packages("raster")
+# install.packages("spData")
+# remotes::install_github("Nowosad/spDataLarge")
+
+library(sf)          # classes and functions for vector data
+library(raster)      # classes and functions for raster data
+library(spData)        # load geographic data
+library(spDataLarge)   # load larger geographic data
+
+```
+
+# R Markdown
+
+This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
+
+When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunks
+
+We like R Markdown. In this file we step through some very simple mapping functions in R/Rmd.
+
+# Geo-comp
+
+Doing maps and stuff in R.
+
+We use https://geocompr.robinlovelace.net/ a lot...
+
+# Explore 'World' maps
+
+First try using the `sf` [package](https://cran.r-project.org/web/packages/sf/index.html)'s built-in `world` data to make a simple map plot.
+
+It's worth remembering that a map is just a plot with spatial arrangements...
+
+```{r world_maps}
+head(world)
+# plot variables 3 to 6
+plot(world[3:6])
+# plot world population
+plot(world["pop"])
+```
+
+Now re-draw the population map using `ggplot2` and the `geom_sf` geometry... This will make a much [prettier map](https://www.johan-rosa.com/2019/11/13/creating-maps-with-sf-and-ggplot2/) because `ggplot2` is so cool.
+
+```{r world_maps_ggplot}
+# using ggplot
+library(ggplot2)
+ggplot2::ggplot(world) + 
+  geom_sf(aes(fill = pop/1000000)) +
+  scale_fill_continuous(name="Population (millions)",
+                        low = "green",
+                        high = "red")
+
+```
+
+That looks better...well, if we sorted out the colours and the visual dominance of 2 countries...
+
+# Local Authorities
+
+## Loading data
+
+Now we're going to load some polygon boundary data (you need internet access for this) and some energy demand data so we can link them and map them.
+
+```{r loadLAElecData}
+library(readr)
+
+# electricity consumption data at LA level
+la_elecData <- readr::read_csv("https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/946424/Subnational_electricity_consumption_statistics_2019.csv")
+```
+
+This is electricity consumption data for 2019 for English Local Authorities. What variables have we got?
+
+```{r elecLAVars}
+head(la_elecData)
+```
+
+Now load the boundary data - we will use Local Authority boundaries for the Solent region only to keep things small & easy to play with.
+
+```{r loadLABoundaries}
+# las_to_load <- c("Southampton","Portsmouth","Winchester",
+#                  "Eastleigh","Isle of Wight","Fareham",
+#                  "Gosport","Test Valley","East Hampshire",
+#                  "Havant","New Forest","Hart","Basingstoke and Deane")
+
+# we pre-saved this data in the data folder of the repo for speed
+# see getBoundaryData.R for how it works
+
+inf <- here::here("data", "boundaries", "la_solent.shp") # use here to specify the data location
+message("Loading LA geometry from ONS Open Geography API")
+
+la_sf_data <- sf::read_sf(inf)
+
+
+head(la_sf_data)
+```
+
+Which areas have we got?
+
+```{r boundaryLAAreas}
+table(la_sf_data$lad18nm)
+```
+
+## Mapping data
+
+Now we'll map/plot some of the data using the `ggplot2` approach. To do that we need to merge the boundaries and the energy data so that we can `fill` the boundaries with a colour according to one of the variables.
+
+```{r plotLAElec}
+# create a variable with the LA code and the same name as in the sf_data
+la_elecData$lad18cd <- la_elecData$`LA Code`
+# merge them
+la_merged_sf <- merge(la_sf_data, la_elecData)
+
+# plot
+ggplot2::ggplot(la_merged_sf) + 
+  geom_sf(aes(fill = Total_GWh)) +
+  scale_fill_continuous(name = "Total GWh", low = "green", high = "red")
+
+```
+
+# MSOAs
+These are census areas - smaller than LSOAs so the files are bigger and the maps are denser.
+
+## Loading data
+
+As before we're going to load some polygon boundary data (you need internet access for this) and some energy demand data so we can link them and map them.
+
+```{r loadElecMSOAData}
+# electricity consumption data at MSOA level (pre downloaded)
+inFile <- here::here("data", "energy", "MSOA_Dom_Elec", "MSOA_DOM_ELEC_2019.csv")
+msoa_elecData <- readr::read_csv(inFile)
+```
+
+This is electricity consumption data for 2019 for English Local Authorities. What variables have we got?
+
+```{r elecMSOAVars}
+head(msoa_elecData)
+```
+Clearly we are going to need to filter out the ones we don;t want...
+
+Now load the MSOA boundary data for the Solent region only to keep things small & easy to play with.
+
+We pre-downloaded these.
+
+```{r loadMSOABoundaries}
+# las_to_load <- c("Southampton","Portsmouth","Winchester",
+#                  "Eastleigh","Isle of Wight","Fareham",
+#                  "Gosport","Test Valley","East Hampshire",
+#                  "Havant","New Forest","Hart","Basingstoke and Deane")
+
+# we pre-saved this data in the data folder of the repo for speed
+# see getBoundaryData.R for how it works
+
+inf <- here::here("data", "boundaries", "msoa_solent.shp") # use here to specify the data location
+message("Loading MSOA geometry from ONS Open Geography API")
+msoa_sf_data <- sf::read_sf(inf)
+
+head(msoa_sf_data)
+```
+
+Which areas have we got and how many MSOAs are there in each?
+
+```{r boundaryMSOAAreas}
+table(msoa_sf_data$LAD11NM)
+```
+
+## Mapping data
+
+Now we'll map/plot some of the data using the `ggplot2` approach. To do that we need to merge the boundaries and the energy data so that we can `fill` the boundaries with a colour according to one of the variables.
+
+```{r plotMSOAElec}
+# create a variable with the LA code and the same name as in the sf_data
+msoa_elecData$MSOA11CD <- msoa_elecData$`Middle Layer Super Output Area (MSOA) Code`
+# merge them
+msoa_merged_sf <- merge(msoa_sf_data, msoa_elecData)
+
+# plot
+ggplot2::ggplot(msoa_merged_sf) + 
+  geom_sf(aes(fill = `Consumption (kWh)`/1000000)) +
+  scale_fill_continuous(name = "Total GWh", low = "green", high = "red")
+
+```
+
+# References