Учитывая ggplot, например, точек, как бы вы узнали строку данных, которой соответствует данная точка?
Пример графика:
library(ggplot2)
(p <- ggplot(mtcars, aes(mpg, wt)) +
geom_point() +
facet_wrap(~ gear)
)
Мы можем получить группы, содержащие точки, с помощью grid.ls
+ grid.get
.
grob_names <- grid.ls(print = FALSE)$name
point_grob_names <- grob_names[grepl("point", grob_names)]
point_grobs <- lapply(point_grob_names, grid.get)
Эта последняя переменная содержит детали координат xy, и указывает размер и т. д. (попробуйте unclass (point_grobs [[1]])
), но не очевидно, как я получаю строку данных в mtcars
, что каждая точка соответствует .
Чтобы ответить на вопрос Коске о том, зачем я это делаю, я использую gridSVG
для создания интерактивной диаграммы рассеяния.Когда вы наводите указатель мыши на точку, я хочу отобразить контекстную информацию.В примере с mtcars я мог бы показать всплывающую подсказку с названием автомобиля или другими значениями из этой строки фрейма данных.
Моя хакерская идея пока состоит в том, чтобы включить столбец id
в качестве невидимой текстовой метки:
mtcars$id <- seq_len(nrow(mtcars))
p + geom_text(aes(label = id), colour = NA)
Затем пройти по дереву гробов от точечного гроба к текстовому гробу и отобразить строку набор данных, проиндексированный меткой.
Это неудобно и не очень обобщаемо. Если есть способ сохранить значение id
в пределах точки, это будет намного чище.