#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
.