in-class_ex03: Analytical Mapping

Published

January 25, 2023

Getting Started

Installing and loading packages

pacman::p_load(tmap, tidyverse, sf)

Importing data

NGA_wp <- read_rds("data/rds/NGA_wp.rds")

Basic Choropleth Mapping

Visualising distribution of non-functional water point

p1 <- tm_shape(NGA_wp) +
  tm_fill("wp_functional",
          n=10,
          style="equal",
          palette="Blues") +
  tm_borders(lwd = 0.1,
             alpha = 1) +
  tm_layout(main.title = "Distribution of functional water point by LGAs",
            legend.outside = FALSE)

Choropleth of total water points

p2 <- tm_shape(NGA_wp) +
  tm_fill("total_wp",
          n=10,
          style="equal",
          palette="Blues") +
  tm_borders(lwd = 0.1,
             alpha = 1) +
  tm_layout(main.title = "Distribution of functional water point by LGAs",
            legend.outside = FALSE)
tmap_arrange(p2,p1,nrow=1)

Choropleth Map for Rates

Deriving Proportion of Functional Water Points and Non-Functional Water Points

NGA_wp <- NGA_wp %>%
  mutate(pct_functional = wp_functional/total_wp) %>%
  mutate(pct_nonfunctional = wp_nonfunctional/total_wp)

Plotting map of rate

Plot a choropleth map showing the distribution of percentage functional water point by LGA

tm_shape(NGA_wp) +
  tm_fill("pct_functional",
          n=10,
          style = "equal",
          palette = "Blues",
          legend.hist = TRUE) +
  tm_borders(lwd = 0.1,
             alpha = 1) +
  tm_layout(main.title = "Rate map of functional water point by LGAs",
            legend.outside = TRUE)

Extreme Value Maps

Percentile Map

5.1.1 Data Preparation

Step 1: Exclude records with Na by using the code chunk below.

NGA_wp <- NGA_wp %>%
  drop_na()

Step 2: Creating customized classification and extracting values

percent <- c(0,.01,.1,.5,.9,.99,1)
var <- NGA_wp["pct_functional"] %>%
  st_set_geometry( NULL)
quantile(var[,1], percent)
       0%        1%       10%       50%       90%       99%      100% 
0.0000000 0.0000000 0.2169811 0.4791667 0.8611111 1.0000000 1.0000000 

Step 3:

get.var <- function(vname,df) {
  v <-df[vname] %>%
    st_set_geometry(NULL)
  v <- unname(v[,1])
  return(v)
}

5.1.4 A percentile mapping function

percentmap <- function(vnam, df, legtitle=NA, mtitle="Percentile Map"){
  percent <- c(0,.01,.1,.5,.9,.99,1)
  var <- get.var(vnam, df)
  bperc <- quantile(var, percent)
  tm_shape(df) +
  tm_polygons() +
  tm_shape(df) +
     tm_fill(vnam,
             title=legtitle,
             breaks=bperc,
             palette="Blues",
          labels=c("< 1%", "1% - 10%", "10% - 50%", "50% - 90%", "90% - 99%", "> 99%"))  +
  tm_borders() +
  tm_layout(main.title = mtitle, 
            title.position = c("right","bottom"))
}

Test drive

percentmap("total_wp", NGA_wp)

Box Map

ggplot(data = NGA_wp,
       aes(x = "",
           y = wp_nonfunctional)) +
  geom_boxplot()