ggplot2 переименование оси y с использованием внешних переменных

#r #ggplot2

Вопрос:

В рамках команды shiny предположим, что я хочу переименовать (подвергнуть цензуре) не выбранные имена в ggplot без изменения самих данных, т. Е. с помощью команды ggplot.

(Ничто не мешает мне изменять данные, но я просто хотел знать, возможно ли это только с помощью ggplot)

Пользователь может определить, какое имя можно сохранить.

Пользователь не знает возможных имен, которые появляются на графике.

Имена, которые необходимо сохранить, могут вообще не отображаться в сюжете, и в результате получится сюжет со всеми именами, подвергнутыми цензуре.

 library(ggplot2)

#user can change this variable
keepname <- c("Valiant", "Honda Civic", "AMC Javelin")

#user may not alter the ggplot lines.
ggplot(head(mtcars,10),aes(x=factor(vs),y=rownames(head(mtcars,10)),fill=gear))  
  geom_tile(color="gray60")
  scale_y_discrete(labels= #something here using `keepname`#)
 

введите описание изображения здесь

Результирующий график должен быть полностью по оси y, за исключением переименования «Valiant», как в LETTERS этом примере.

Возможная ось y для разных ggplot отличается, поэтому я не могу написать явно scale_y_discrete(labels=c("Merc 230"="X")) .

Длина keepname также может варьироваться, но никогда не будет больше 10, поэтому я считаю, что что-то можно сделать, используя censorname <- LETTERS[length(keepname)] для переименования.

Ответ №1:

 kcheck <- function(x){
  return(
    ifelse(x %in% keepname, x, NA)
  )
}


test.plot  
  scale_y_discrete(labels=kcheck)
 

Сработало, хотя это изменит все на NA и не сможет кодифицировать отдельные автомобили в разные LETTERS .