2

我想知道为什么下面的代码不会产生一个在另一个之下的两个图。

data(mtcars)
library(randomForest)

mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE,
                          importance=TRUE)
png("rf1.png", width=6, height=6, units="in", res=100)
par(mfcol=c(2,1))
varImpPlot(mtcars.rf)
plot(mtcars.rf, log="y")
dev.off()

这只会产生

在此处输入图像描述

第二行空白。

4

1 回答 1

3

问题是 varImpPlot 重新定义了绘图区域,然后将其重置为以前的值。这意味着它的行为就像您在线路par(mfcol=c(2,1)) 之后调用一样。varImpPlot如果您提取 varImpPlot 绘图数据,您可以自己绘制两个点图(您可以使用layout而不是par将绘图区域分成不同形状的区域):

data(mtcars)
library(randomForest)

mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE,
                          importance=TRUE)
varImpData <- varImpPlot(mtcars.rf) # calculate this outside the plot

png("rf1.png", width=6, height=6, units="in", res=100)
layout(matrix(c(1,2,3,3), 2, 2, byrow = TRUE))
dotchart(varImpData[,c(1)])
dotchart(varImpData[,c(2)])
plot(mtcars.rf, log="y")
dev.off()
于 2012-11-01T11:28:15.197 回答