This week’s #TidyTuesday dataset is about Water Access Points sourced from Water point data exchange. TidyTuesday is a weekly data project aimed at the R ecosystem. The data was curtailed to select nations for this week. I only focused on Nigeria.

The Outcome

After 1980s, boreholes increased drastically in Nigeria and spread across the country

Tips i.e. challenges I faced doing it

  • Found out map_data function included in {ggplot2} contains more simpler maps than {sf} combined with {rnaturalearth}

  • transition_states normally cut-off some data points on default animation options. You can get your desired results through animate function by tweaking frames, duration etc.

Full Code

### Load libraries

# Data wrangling
library(tidyverse)
# Get TidyTuesday data
library(tidytuesdayR)
# Animation
library(gganimate)



### Get Data

tt_data<-tt_load("2021-05-04")

water<-tt_data$water

water<-water%>%
  mutate(
    iso3=countrycode::countryname(country_name,destination = "iso3c"),
    continent=countrycode::countryname(country_name,destination = "continent")
  )


# Filter Nigeria

water_nigeria<-water%>%
  filter(country_name=='Nigeria',!is.na(install_year),install_year<=2021)


### Plotting

# Plot minimum viable map (MVM!)

p<-map_data("world")%>%
  filter(region=='Nigeria')%>%
  ggplot()+
  geom_polygon(aes(x = long, y = lat, group = group), fill="grey", col = "#397D5F", size = 1)+
  geom_point(data=water_nigeria,aes(x=lon_deg,y=lat_deg,col=water_source,group=install_year),size=1)+
  geom_text(data=water_nigeria,aes(x=10,y=5,label= paste0(floor(install_year))),
            size=15,color='#74020B')+
  xlim(2.5,12)+
  ylim(4,14)+
  labs(
    title = "Water sources in Nigeria over the years",
    caption = "Plot by Saif Kabir Asif | saifkabirasif.com ",
    col="Water Source"
  )+
  theme_minimal()+
  theme(
    plot.title=element_text(hjust=0.5,size=18,
                            face='bold'),
    plot.caption=element_text(color='gray',face='italic',size=8),
    plot.background = element_rect(fill='slategray2'),
    panel.background = element_rect(fill='slategray2'),
    legend.position = "top",
    legend.background = element_rect(fill='white'),
    axis.title = element_blank(),
    axis.text = element_blank(),
    panel.grid=element_blank()
  )+
  guides(color=guide_legend(override.aes = list(size=5)))+
  transition_states(install_year,state_length = 1)+
  shadow_mark(past=TRUE,exclude_layer = 3)+
  enter_fade()



# Granular animation controls

animate(p,duration=20 ,
        start_pause=0,
        end_pause = 30,
        detail=3,
        bg='slategray2',
        type='cairo',
        renderer = gifski_renderer(),
        width=800,
        height=450
)


### Save animation

anim_save(filename = paste0("Water_Source_",Sys.Date(),".gif"),animation = last_animation())