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 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