Как вы соотносите ggplot2 grobs с данными?

Учитывая 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 в пределах точки, это будет намного чище.

8
задан Richie Cotton 14 January 2015 в 17:24
поделиться