Mapping Local Authority Control

You can use the local_hex_map dataset and the council_seats() function that come with parlitools to map the seat makeup and control of different local authorities.

library(leaflet)
library(sf)
library(htmlwidgets)
library(dplyr)
library(parlitools)
library(cartogram)

local_hex_map <- parlitools::local_hex_map

council_data <- parlitools::council_seats()

party_colour <- parlitools::party_colour

council_data <- left_join(council_data, party_colour,
                          by = c("majority_party"="party_name")) #Join to current MP data

local_hex_map <- left_join(local_hex_map, council_data, by = "la_code") #Join colours to hexagon map

# Creating map labels
labels <- paste0(
  "<strong>", local_hex_map$la_name, "</strong>", "</br>",
  "Largest Party: ", local_hex_map$majority_party, "</br>",
  "Governing Coalition: ", local_hex_map$governing_coalition
) %>% lapply(htmltools::HTML)


# Creating the map itself
leaflet(options=leafletOptions(
  dragging = FALSE, zoomControl = FALSE, tap = FALSE,
  minZoom = 6, maxZoom = 6, maxBounds = list(list(2.5,-7.75),list(58.25,50.0)),
  attributionControl = FALSE),
  local_hex_map) %>%
  addPolygons(
    color = "grey",
    weight=0.75,
    opacity = 0.5,
    fillOpacity = 1,
    fillColor = ~party_colour,
    label=labels) %>%
 htmlwidgets::onRender(
    "function(x, y) {
        var myMap = this;
        myMap._container.style['background'] = '#fff';
    }")%>%
  mapOptions(zoomToLimits = "first")