Presentations
This lesson is called Presentations, part of the R in 3 Months (Spring 2025) course. This lesson is called Presentations, part of the R in 3 Months (Spring 2025) course.
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: "Portland Public Schools Math Proficiency Report"
format:
revealjs:
theme: moon
footer: "Math Proficiency Report"
logo: "portland-public-schools-logo.svg"
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(flextable)
```
```{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-height: 5
#| fig-alt: A line chart showing math proficiency rates among all PPS schools in 2018-2019 and 2021-2022
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 {background-color="red"}
```{r}
#| tbl-cap: Math proficiency among third graders in five Portland schools
flextable_data <-
read_rds(here("data/third_grade_math_proficiency_dichotomous.rds")) |>
filter(district == "Portland SD 1J") |>
filter(school %in% c("Abernethy Elementary School",
"Ainsworth Elementary School",
"Alameda Elementary School",
"Arleta Elementary School",
"Atkinson Elementary School")) |>
select(year, school, percent_proficient_formatted) |>
arrange(school) |>
pivot_wider(id_cols = school,
names_from = year,
values_from = percent_proficient_formatted)
flextable_data |>
flextable() |>
set_header_labels(school = "School") |>
align(j = 2, align = "center") |>
# width(j = 1, width = 10) |>
autofit() |>
set_caption("Math proficiency among third graders in five Portland schools")
```
# Columns
:::: {.columns}
::: {.column width="50%"}
```{r}
flextable_data |>
flextable() |>
set_header_labels(school = "School") |>
align(j = 2, align = "center") |>
# width(j = 1, width = 10) |>
autofit() |>
set_caption("Math proficiency among third graders in five Portland schools")
```
:::
::: {.column width="50%"}
```{r}
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()
```
:::
::::
Your Turn
Turn your report into a Revealjs presentation
Put content in columns and using incremental reveal
Adjust the look-and-feel of your presentation by adding a logo and footer text, adjusting slide backgrounds, and using a custom theme
Practice presenting using Revealjs slides
Refer to the Quarto Revealjs documentation to help.
Learn More
If you want to see custom Revealjs themes, check out the Extensions page.
Have any questions? Put them below and we will help you out!
Course Content
127 Lessons
You need to be signed-in to comment on this post. Login.
Alberto Cabrera • March 29, 2024
On your lecture (7:03 minute), you mentioned you created a keyboard shortcut to create columns. I tried to create it using MacOS, but did not work. ChatGt could not help me in locating Markdown shortcuts . I wonder if you could share references as to how to create them. Many thanks. .:::: {.columns}
::: {.column width="50%"}
:::
::: {.column width="50%"}
:::
::::
Libby Heeren Coach • March 29, 2024
Hi, Alberto! David says "keyboard shortcut" in the video, but he's actually using a "snippet" in RStudio, which you can find more about here: https://rstudio.github.io/rstudio-extensions/rstudio_snippets.html
Alberto Cabrera • March 29, 2024
Thanks for solving the mystery.
Alberto Cabrera • March 29, 2024
Hi Libby,
I wonder if this is what David created, a function.
skeleton_columns<- function() { cat("::::: {.columns}\n") cat("::: {.column width="50%"}\n") cat(":::\n") cat("::: {.column width="50%"}\n") cat(":::\n") cat("::::\n") }
What is not clear to me is how one can save this function in RStudio and call it upon.
Libby Heeren Coach • March 29, 2024
He is using a snippet. If you play it back slowly, you'll see him type ".clm" and hit enter. This is how snippets work. There are many built in to RStudio that you can test now if you like. Try typing "lib" into a script and then wait - you'll see a menu pop up with the
library
snippet. If you hit enter, the snippet materializes where you had typed "lib" before. Here is some more information on snippets: https://dcl-workflow.stanford.edu/rstudio-snippets.htmlAlberto Cabrera • March 29, 2024
Thank you for solving the puzzle.
Alberto Cabrera • March 30, 2024
Thanks to you I was finally able to replicate David snippet
snippet twocolumn { cat( ":::: {.columns}\n", "\n", "::: {.column width='50%'}\n", "\n", ":::\n", "\n", "::: {.column width='70%'}\n", "\n", ":::\n", "\n", "::::\n", sep = "" ) }
Odile DOREUS • October 7, 2024
Hi David, Can you please share a video about how to import a specific template in R to use for a PowerPoint presentation?
David Keyes Founder • October 7, 2024
I don't have a video, unfortunately, but it's the exact same process as using reference documents in Word. Take a look at that lesson for more info (and the relevant Quarto docs.