Skip to content
Coming soon: Ally. Your guide to the world of AI and R. Learn More →
R for the Rest of Us Logo

R in 3 Months (Spring 2026)

Week 11 Live Session (Spring 2026)

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.

View code shown in video

Theme code

library(tidyverse)
library(palmerpenguins)

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

theme_dk <- function(hide_gridlines = TRUE, hide_legend = TRUE) {
  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
}

library(omni)


# Colors -----------------------------------------------------------------

scale_color_rru <- function(number_of_colors) {
  if (number_of_colors == 2) {
    my_brand_colors <-
      c(
        "#6cabdd",
        "#ff7400"
      )
  }

  if (number_of_colors == 3) {
    my_brand_colors <-
      c(
        "#6cabdd",
        "#ff7400",
        "darkgreen"
      )
  }

  scale_color_manual(
    values = my_brand_colors
  )
}

theme_set(theme_dk())

penguins |>
  filter(island != "Dream") |>
  ggplot(
    aes(
      x = bill_length_mm,
      y = bill_depth_mm,
      color = island
    )
  ) +
  geom_point() +
  scale_color_rru(number_of_colors = 2) +
  theme_dk(hide_gridlines = FALSE)


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

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

ggplot(
  data = penguins,
  aes(
    x = bill_length_mm,
    y = bill_depth_mm,
    color = island
  )
) +
  geom_point() +
  scale_color_manual(
    values = c(
      omni_colors("orange-red-600"),
      omni_colors("teal-200"),
      omni_colors("golden-yellow-400")
    )
  ) +
  theme_dk(hide_legend = FALSE) +
  theme(axis.title = element_text())

source("/users/davidkeyes/Desktop/functions.R")

Mapping code

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() +
  theme_void()

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

traffic_signals

traffic_signals |>
  ggplot() +
  geom_sf()

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

snow_and_ice_routes |>
  select(priority)

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 = FALSE) +
  theme(axis.text = element_blank())


# 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()


# Check-in break ----------------------------------------------------------

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

library(rnaturalearth)

ne_countries()

ukraine <-
  ne_states(
    country = c("Ukraine")
  )

ukraine |>
  ggplot() +
  geom_sf()


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

library(mapview)

mapview(ukraine)


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

library(ggiraph)

median_income_interactive_plot <-
  median_income |>
  mutate(estimate_formatted = dollar(estimate)) |>
  mutate(tooltip_text = str_glue("{NAME} {estimate_formatted}")) |>
  ggplot(aes(
    fill = estimate,
    tooltip = tooltip_text
  )) +
  geom_sf_interactive()

girafe(ggobj = median_income_interactive_plot)

Interactive data viz code

---
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_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 = percent_formatted
    )
  ) +
  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_plot)
```

Learn More

The additional content we didn't get to (more mapping and interactive data viz) is in the video below.

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

148 Lessons