Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
An alternative implementation of "Mapping Flows in R" (http://spatial.ly/2015/03/mapping-flows/) using `data.table` and `lattice`
### DATA SECTION
library(data.table)
## Read data with 'data.table::fread'
input <- fread("wu03ew_v1.csv", select = 1:3)
setnames(input, 1:3, new = c("origin", "destination","total"))
## Coordinates
centroids <- fread("msoa_popweightedcentroids.csv")
## 'Code' is the key to be used in the joins
setkey(centroids, Code)
## Key of centroids matches `origin` in `input`
origin <- centroids[input[,.(origin, total)]]
setnames(origin, c('East', 'North'), c('xstart', 'ystart'))
## Key of centroids matches `destination` in `input`
destination <- centroids[input[,.(destination)]]
setnames(destination, c('East', 'North'), c('xend', 'yend'))
## Bind both results
trajects <- cbind(origin, destination)
### GRAPHICS SECTION
library(lattice)
library(classInt)
## Background set to black
myTheme <- simpleTheme()
myTheme$background$col <- 'black'
## Palette and classes
nClasses <- 5
pal <- colorRampPalette(c('gray70', 'white'))(nClasses)
classes <- classIntervals(trajects[total > 10, total],
n = nClasses, style = 'quantile')
classes <- findCols(classes)
xyplot(North ~ East, data = centroids,
pch = '.', col = 'lightgray',
aspect = 'iso',
par.settings = myTheme,
panel = function(...){
## panel.xyplot displays the 'centroids'
panel.xyplot(...)
## panel.segments displays the lines using a `data.table`
## query.
trajects[total > 10,
panel.segments(xstart, ystart, xend, yend,
col = pal[classes],
alpha = 0.05, lwd = 0.3)
]
})
@lejarx

This comment has been minimized.

Copy link

lejarx commented Dec 20, 2015

Fast & beautifully reproduced. Thanks for rewriting this using data.table!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.