Home > Mobile >  Change multiple geom_text labels
Change multiple geom_text labels

Time:01-04

I'm trying to change the name of all labels in geom_text from the example below:

mpg %>% 
  distinct(trans, .keep_all = T) %>% 
  ggplot(aes(x=cty, y=hwy)) 
  geom_text(aes(x=cty, y=hwy,label = trans))

I would like to edit "auto(l3)" to "Al3", "auto(l4)" to "Al4", "auto(l5)" to "Al5", "auto(l6)" to "Al6", and so on according to the names in the code below

mpg %>% 
  distinct(trans, .keep_all = T) %>% 
  ggplot(aes(x=cty, y=hwy)) 
  geom_text(aes(x=cty, y=hwy,
                label = replace(trans, c("auto(l3)", "auto(l4)", "auto(l5)", "auto(l6)",
                                         "auto(s4)", "auto(s5)", "auto(s6)",
                                         "manual(m5)", "manual(m6)", "auto(av)"),
                                c("Al3", "Al4", "Al5", "Al6",
                                  "As4", "selected", "good",
                                  "m5", "m6", "av"))))

My output is the following error "Error in check_aesthetics(): ! Aesthetics must be either length 1 or the same as the data (10): label"

I put exactly the 10 trans values in the code, is there another way to do this change?

CodePudding user response:

I would suggest to do this kind of recoding outside of ggplot. IMHO this results in cleaner code and is easier to check and to debug. Additionally I switched to dplyr::recode using a named vector:

library(ggplot2)
library(dplyr)

rec_vec <- setNames(
  c("Al3", "Al4", "Al5", "Al6", "As4", "selected", "good", "m5", "m6", "av"),
  c(
    "auto(l3)", "auto(l4)", "auto(l5)", "auto(l6)", "auto(s4)", "auto(s5)",
    "auto(s6)", "manual(m5)", "manual(m6)", "auto(av)"
  )
)

mpg %>%
  distinct(trans, .keep_all = T) %>%
  mutate(trans = recode(trans, !!!rec_vec)) |>
  ggplot(aes(x = cty, y = hwy))  
  geom_text(aes(
    x = cty, y = hwy,
    label = trans
  ))

  • Related