Извлечение aes из объекта ggplot2

#r #ggplot2

#r #ggplot2

Вопрос:

Есть ли в выводе ggplot объект, содержащий aes, специфичные для слоя? Я могу найти только значения по умолчанию (я не хочу использовать ggplot_build , я хочу найти его в самом объекте)

 p=ggplot(iris,aes(x =Sepal.Length,y=Sepal.Width)) geom_point(alpha=.5,colour='blue') geom_line()

>p$layers[[1]]$geom$default_aes
* shape  -> 19
* colour -> "black"
* size   -> 1.5
* fill   -> NA
* alpha  -> NA
* stroke -> 0.5

>p$layers[[2]]$geom$default_aes
* colour   -> "black"
* size     -> 0.5
* linetype -> NA
* alpha    -> NA
  

Комментарии:

1. Почему вы не хотите использовать ggplot_build?

2. я хочу обновить фактический объект plot с изменениями в aes

Ответ №1:

 fetch_layer_aes=function (self, data=data.frame(x=1), params = list()){
   missing_aes <- setdiff(names(self$default_aes), names(data))
if (ggplot2:::empty(data)) {
  data <- plyr::quickdf(self$default_aes[missing_aes])
}
else {
  data[missing_aes] <- self$default_aes[missing_aes]
}
aes_params <- intersect(self$aesthetics(), names(params))
ggplot2:::check_aesthetics(params[aes_params], nrow(data))
data[aes_params] <- params[aes_params]
data[,-1]
}

>lapply(p$layers,function(x) fetch_layer_aes(self=x$geom,params=x$aes_params))
[[1]]
    shape colour size fill alpha stroke
1    19   blue  1.5   NA   0.5    0.5

[[2]]
  colour size linetype alpha
1  black  0.5        1    NA