Skip to content
R for the Rest of Us Logo

Use Direct Labeling

This lesson is locked

Get access to all lessons in this course.

If the video is not playing correctly, you can watch it in a new window


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

Your Turn

Add text to display the percentage of Hispanic/Latino students in Douglas ESD in 2017-2018 and 2018-2019.

You’ll want to use case_when() and str_glue(). If you want some guidance with str_glue(), check out its help page. When using this function, put everything you want to glue together in quotes, with curly brackets around variables.

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

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

Vuk Sekicki

Vuk Sekicki

May 13, 2021

Hello David, This works well if we use one line as you said. However I was experimenting with top 3 schools. It actually does not move middle one for whatever reason. Let me share the code:

highlight_district % filter(race_ethnicity == "Hispanic/Latino") %>% filter(district == "Douglas ESD" | district == "Troy SD 54" | district == "InterMountain ESD") %>% mutate(percent_display = percent(percentage, accuracy = 1)) %>% mutate(percent_display = case_when( year == "2018_2019" ~ str_glue("{percent_display} of students"), TRUE ~ percent_display ))

total_enrolement %>% filter(race_ethnicity == "Hispanic/Latino") %>% ggplot(aes(x= year, y= percentage, group = district)) + geom_line(color = "light gray") + geom_line(data = highlight_district, aes(x= year, y= percentage, group = district, color = district)) + theme_minimal() + geom_text(data = highlight_district, inherit.aes = TRUE, aes(label = percent_display), nudge_x = c(-0.1,0.1) )

Harold Stanislaw

Harold Stanislaw

May 20, 2021

I experimented with fig.width to prevent my label from getting truncated. This displayed the entire line, but it also rescaled the text so it became quite small and was no longer directly adjacent to the line it was labeling. I tried using ggfittext to wrap the text, but couldn't get it to work :(

Juan Clavijo

Juan Clavijo

December 1, 2021

Hello, you mentioned in the live session a package to help put graphs together, next to one another in the layout. Could you please re-share that here?

David Keyes

David Keyes Founder

December 8, 2021

I'm not quite sure I follow your question. Can you expand a bit please?

Tarisirai Zengeni

Tarisirai Zengeni

December 23, 2021

Hi Davi,

I have been stuck for weeks now on getting this code to work.

highlight_district% filter(race_ethnicity=="Hispanic/Latino") %>% filter(district=="Douglas ESD")%>% mutate(percent_display = percent(percent_of_total_at_school, accuracy = 1))%>% mutate(percent_display = case_when( year=="2018-2019" ~ str_glue("{percent_display} Latino students"), TRUE ~ percent_display ))

I keep getting the error message:

Error: Problem with mutate() column percent_display. i percent_display = case_when(...). x unused argument (accuracy = 1) Run rlang::last_error() to see where the error occurred.

I even tried reinstalling the R suite and no change. When I try to open the highlight_district dataframe to view, I also get an error message (r error 4 (R code execution error)) with the option to retry which doesnt work - i get the same r error 4 message. i even tried starting a new markdown file but still same result. Counsel says:

Error in formatC(c(0, 13.6363636363636), format = "f", digits = 2L, accuracy = 1) : unused argument (accuracy = 1)

I am at a loss.

For some reason this code throws an error, but when I switch the order of the lines in the case_when it doesn't 🙄

Code: enrollment_by_race_ethnicity % mutate(percent_display = percent(percentage, accuracy = 1)) %>% mutate(percent_display = case_when( year == "2017" ~ percent_display, year == "2018" ~ str_glue("{percent_display} Latino students")))

Error: Error in mutate(): ! Problem while computing percent_display = case_when(...). Caused by error in case_when():


  1. ... %>% ...
  2. dplyr::case_when(year == "2017" ~ percent_display, year == "2018" ~ str_glue("{percent_display} Latino students"))