Как получить метки тиков оси с разными цветами в пределах одной оси для графика ggplot?
Рассмотрим простой граф ggplot2
library(ggplot2)
dat <- data.frame(name=c("apple", "orange", "plum"),value=c(3,8,2),outlier=c(FALSE,TRUE,FALSE))
ggplot(dat)+geom_point(aes(x=value,y=name))
![enter image description here]()
Есть ли способ модифицировать атрибуты стилей оси y метки (например, цвет) условно, например, в зависимости от столбца outlier
в dat
?
В результате получилось бы что-то вроде
![enter image description here]()
На графике с большим количеством элементов эта функция wold значительно улучшает читаемость и влияние графика.
Ответы
Ответ 1
Более простой способ (IMO) сделать это - просто создать условный вектор цвета и проанализировать его на axis.text.y
dat <- data.frame(name=c("apple", "orange", "plum"),value=c(3,8,2),outlier=c(FALSE,TRUE,FALSE))
colvec <- character(dim(dat)[1])
colvec <- ifelse(dat$outlier, "red", "black")
library(ggplot2)
ggplot(dat) +
geom_point(data = dat, aes(x=value,y=name)) +
theme(axis.text.y = element_text(colour=colvec))
![enter image description here]()
Ответ 2
Я не думаю, что это так же хорошо, как окраска самой точки выброса, но вы можете взломать гроб:
p <- ggplot(dat)+geom_point(aes(x=value,y=name))
g <- ggplotGrob(p)
#I found this by using str(g) and looking for "axis.text.y.text"
#there is probably a clever way of automating this
g[[1]][[2]]$children$axis$grobs[[1]]$gp$col <- c("grey50", "red", "grey50")
plot(g)
![enter image description here]()
Выполнение этого условно возможно, используя что-то вроде c("grey50", "red")[dat$outlier]
, предполагая, что порядок строк необходим. Однако я могу только повторить, что вы, вероятно, должны создать другой график, если вы считаете, что вам нужно что-то вроде этого.