2016-10-07 3 views
0

Gibt es in der ggplot-Ausgabe ein Objekt, das die layerspezifischen AES enthält? Ich kann nur die Standardwerte finden (ich will nicht ggplot_build verwenden, möchte ich es in dem Objekt selbst zu finden)aes aus ggplot2-Objekt extrahieren

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 
+0

Warum gehst du nicht ggplot_build verwenden? – tmpname12345

+0

Ich möchte das tatsächliche Plotobjekt mit Änderungen an AES aktualisieren – yonicd

Antwort

0
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