Image credit: Andisheh Nouraee
Image credit: Andisheh Nouraee
Image credit: Andisheh Nouraee
Forthcoming textbook based on our UoM Crime Mapping module:
Optimal Manchester brewery crawl (see https://www.ncalvert.uk/posts/drunkensalesman/)
Image credit: XKCD
Image credit: Wikimedia commons)
Image credit: Flannery, JJ (1971) The relative effectiveness of some common graduated point symbols in the presentation of quantitative data
From Harris, R (2017) Hexograms: Better maps of area based data.
Scale by min value to balance invisibility and distortion
From Harris, R (2017) Hexograms: Better maps of area based data.
Scale by min value to balance invisibility and distortion
Eg if SIU is 0.02 inches on a 5inch map:
siu <- 0.02 # the smallest interpretable unitheight <- 5bb <- sp::bbox(map)width <- (bb[1,2] - bb[1,1]) / (bb[2,2] - bb[2,1]) * heightbbA <- (bb[1,2] - bb[1,1]) * (bb[2,2] - bb[2, 1])mapA <- rgeos::gArea(map)minA <- (siu * bbA) / (height * width)map$scaleby <- rgeos::gArea(map, byid = TRUE)map$scaleby[map$scaleby < minA] <- minA# Use this to scale cartogrambalcarto <- cartogram::cartogram(map, "scaleby", maxSizeError = 1.1, prepare = "none")
same idea as balanced carto, with minimum value being what allows each area to be represented as its own hexagon
hexagons are produced using the hexagonal binning function in R’s fMultivar package, based on the centroids of each polygon
same idea as balanced carto, with minimum value being what allows each area to be represented as its own hexagon
hexagons are produced using the hexagonal binning function in R’s fMultivar package, based on the centroids of each polygon
our example:
# Get the function neededscript <- RCurl::getURL("https://raw.githubusercontent.com/profrichharris/Rhexogram/master/functions.R")eval(parse(text = script))# Number of bins guided by the -binN- function for a visual plot.# 29 is also used by Harris in example.harris.29 <- hexogram(LAE.sp, 29)# Extract the hexogramsharris.29.hex.sp <- harris.29[[2]] # 2 is hexo
From Joseph Bailey
Calculates a grid that strives to preserve the original geography.
From Joseph Bailey
Calculates a grid that strives to preserve the original geography.
2 steps to using this
1 - Generate grid by varying the seed
2 - Efficiently calculate the assignments from the original geography to the new geography
From Joseph Bailey
Calculates a grid that strives to preserve the original geography.
2 steps to using this
1 - Generate grid by varying the seed
2 - Efficiently calculate the assignments from the original geography to the new geography
Our example:
# step 1 generate gridLAE.reg <- calculate_grid(shape = LAE.sp, grid_type = "regular", seed = 1) #1 was our fave seed# step 2 calculate assignmentsLAE.reg <- assign_polygons(LAE.sp, LAE.reg)
# step 1 generate gridLAE.hex <- calculate_grid(shape = LAE.sp, grid_type = "hexagonal", seed = 1)# step 2 calculate assignmentsLAE.hex <- assign_polygons(LAE.sp, LAE.hex)
Higher agreement = better representation of statement in map
Convenience sample (internet) of 768 respondents
New methods to visualise geographic information can convey a message more accurately than original thematic maps.
But choose the method with consideration to the research question and the data!
These slides: https://rekadata.net/talks/pydatamcr.html
Questions? Contact myself (@r_solymosi) or Sam (@sh_langton)
Image credit: Andisheh Nouraee
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |