调整R中的绘图参数,同时绘制R中的regsubsets对象(x轴以下的更多空间)

时间:2014-02-18 17:04:52

标签: r visualization regression

我正在尝试调整我通常使用par(mar=c(10,4.1,4.1,2.1)执行的绘图参数,以允许在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

1 个答案:

答案 0 :(得分:2)

这是由函数体中的函数(plot.regsubsets())设置mar引起的。这会覆盖您设置的mar

您可以通过向mar函数添加plot.regsubsets()参数并将其传递给函数体第3行的par()调用来解决此问题:

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)
}