Skip to content
R for the Rest of Us Logo

R in 3 Months (Fall 2025)

Week 11 Live Session (Fall 2025)

Transcript

Click on the transcript to go to that point in the video. Please note that transcripts are auto generated and may contain minor inaccuracies.

Learn More

Here is the code I demonstrated today for various things we talked about.

Advanced custom themes

library(tidyverse)
library(palmerpenguins)

# Theme -------------------------------------------------------------------

theme_dk <- function(hide_gridlines = FALSE, hide_legend = FALSE) {
  my_theme <- theme_minimal() +
    theme(
      axis.title = element_blank(),
      axis.text = element_text(
        color = "grey60",
        size = 18
      )
    )
  
  if (hide_gridlines == TRUE) {
    my_theme <- my_theme +
      theme(panel.grid = element_blank())
  }
  
  if (hide_legend == TRUE) {
    my_theme <- my_theme +
      theme(legend.position = "none")
  }
  
  my_theme
}


# Plots -------------------------------------------------------------------

ggplot(
  data = penguins,
  aes(
    x = bill_length_mm,
    y = bill_depth_mm
  )
) +
  geom_point()

ggplot(
  data = penguins,
  aes(
    x = bill_length_mm,
    y = bill_depth_mm,
    color = island
  )
) +
  geom_point() +
  theme_dk(hide_legend = TRUE) 

penguins |> 
  count(island) |> 
  ggplot(
    aes(
      x = island,
      y = n
    )
  ) +
  geom_col() +
  theme_dk(hide_gridlines = TRUE)

Mapping

library(tidyverse)
library(janitor)
library(sf)

# Portland ----------------------------------------------------------------

portland_boundaries <-
  read_sf("data-raw/City_Boundaries.geojson") |>
  clean_names() |>
  filter(cityname == "Portland")

portland_boundaries

portland_boundaries |>
  ggplot() +
  geom_sf()

traffic_signals <-
  read_sf("data-raw/Traffic_Signals.geojson") |>
  clean_names()

traffic_signals

traffic_signals |>
  ggplot() +
  geom_sf(size = 0.25)

snow_and_ice_routes <-
  read_sf("data-raw/Snow_and_Ice_Routes.geojson") |>
  clean_names()

snow_and_ice_routes

snow_and_ice_routes |>
  ggplot() +
  geom_sf(aes(color = priority))

ggplot() +
  geom_sf(
    data = portland_boundaries,
    fill = "gray80",
    alpha = 0.5
  ) +
  geom_sf(
    data = snow_and_ice_routes,
    alpha = 0.5
  ) +
  geom_sf(
    data = traffic_signals,
    aes(color = software_type),
    alpha = 0.5,
    size = 1
  ) +
  theme_dk(hide_gridlines = TRUE, hide_legend = TRUE)


# Tigris ------------------------------------------------------------------

library(tigris)

us_states <- states()

us_states

us_states |>
  shift_geometry() |>
  ggplot() +
  geom_sf()

kentucky_counties <- counties(state = "Kentucky")

kentucky_counties

kentucky_counties |>
  ggplot() +
  geom_sf()

# Median Income -----------------------------------------------------------

library(tidycensus)
library(scales)

median_income <-
  get_acs(
    state = "Illinois",
    geography = "county",
    variables = "B19013_001",
    geometry = TRUE
  )

median_income

median_income |>
  ggplot(aes(fill = estimate)) +
  geom_sf()


# International Data ------------------------------------------------------

library(rnaturalearth)

?rnaturalearth::ne_countries()


ne_countries(
  country = c("Ukraine"),
  scale = "large",
  returnclass = "sf"
) |>
  select(sovereignt) |>
  ggplot() +
  geom_sf()


# Mapview -----------------------------------------------------------------

library(mapview)

mapview(us_states)


# Interactive -------------------------------------------------------------

library(ggiraph)

median_income_interactive_plot <-
  median_income |>
  ggplot(aes(
    fill = estimate,
    tooltip = estimate |> dollar()
  )) +
  geom_sf_interactive()

girafe(ggobj = median_income_interactive_plot)

Quarto document with interactive childhood bereavement plot

---
title: "Interactive Data Viz Example"
format: html
execute: 
  warning: false
  message: false
  echo: false
editor_options: 
  chunk_output_type: console
---

```{r}
library(tidyverse)
library(scales)
library(ggiraph)
```


```{r}
cbem <-
  read_csv(here::here("data-raw/cbem.csv"))
```

## Static Plot

```{r}
cbem |>
  filter(location == "Oregon") |>
  filter(age_group == "Under 18") |>
  filter(group != "All Persons") |>
  mutate(
    group = fct(
      group,
      levels = c(
        "American Indian or Alaska Native",
        "Asian or Pacific Islander",
        "Black or African American",
        "White",
        "Hispanic or Latino"
      )
    )
  ) |>
  mutate(x_position = row_number()) |>
  mutate(
    x_position = case_when(
      group == "Hispanic or Latino" ~ 5.5,
      .default = x_position
    )
  ) |>
  mutate(percent_formatted = percent(percent)) |>
  ggplot(
    aes(
      x = x_position,
      y = percent,
      fill = group,
      label = percent_formatted
    )
  ) +
  geom_col() +
  geom_text(
    vjust = 1.5,
    color = "white"
  ) +
  scale_fill_manual(
    values = c(
      "American Indian or Alaska Native" = "#9CC892",
      "Asian or Pacific Islander" = "#0066cc",
      "Black or African American" = "#477A3E",
      "White" = "#6CC5E9",
      "Hispanic or Latino" = "#ff7400"
    )
  ) +
  theme_void() +
  theme(legend.position = "none")
```


## Interactive Plot

```{r}
cbem_interactive_plot <-
  cbem |>
  filter(location == "Oregon") |>
  filter(age_group == "Under 18") |>
  filter(group != "All Persons") |>
  mutate(
    group = fct(
      group,
      levels = c(
        "American Indian or Alaska Native",
        "Asian or Pacific Islander",
        "Black or African American",
        "White",
        "Hispanic or Latino"
      )
    )
  ) |>
  mutate(x_position = row_number()) |>
  mutate(
    x_position = case_when(
      group == "Hispanic or Latino" ~ 5.5,
      .default = x_position
    )
  ) |>
  mutate(percent_formatted = percent(percent)) |>
  ggplot(
    aes(
      x = x_position,
      y = percent,
      fill = group,
      label = percent_formatted,
      tooltip = group
    )
  ) +
  geom_col_interactive() +
  geom_text(
    vjust = 1.5,
    color = "white"
  ) +
  scale_fill_manual(
    values = c(
      "American Indian or Alaska Native" = "#9CC892",
      "Asian or Pacific Islander" = "#0066cc",
      "Black or African American" = "#477A3E",
      "White" = "#6CC5E9",
      "Hispanic or Latino" = "#ff7400"
    )
  ) +
  theme_void() +
  theme(legend.position = "none")

girafe(ggobj = cbem_interactive_plot)
```

Have any questions? Put them below and we will help you out!

You need to be signed-in to comment on this post. Login.

Course Content

128 Lessons