Как пометить значения y точек данных в заданном объекте ggplot?

Я пытаюсь аннотировать значения y точек данных в данном объекте ggplot постфактум.

Чтобы получить воспроизводимый пример, я создам модель на mtcars данных, используя lm(), и построю график, используя sjPlot::plot_model().

library(magrittr)
library(sjPlot)

given_p_object <- 
  mtcars %>% 
  lm(mpg ~ as.factor(gear), data = .) %>% 
  sjPlot::plot_model(., type = "pred")

Итак, мой вопрос начинается здесь: допустим, мне дан объект given_p_object. Я выполняю его и получаю сюжет:

> given_p_object

данный_участок

Можно ли пометить значения y для каждой точки на графике, без обращения к исходным данным и процессу, который привел к построению графика (таким образом игнорируя mtcars %>% lm() %>% sjPlot::plot_model())? Другими словами, как я могу извлечь из текущего given_p_object информацию, необходимую для выполнения следующих действий? демонстрация


person Emman    schedule 15.01.2021    source источник


Ответы (1)


Эти значения можно найти в:

given_p_object$gear$data$predicted
#[1] 16.1 24.5 21.4

Общее решение будет таким:

get_predicted_value <- function(p) p[[1]]$data$predicted
get_predicted_value(given_p_object)
#[1] 16.1 24.5 21.4
person Ronak Shah    schedule 15.01.2021
comment
Спасибо, это полезно. Могу ли я обобщить это, чтобы для любого заданного объекта ggplot p я мог получить значения y для точек данных? Я спрашиваю, потому что здесь нужно указать gear. Я пытаюсь совершенно не знать о сюжете, когда вытаскиваю значения y. - person Emman; 15.01.2021
comment
Обновлен ответ, чтобы включить функцию для работы с любым объектом p. - person Ronak Shah; 15.01.2021
comment
Извините, если это раздражает, но из этого я понимаю, что нет универсального способа получить значения y? Рассмотрим, например, g <- ggplot(mtcars, aes(wt, mpg)) + geom_point(). Затем get_predicted_value(g) возвращает NULL. - person Emman; 15.01.2021
comment
Хм... Извините, я не знаю общего решения, в котором он может возвращать значения y из любого графика. Ожидаете ли вы, что значения y также будут возвращены из этого графика? plot(1:10, 11:20) - person Ronak Shah; 15.01.2021
comment
Нет, потому что это не объект ggplot. blah <- plot(1:10, 11:20) is.ggplot(blah) возвращает FALSE. - person Emman; 15.01.2021