By Data Tricks, 26 July 2018
This tutorial will guide you through the process of creating a unique population density map of the UK in R.
1 Download postcode data
In this tutorial we will use UK postcode data which is available for free from Ordnance Survey: https://www.ordnancesurvey.co.uk/opendatadownload/products.html#CODEPO
Once you’ve downloaded and unzipped the files (which will come as individual csv files for each top-level postcode), save them all in a single folder.
2 Read in postcode data
rm(list=ls()) setwd("C:/your-working-directory") library(maps) library(mapdata) library(maptools) library(rgdal) library(ggmap) library(ggplot2) library(rgeos) library(broom) library(plyr) #Get all filenames and read in the postcodes filenames <- dir("C:/your-working-directory") #get file names postcodes <- do.call(rbind,lapply(filenames,read.csv,header=FALSE)) #read in all files and bind postcodes <- postcodes[-which(postcodes$V3 == 0),] #remove lines where V3 is zero
The code above reads all the csv files that you saved in your working directory and merges them using the rbind function. The last line simply removes anomalies in the data where V3 is zero.
3 Create the map
Now we can use ggplot2 to create the map using geom_point. Essentially all we need to do is to plot a scatter plot of all the postcodes’ coordinates (V3 and V4 values) using semi-transparent markers (use alpha in geom_point).
gg <- ggplot() + geom_point(data=postcodes, aes(x=V3, y=V4), color="#ff9900", size=0.2, alpha=0.3) gg <- gg + coord_fixed(1) gg <- gg + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) gg <- gg + theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank()) gg <- gg + theme(axis.title.y=element_blank(), axis.text.y=element_blank(), axis.ticks.y=element_blank()) gg <- gg + theme(panel.background = element_rect(fill = 'black')) print(gg)
The final result is not a true population density map because the postcode data includes PO Boxes and there will be differences in the number of people dwelling in each postcode. But it does provide an interesting map resembling a night time satellite image.
Please note that your first comment on this site will be moderated, after which you will be able to comment freely.
You might also like
The hidden art in pi
A series of visualisations created using the ggplot2 package in R and the first million digits of pi.
Violin plot in ggplot2
Create violin plots in R with the ggplot2 package.
Creating Maps in R (2019)
Creating a heatmap of the UK in R
Leaflet maps in R
Create interactive location maps in R and embed onto websites or other applications.
Line chart with smoothed conditional mean
Create a smoothed conditional mean through a scatter plot, or a line of best fit using ggplot2 and geom_smooth.
Access more for free
Access more articles and code for free