Mapping Flows in R
Last year I published the above graphic, which then got converted into the below for the book London: The Information Capital. I have had many requests for the code I used to create the plot so here it is!
The data shown is the Office for National Statistics flow data. See here for the latest version. The file I used for the above can be downloaded here (it is >109 mb uncompressed so you need a decent computer to load/plot it all at once in R). You will also need this file of area (MSOA) codes and their co-ordinates. The code used is pasted below with comments above each segment. Good luck!
Load the flow data required – origin and destination points are needed. See above for where you can get the table used here.
input<-read.table("wu03ew_v1.csv", sep=",", header=T)
We only need the first 3 columns of the above
The UK Census file above didn’t have coordinates just area codes. Here is a lookup that provides those. See above for download.
Lots of joining to get the xy coordinates joined to the origin and then the destination points.
or.xy names(or.xy) dest.xy names(dest.xy)
Now for plotting with ggplot2.This first step removes the axes in the resulting plot.
xquiet yquiet<-scale_y_continuous("", breaks=NULL)
Let’s build the plot. First we specify the dataframe we need, with a filter excluding flows of <10
ggplot(dest.xy[which(dest.xy$trips>10),], aes(oX, oY))+
The next line tells ggplot that we wish to plot line segments. The “alpha=” is line transparency and used below
geom_segment(aes(x=oX, y=oY,xend=dX, yend=dY, alpha=trips), col="white")+
Here is the magic bit that sets line transparency – essential to make the plot readable
scale_alpha_continuous(range = c(0.03, 0.3))+
Set black background, remove axes and fix aspect ratio
theme(panel.background = element_rect(fill='black',colour='black'))+quiet+coord_equal()
We used ggave() to export from R and then we imported the pdf into Illustrator to produce the final graphic for print…