I’ve been getting interested in plotting electoral data onto maps — and as a result have been looking at how combinations of information might explain the results of the 2019 election.
To do so, i have been plotting the booth-by-booth results onto a map, as well as data from other information sources. This was tricky initially, but once you get the knack it makes a lot of sense (in that Hadley Wickham way).
The key is moving the data = XYZ bit from inside the leaflet() function to the first argument of the addCircleMarkers() function.
The other trick to note below is that I set the bins for the colorBin function manually. This is necessary, as the mid point of the range is not zero.
Building on my earlier single-layer maps example, in this case we have the location of mines and the two-party-preferred election 2019 results by polling booth.
# packages | |
require(data.table) | |
require(leaflet) | |
require(readxl) | |
twoppReps <- as.data.table(read.csv("https://tallyroom.aec.gov.au/Downloads/HouseTppByPollingPlaceDownload-24310.csv", skip = 1L)) | |
pollingPlaces <- as.data.table(read.csv("https://tallyroom.aec.gov.au/Downloads/GeneralPollingPlacesDownload-24310.csv", skip = 1)) | |
operatingMines <- as.data.table(read_excel("C:/Users/mcoog/Dropbox/blogs/operating_mines.xls")) | |
# inner join to add lat and longtitude data | |
twoppReps[pollingPlaces[, list(PollingPlaceID, Latitude, Longitude)], | |
`:=` (lat = i.Latitude, long = i.Longitude), | |
on = 'PollingPlaceID'] | |
# part 1 bin the data so that 0 = neutral, -100 = red and +100 = blue | |
swing_bins <- c(–100, –25, –10, –5, –2, –1, 0, 1, 2, 5, 10, 25, 100) | |
swing_pal <- colorBin(c("#f00505", "#fafafa", "#0520f0"), | |
bins = swing_bins) | |
ausMines_booths <- leaflet() %>% | |
addTiles() %>% | |
addCircleMarkers(data = twoppReps, | |
lat = ~lat, lng = ~long, popup = ~PollingPlace, | |
col = ~swing_pal(Swing), | |
stroke = FALSE, fillOpacity = 0.3, opacity = 0.3) %>% | |
addCircleMarkers(data = operatingMines, | |
lat = ~Latitude, lng = ~Longitude, popup = ~Name, | |
color = 'black', radius = 7, stroke = FALSE, | |
opacity = 0.50, fillOpacity = 0.50) | |
print(ausMines_booths) |