无法更改 regsubsets 图中的文本大小

Chr*_*nch 1 plot r

我正在尝试为我的regsubsets输出绘制一个漂亮的图。我需要减小 x 轴标签的字体大小(有 171 个基因,因此不可读)。

我正在使用的代码是:

regsubsets(x=genes, y=resp, really.big=TRUE, nvmax=4, nbest=10)
plot(a, scale="adjr2", cex=0.5)
Run Code Online (Sandbox Code Playgroud)

我有几个不同的cex参数(cex、、、、、、、) ,但cex.axis没有cex.lab一个可以cex.main使字体大小变小。cex.subcex.textcex.names

看起来解决方案应该很简单,但我无法弄清楚!有什么建议么?

Sve*_*ein 6

该函数plot.regsubsets不允许修改任何 x 轴标签。

看一下该函数的代码:getAnywhere("plot.regsubsets")

您必须修改此函数的代码才能更改 x 轴标签的大小。

plot.regsubsets2 <- 
function (x, labels = obj$xnames, main = NULL, scale = c("bic", 
    "Cp", "adjr2", "r2"), col = gray(seq(0, 0.9, length = 10)), 
    ...) 
{
    obj <- x
    lsum <- summary(obj)
    par(mar = c(7, 5, 6, 3) + 0.1)
    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, 
        1e-04)), -log(pmax(yscale, 1e-04)))
    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, ...) # I modified this line
    axis(2, at = 1:nmodels, labels = signif(yscale[index], 2))
    if (!is.null(main)) 
        title(main = main)
    box()
    invisible(NULL)
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以更改标签的大小:

library(leaps)
data(swiss)
b <- regsubsets(Fertility ~ ., data = swiss, nbest = 2)

plot.regsubsets2(b, cex.axis = 0.75)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述