#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