在函数

时间:2016-11-05 20:09:05

标签: r ggplot2

我正在尝试改变原始情节调用中未定义的几何美学。

例如形状和大小

p=iris%>%ggplot(aes(x=Sepal.Length,y=Sepal.Width,colour=Species))+geom_point()+theme_bw()

change_shape=function(a){
  a$layers[[1]]$aes_params[['shape']]=5
  a$layers[[1]]$aes_params[['size']]=10
  return(a)
}

pnew=change_shape(p)
p

same p different shape and size

1 个答案:

答案 0 :(得分:0)

从现有的绘图对象克隆图层(l)并使其不连接到原始图

cloneLayer=function(l){
   layer.names=c('mapping','data','geom','position',
            'stat','show.legend','inherit.aes',
            'aes_params','geom_params','stat_params')
   x=sapply(layer.names,function(y){
    b=l[[y]]

    if('waiver'%in%class(b)) b=NULL

    if(y=='geom') b=eval(parse(text=class(b)[1]))

    if(y%in%c('position','stat')) {
        b=gsub(y, "", tolower(class(b)[1]))
      }

    b
  }) 
x$params=append(x$stat_params,x$geom_params)
x$params=append(x$params,x$aes_params)
x$params=x$params[!duplicated(names(x$params))]
x$geom_params<-x$aes_params<-x$stat_params<-NULL
do.call(layer,x)
}