2016-06-11 330 views
1

如何更改由randomForest包中varImpPlot生成的图的x限制?如何在varImpPlot上设置x限制

如果我尝试

set.seed(4543) 
data(mtcars) 
mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE, 
         importance=TRUE) 
varImpPlot(mtcars.rf, scale=FALSE, type=1, xlim=c(0,15)) 

我收到以下错误:

Error in dotchart(imp[ord, i], xlab = colnames(imp)[i], ylab = "", main = if (nmeas == : formal argument "xlim" matched by multiple actual arguments".

这是因为varImpPlot定义了自己的x的限制,我想,但我怎么能解决这个问题,如果我想自己设置x限制(也许是为了保证图形的一致性)?

+0

我已经从使用varimpplot,向使用dotchart,点阵图{LAT趋于远离tice}或者geom_dotplot {ggplot2}来对绘图进行更多样化的控制。您可以提取值以使用重要性进行绘图(mtcars.rf)。当然,重要性也可以很好地用条而不是点来表示,尽管这种情况并不常见。如果您比较不同射频之间的重要性,这很适合分组条形图。 – dww

+0

话虽如此,我认为xlim不起作用的原因是因为默认情况下,varimp图会为不同重要性度量创建2个点图。所以它不知道哪个轴应用限制。尝试设置type = 1或type = 2,并且限制应该工作 – dww

+0

我曾尝试设置type = 1,并且我仍然得到相同的错误。结束了使用你的第一个建议,它完美的工作,谢谢! –

回答

2

首先我提取使用importance()的值(由于从@dww建议)

impToPlot <- importance(mtcars.rf, scale=FALSE) 

然后我使用dotchart()绘制它们,这使我手动设置x限制(和任何其他情节设有我倒是等)

dotchart(sort(impToPlot[,1]), xlim=c(0,15), xlab="%IncMSE") 

dotchart of variable importance with manual x axis