-
Advanced Data Wrangling
- Downloading and Importing Data
- Overview of Tidy Data
- Tidy Data Rule #1: Every Column is a Variable
- Tidy Data Rule #3: Every Cell is a Single Value
- Tidy Data Rule #2: Every Row is an Observation
- Changing Variable Types
- Dealing with Missing Data
- Advanced Summarizing
- Binding Data Frames
- Functions
- Data Merging
- Exporting Data
- Bring It All Together (Advanced Data Wrangling)
-
Advanced Data Visualization
- Best Practices in Data Visualization
- Tidy Data
- Pipe Data into ggplot
- Reorder Plots to Highlight Findings
- Line Charts
- Use Color to Highlight Findings
- Declutter
- Add Descriptive Labels to Your Plots
- Use Titles to Highlight Findings
- Use Annotations to Explain
- Tweak Spacing
- Create a Custom Theme
- Customize Your Fonts
- Try New Plot Types
- Bring it All Together (Advanced Data Visualization)
-
Quarto
- Advanced Markdown
- Advanced YAML and Code Chunk Options
- Tables
- Inline R Code
- Making Your Reports Shine: Word Edition
- Making Your Reports Shine: PDF Edition
- Making Your Reports Shine: HTML Edition
- Presentations
- Dashboards
- Websites
- Publishing Your Work
- Quarto Extensions
- Parameterized Reporting, Part 1
- Parameterized Reporting, Part 2
- Parameterized Reporting, Part 3
- Wrapping up Going Deeper with R
Going Deeper with R
Customize Your Fonts
This lesson is called Customize Your Fonts, part of the Going Deeper with R course. This lesson is called Customize Your Fonts, part of the Going Deeper with R course.
If the video is not playing correctly, you can watch it in a new window
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
# Load Packages -----------------------------------------------------------
library(tidyverse)
library(fs)
library(scales)
library(ggrepel)
library(ggtext)
# Create Directory --------------------------------------------------------
dir_create("data")
# Download Data -----------------------------------------------------------
# download.file("https://github.com/rfortherestofus/going-deeper-v2/raw/main/data/third_grade_math_proficiency.rds",
# mode = "wb",
# destfile = "data/third_grade_math_proficiency.rds")
# Import Data -------------------------------------------------------------
third_grade_math_proficiency <-
read_rds("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))
# Theme -------------------------------------------------------------------
theme_dk <- function() {
theme_minimal() +
theme(axis.title = element_blank(),
plot.title = element_markdown(family = "IBM Plex Mono"),
plot.title.position = "plot",
panel.grid = element_blank(),
axis.text = element_text(color = "grey60",
family = "IBM Plex Mono",
size = 10),
legend.position = "none")
}
# Plot --------------------------------------------------------------------
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(add = c(0.05, 0.5))) +
annotate(geom = "text",
x = 2.02,
y = 0.6,
hjust = 0,
lineheight = 0.9,
family = "IBM Plex Mono",
color = "grey70",
label = str_glue("Each grey line
represents one school")) +
labs(title = str_glue("<b style='color: orange;'>{top_growth_school}</b> showed large growth in math proficiency over the last two years")) +
theme_dk()
Your Turn
Set you system up to use custom fonts using the
ragg
andsystemfonts
packages.Apply a custom font to your plot.
Save your plot using
ggsave()
and add your plot to a Quarto document to make sure that it renders correctly there.
Learn More
Cara Thompson has a great article on getting fonts to work in R.
If you want to go really deep on custom fonts in R, check out this article by June Choe.
You need to be signed-in to comment on this post. Login.
Karina Wheeler
November 16, 2023
When I downloaded the systemfonts package, I do not have the IBM Plex Mono or Inter Tight font. I do have a variety of other fonts. Do you know the reason why the fonts are different for me?
David Keyes Founder
November 16, 2023
I should have clarified. The
systemfonts
package does not install any fonts for you. It just gives you access to fonts that are on your system. If you wanted to work with the fonts I show in the video you could download them (click the Download Family button in the top right corner for each):After that, you need to install the fonts on your system. After all of this, you can work with them in ggplot. Let me know if that works for you!