Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-生成不显示的绘图_R_Plot_Graphics_Histogram - Fatal编程技术网

R-生成不显示的绘图

R-生成不显示的绘图,r,plot,graphics,histogram,R,Plot,Graphics,Histogram,我编写了一个函数,它使用loop在网格中显示数据集中变量的直方图。我正在为条添加标签,但最高条的标签总是被绘图截去一半。 我一直在寻找一种方法来扩展绘图页边距,但在任何地方都找不到。(par(oma)或par(mar))对我不起作用。我想到了一种解决方法,首先在函数中生成一个直方图,从中获取ylim并返回这些限制,然后原始循环可以使用这些限制在hist()函数中定义扩展的ylim 但是返回ylim()的函数也会绘制直方图。我想知道是否有办法不显示情节。我尝试了dev.off(),但这也关闭了循环

我编写了一个函数,它使用loop在网格中显示数据集中变量的直方图。我正在为条添加标签,但最高条的标签总是被绘图截去一半。 我一直在寻找一种方法来扩展绘图页边距,但在任何地方都找不到。(par(oma)或par(mar))对我不起作用。我想到了一种解决方法,首先在函数中生成一个直方图,从中获取ylim并返回这些限制,然后原始循环可以使用这些限制在hist()函数中定义扩展的ylim

但是返回ylim()的函数也会绘制直方图。我想知道是否有办法不显示情节。我尝试了dev.off(),但这也关闭了循环中的绘图

返回ylim的函数

histylim = function(data, nclass=NULL) {
    a = hist(unlist(data), nclass=nclass)
    corners = par("usr")
#    dev.off()
    return(c(corners[3], corners[4]))
}
除了指定的return()对象之外,上述函数还返回直方图。
添加def.off()并在另一个生成直方图网格的循环中调用函数时,histylim中的dev.off()也会关闭网格

下面是我编写的返回直方图网格的函数

multihist = function(data, numcols, nclass=NULL, labels=NULL, perc=F, axis=F, quants=NULL, 
                     plot_dim=NULL) {

    vars = names(which(sapply(data, is.numeric)))
    numrows = if (length(vars)%%numcols == 0) ((length(vars)%%numcols)+1) else ((length(vars)%/%numcols)+1)

    if (is.null(plot_dim)) {options(repr.plot.width=17, repr.plot.height=5*numrows)} 
        else {options(repr.plot.width=plot_dim[1], repr.plot.height=plot_dim[2])}
    
    histylim = function(data, nclass=NULL) {
        a = hist(unlist(data), nclass=nclass)
        corners = par("usr")
#         dev.off()
        return(c(corners[3], corners[4]))
    }
        
    par(mfrow=c(numrows, numcols))
    par(mar=c(5.1, 4.1, 4.1+2, 2.1)) 
    par(oma=c(0,0+2,0,0))
    
    for (i in seq(length(vars))) {
        var = vars[i] 
        par(mai=c(0, 0, 0, 0))
        corners = par('usr')
        a = hist(unlist(data[, var]), nclass=nclass, col=c(i+1), 
                 ylim=histylim(unlist(data[, var]), nclass=nclass),
                 main=paste(var), xlab=vars[i], ylab='freq', cex.main=2, cex.lab=1.7, cex.axis=1.5)
        median.var = median(unlist(data[,var]))
        mtext(paste('median : ', median.var), 3, adj = 0.5, line = 0.5, cex=1.2)
        abline(v=median.var, lty=2, lwd=2)
        if (!is.null(quants)) {for (q in quantile(unlist(df[,var]), quants)) {
            abline(v=q,lty=2,lwd=1,col='grey')}}
        if (axis==T) {axis(side=1, at=a$breaks, label=a$breaks)}
        if (!is.null(labels)) {
            if (perc==T) {
                labs = paste0(round(a$counts/sum(a$counts)*100),'%')
                labs[which(a$counts == 0)] = ''
                text(a$mids, a$counts, labels=labs, cex=labels, pos=3, col=1, font.axis=1)}
            else {text(a$mids, a$counts, labels=a$counts, cex=labels, pos=3, col=1, font.axis=1)}
        }
    }
}
我不希望将最高的直方图标签切成两半。

编辑: 简单地添加
plot=FALSE
在这里不起作用,因为您希望获得打印时生成的一些参数。在这种情况下,您可以遵循类似的操作

histylim