🎯 Objectives

In this tutorial, you will learn to

🔧 Preparation

Note: you should do Preparation before the tutorial.

  1. Installing relevant R-package
install.packages(c("sf", "spData", "terra"))
  1. Get the distribution of preferences by candidate by division for the 2022 Australian Federal Election

You can download this data here:
* Go to https://results.aec.gov.au * 2022 federal election * Downloads * Distribution of preferences by candidate by division

Or directly via the url here: https://results.aec.gov.au/27966/Website/Downloads/HouseDopByDivisionDownload-27966.csv

  1. Getting the electoral district geographical boundaries
  2. Look up the colours of the current political parties
  1. Run the following code if you use Mac:
# for speeding up geom_sf
if (!identical(getOption("bitmapType"), "cairo") && isTRUE(capabilities()[["cairo"]])) {
  options(bitmapType = "cairo")
}

🤺 Exercise 5A

Download, combine and wrangle the election data so it is ready for mapping!. We will need this for exercise part 5B.

  1. Load the packages you need
library(tidyverse)
library(sf)
  1. Import the election data
    Note here we show you an example how you can directly download the data from a url instead of saving the data and reading it from a .csv
url = "https://results.aec.gov.au/27966/Website/Downloads/HouseDopByDivisionDownload-27966.csv"

election_data <- read_csv(url,
  skip = 1
) 

Use the help menu ?read_csv or ask your tutor why we need to set skip=1.

  1. Wrangle your data so we only keep the winners from the election. We will also use string manipulation to change the division names be in capital letters.
election_data = election_data |>
  # Select winning candidate only
  filter(CalculationType == "Preference Count" &
    Elected == "Y" &
    CountNumber == 0) |>
  # make division name upper case so
  # it can be joined later with map data
  mutate(DivisionNm = toupper(DivisionNm))

Again look a the help menu to see examples of how ?toupper works.

  1. Read the map data using the code below. Note we do not use read_csv here. We need to use read_sf as this is a map.
data_path = "data/vic-july-2021-esri/E_VIC21_region.shp" 
vic_election_map <- read_sf(here::here(data_path)) %>%
  # to match up with election data
  mutate(DivisionNm = toupper(Elect_div))
  1. Combine the election data with the election boundaries.
vic_election_map = vic_election_map |>
  left_join(election_data, by = "DivisionNm")

You can refresh how to combine to data sets together by reviewing the tidyverse cheat sheet.

  1. Determine an appropriate colour for the political parties. We will need these to colour code our map.

How many and which political parties do we need colours for?

election_data |> 
  filter(StateAb == "VIC") |> 
  select(PartyAb) |> 
  distinct(PartyAb)
## # A tibble: 5 × 1
##   PartyAb
##   <chr>  
## 1 LP     
## 2 ALP    
## 3 NP     
## 4 IND    
## 5 GVIC

Using the parliamentary handbook, we can match the political party with their associated colour.

party_colors <- c(
  "ALP" = "#DE3533",
  "GVIC" = "#10C25B",
  "IND" = "#000000",
  "LP" = "#0047AB",
  "NP" = "#FFFF00"
)

You can change these if you’d like to. Many of the inner city independents used the teal colour.

🤺 Exercise 5B

Draw a map of Victoria and colour the electorate districts with the political party that won that district in the 2022 federal election.

  1. Draw a map that looks like below.

To do this we need to use mapping functions that work with ggplot2.

Hint 1
vic_election_map |>
  ggplot() +
  geom_sf(aes(geometry = ???, fill = ???), color = "black") 
Hint 2
vic_election_map |>
  ggplot() +
  geom_sf(aes(geometry = geometry, fill = PartyAb), color = "black") + 
  coord_sf(xlim = c(???, ???), ylim = c(???, ???)) +
Solution
vic_election_map |>
  ggplot() +
  geom_sf(aes(geometry = geometry, fill = PartyAb),
    color = "white"
  ) +
  coord_sf(xlim = c(144.8, 145.2), ylim = c(-38.1, -37.6)) +
  scale_fill_manual(values = party_colors) +
  ggtitle("Winners of Australian Federal Election in 2019",
    subtitle = "Victoria"
  )


  1. Modify the map drawn in a. so that the legend only shows the parties shown in the visualisation.

You may find the function st_crop useful here.

Hint 3
vic_election_map |>
    st_crop(xmin = ???, xmax = ???,
          ymin = ???, ymax = ???)
  1. Finally add the text labels of the name of the electoral division for Melbourne, Menzies and Macnamara, like below.

The function geom_sf_label can be used to add labels to a map.

Hint 4
vic_map_subset = vic_election_map %>% 
      filter(Elect_div %in% c("Melbourne", "Menzies", "Macnamara"))
             
vic_election_map |>
  ggplot() +
  geom_sf(aes(geometry = geometry), color = "black") + 
  geom_sf_label(data = vic_map_subset, aes(label = ???, geometry = ???))

🗺 Exercise 5C

Learn to modify the map projection The world is not flat. Let’s learn how to deal with that in the mapping world.

Load the world map data contained in spData.

data(world, package = "spData")
  1. Plot the map data world using ggplot2.

  1. Mollweide projection is a map projection that preserves area relationships. Apply this projection by settingcrs = "+proj=moll" in the st_transform function and visualise the result.

  1. Modify the projection so that it transforms the coordinates to the Lambert azimuthal equal-area projection with Australia in the center (25.27°S, 133.78°E).

Stuck on where to start:
## Look at the last example in the help 
?geom_sf

Material originally developed by Dr. Emi Tanaka and maintained by Dr. Kate Saunders