Etiquetas
Some days ago James Cheshire published the post Mapping Flows in R. I have implemented an alternative (faster) version using data.table to read and join the datasets (and lattice to display the results). If you are new to data.table you should read this wiki and this cheatsheet.
This is the code:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### 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) | |
] | |
}) |
This is the result:
Pingback: Mapping Flows with R | Cartographier les flux (...
Matt Dowle (@MattDowle) dijo:
Nice. I’ve added to the list of articles about data.table: https://github.com/Rdatatable/data.table/wiki/Articles
Oscar Perpiñán Lamigueiro dijo:
Good.
Thanks for your package.
Pingback: Mapping Flows in R ... with data.table and latt...
Paco dijo:
Gracias Oscar, no conocía tu blog, ya está guardado en favoritos, estaré atento a las nuevas entradas 😉
Un saludo!
Pingback: Distilled News | Data Analytics & R