Skip to content
R for the Rest of Us Logo

Going Deeper with R

Advanced YAML and Code Chunk Options

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
---
title: "Advanced YAML and Code Chunk Options"
format: 
  html:
    fig-height: 5
    fig-width: 5
    toc: true
    toc-location: right
    toc-depth: 1
execute: 
  echo: false
  warning: false
  message: false
editor_options: 
  chunk_output_type: console
---

```{r}
library(tidyverse)
library(fs)
library(scales)
library(ggrepel)
library(ggtext)
library(ragg)
library(here)
library(gt)
```


```{r}
third_grade_math_proficiency <- 
  read_rds(here("data/third_grade_math_proficiency.rds")) |> 
  select(academic_year, school, school_id, district, proficiency_level, number_of_students) |> 
  mutate(is_proficient = case_when(
    proficiency_level >= 3 ~ TRUE,
    .default = FALSE
  )) |> 
  group_by(academic_year, school, district, school_id, is_proficient) |> 
  summarize(number_of_students = sum(number_of_students, na.rm = TRUE)) |> 
  ungroup() |> 
  group_by(academic_year, school, district, school_id) |> 
  mutate(percent_proficient = number_of_students / sum(number_of_students, na.rm = TRUE)) |> 
  ungroup() |> 
  filter(is_proficient == TRUE) |> 
  select(academic_year, school, district, percent_proficient) |> 
  rename(year = academic_year) |> 
  mutate(percent_proficient = case_when(
    is.nan(percent_proficient) ~ NA,
    .default = percent_proficient
  )) |> 
  mutate(percent_proficient_formatted = percent(percent_proficient,
                                                accuracy = 1))
```

```{r}
theme_dk <- function() {
  
  theme_minimal(base_family = "IBM Plex Mono") +
    theme(axis.title = element_blank(),
          axis.text = element_text(color = "grey60",
                                   size = 10),
          plot.title = element_markdown(),
          plot.title.position = "plot",
          panel.grid = element_blank(),
          legend.position = "none")
  
}
```

## Chart

The chart below shows math proficiency for all PPS schools.

```{r}
#| fig-alt: A line chart showing math proficiency rates among all PPS schools in 2018-2019 and 2021-2022
#| fig-cap: A line chart showing math proficiency rates among all PPS schools in 2018-2019 and 2021-2022
#| fig-height: 10

top_growth_school <- 
  third_grade_math_proficiency |>
  filter(district == "Portland SD 1J") |> 
  group_by(school) |> 
  mutate(growth_from_previous_year = percent_proficient - lag(percent_proficient)) |> 
  ungroup() |> 
  drop_na(growth_from_previous_year) |>
  slice_max(order_by = growth_from_previous_year,
            n = 1) |> 
  pull(school)

third_grade_math_proficiency |>
  filter(district == "Portland SD 1J") |>
  mutate(highlight_school = case_when(
    school == top_growth_school ~ "Y",
    .default = "N"
  )) |> 
  mutate(percent_proficient_formatted = case_when(
    highlight_school == "Y" & year == "2021-2022" ~ str_glue("{percent_proficient_formatted} of students
                                                             were proficient
                                                             in {year}"),
    highlight_school == "Y" & year == "2018-2019" ~ percent_proficient_formatted,
    .default = NA
  )) |> 
  mutate(school = fct_relevel(school, top_growth_school, after = Inf)) |>
  ggplot(aes(x = year,
             y = percent_proficient,
             group = school,
             color = highlight_school,
             label = percent_proficient_formatted)) +
  geom_line() +
  geom_text_repel(hjust = 0,
                  lineheight = 0.9,
                  family = "IBM Plex Mono",
                  direction = "x") +
  scale_color_manual(values = c(
    "N" = "grey90",
    "Y" = "orange"
  )) +
  scale_y_continuous(labels = percent_format()) +
  scale_x_discrete(expand = expansion(mult = c(0.05, 0.5))) +
  annotate(geom = "text",
           x = 2.02,
           y = 0.6,
           hjust = 0,
           lineheight = 0.9,
           color = "grey70",
           family = "IBM Plex Mono",
           label = str_glue("Each grey line
                            represents one school")) +
  labs(title = str_glue("<b style='color: orange;'>{top_growth_school}</b> showed large growth<br>in math proficiency over the last two years")) +
  theme_dk()
```

# Table

The following table shows math proficiency in the last two years for five key schools.

```{r}
gt_data_interactive <- 
  read_rds(here("data/third_grade_math_proficiency_dichotomous.rds")) |> 
  filter(district == "Portland SD 1J") |> 
  select(year, school, percent_proficient) |> 
  arrange(school) |> 
  pivot_wider(id_cols = school,
              names_from = year,
              values_from = percent_proficient)

gt_data_interactive |> 
  gt() |> 
  cols_label(school = "School") |> 
  cols_width(
    school ~ pct(50)
  ) |> 
  cols_align(
    columns = `2018-2019`,
    align = "center"
  ) |> 
  fmt_percent(
    columns = 2:3,
    decimals = 0
  ) |> 
  tab_caption("Math proficiency among third graders in five Portland schools") |> 
  opt_interactive(
    use_search = TRUE,
    use_highlight = TRUE
  )
```

Your Turn

Working in the Quarto document you created in the last lesson:

  1. Add a table of contents and adjust where it goes

  2. Set default figure width and height (you'll need to add a plot before you do so)

  3. Change the figure width and height in an individual code chunk

  4. Add a figure caption and alt text

Learn More

This page has all of the YAML and code chunk options you can set in a Quarto document knitted to HTML (the PDF version is here and the Word version here).

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

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

Eric Juskewitz

Eric Juskewitz • May 5, 2024

Dear Rfortherestofus team, I am struggling to address plot sizes after it was rendered in a quarto document.

I define the plot parameters with fig-height/width to get the plot ratio I like. But how can I change afterwards the size of the figure (e.g =50% to save space) in the document?

David Keyes

David Keyes Founder • May 5, 2024

Happy to help, but I'm not sure I totally understand what you're trying to do. If you explain a bit more, perhaps I can help. You might also find this section from R for Data Science useful.

Eric Juskewitz

Eric Juskewitz • June 6, 2024

Thank you for the link, I was looking for the out-width option

Course Content

44 Lessons