2014-02-18 2 views
0

Я пытаюсь настроить параметры построения графика, которые я обычно делал бы с par(mar=c(10,4.1,4.1,2.1), чтобы позволить больше места под осью x, чтобы построить эти этикетки. Прямо сейчас имена переменных запускаются с экрана.отрегулировать параметры графика в R при построении объекта regsubsets в R (больше места ниже оси x)

Является ли это что-то с пакетом LEAPS или regsubsets объектом, который я черчение, что не признает par(mar=c(10,4.1,4.1,2.1))

Вот сводился пример того, что я пытаюсь сделать.

require('leaps') 
par(mar=c(10,4.1,4.1,2.1)) 
leaps <- regsubsets(mpg~disp+hp+drat+wt+qsec, data=mtcars, nbest=2, nvmax=5) 
## artificially making labels longer... my labels are longer than this example dataset 
labs <- sapply(leaps$xnames, function(x) paste(rep(x,5), collapse='')) 
plot(leaps, scale=c('adjr2'), labels=labs)) 

enter image description here

ответ

2

Это вызвано функцией (plot.regsubsets()) Установка mar в пределах тела функции. Это переопределяет установленный вами mar.

Вы можете это исправить, добавив mar аргумент функции plot.regsubsets() и передавая его par() вызова на линии 3 тела функции:

plot.regsubsets<-function(x,labels=obj$xnames,main=NULL, 
          scale=c("bic","Cp","adjr2","r2"), 
          col=gray(seq(0,0.9,length=10)),mar = c(7,5,6,3)+0.1, ...){ 
    obj<-x 
    lsum<-summary(obj) 
    par(mar=mar) 
    nmodels<-length(lsum$rsq) 
    np<-obj$np 
    propscale<-FALSE 
    sscale<-pmatch(scale[1],c("bic","Cp","adjr2","r2"),nomatch=0) 
    if (sscale==0) 
     stop(paste("Unrecognised scale=",scale)) 
    if (propscale) 
     stop(paste("Proportional scaling only for probabilities")) 

    yscale<-switch(sscale,lsum$bic,lsum$cp,lsum$adjr2,lsum$rsq) 
    up<-switch(sscale,-1,-1,1,1) 

    index<-order(yscale*up) 

    colorscale<- switch(sscale, 
         yscale,yscale, 
         -log(pmax(yscale,0.0001)),-log(pmax(yscale,0.0001))) 

    image(z=t(ifelse(lsum$which[index,], 
      colorscale[index],NA+max(colorscale)*1.5)), 
      xaxt="n",yaxt="n",x=(1:np),y=1:nmodels,xlab="",ylab=scale[1],col=col) 

    laspar<-par("las") 
    on.exit(par(las=laspar)) 
    par(las=2) 
    axis(1,at=1:np,labels=labels) 
    axis(2,at=1:nmodels,labels=signif(yscale[index],2)) 

    if (!is.null(main)) 
     title(main=main) 
    box() 
    invisible(NULL) 
} 
Смежные вопросы