以下示例类似于我的数据集:
require(randomForest)
alpha = c(1,2,3,4,5,6)
bravo = c(2,3,4,5,6,7)
charlie = c(2,6,5,3,5,6)
mydata = data.frame(alpha,bravo,charlie)
myrf = randomForest(alpha~bravo+charlie, data = mydata, importance = TRUE)
varImpPlot(myrf, type = 2)
我似乎无法控制varImpPlot
中y轴标签的位置。我尝试改变绘图参数(例如mar,oma),但没有成功。我需要将y轴标签向左移动,以生成具有适当标签放置的PDF。
如何将y轴标签向左移动?
答案 0 :(得分:7)
我尝试使用adj
参数,但它会产生错误。作为varImpPlot,后面使用dotchart
,这里是使用格dotplot
的版本。然后,您可以使用scales
参数自定义您的斧头。
imp <- importance(myref, class = NULL, scale = TRUE, type = 2)
dotplot(imp, scales=list(y =list(cex=2,
at = c(1,2),
col='red',
rot =20,
axs='i') ,
x =list(cex=2,col='blue')) )
答案 1 :(得分:4)
您可以从myref中提取构建绘图所需的数据,并使用ggplot构建绘图。通过这样做,你可以更自由地调整情节。以下是一些例子
library(ggplot2)
str(myrf)
str(myrf$importance)
data <- as.data.frame(cbind(rownames(myrf$importance),round(myrf$importance[,"IncNodePurity"],1)))
colnames(data) <- c("Parameters","IncNodePurity")
data$IncNodePurity <- as.numeric(as.character(data$IncNodePurity))
标准情节:
(p <- ggplot(data) + geom_point(aes(IncNodePurity,Parameters)))
旋转y轴标签:
(p1 <- p+ theme(axis.text.y = element_text(angle = 90, hjust = 1)))
进一步调整(这里也是第一张图):
(p2 <- p1 + scale_x_continuous(limits=c(3,7),breaks=3:7) + theme(axis.title.y = element_blank()))
看起来像varImpPlot的图(此处显示的第二个图):
(p3 <- p2+ theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
panel.grid.major.y = element_line(colour = 'gray', linetype = 'dashed'),
panel.background = element_rect(fill='white', colour='black')))
使用ggplot:
可以轻松保存为pdfggsave("randomforestplot.pdf",p2)
或
ggsave("randomforestplot.png",p2)
p2
p3
答案 2 :(得分:1)
我是否理解正确,您希望在情节边界左侧更多地显示文字charlie
和bravo
?如果是这样,根据对绘图中使用的rownames
的修改,这里有一个hack来存档:
myrf = randomForest(alpha~bravo+charlie, data = mydata, importance = TRUE)
#add white spaces at the end of the rownames
rownames(myrf$importance)<-paste(rownames(myrf$importance), " ")
varImpPlot(myrf, type = 2)
dotchart
中的adj参数固定为0(右对齐),因此如果不修改dotchart
的代码,则无法更改:
mtext(labs, side = 2, line = loffset, at = y, **adj = 0**, col = color,
las = 2, cex = cex, ...)
(来自dotchart
)
修改强>:
你也可以制作另一种类型的黑客。取dotchart
的代码,将上面的行更改为
mtext(labs, side = 2, line = loffset, at = y, adj = adjust_ylab, col = color,
las = 2, cex = cex, ...)
然后将参数adjust_ylab
添加到参数列表中,并将该函数重命名为例如dotchartHack
。现在复制varImpPlot
的代码,找到调用dotchart
的行,将函数名更改为dotchartHack
并将参数adjust_ylab=adjust_ylab
添加到函数调用中,将函数重命名为{ {1}}并将varImpPlotHack
添加到此函数参数列表中。现在,您可以通过更改参数adjust_ylab
来更改charlie
和bravo
的对齐方式:
adjust_ylab
来自 myrf = randomForest(alpha~bravo+charlie, data = mydata, importance = TRUE)
varImpPlotHack(myrf, type = 2,adjust_ylab=0.5)
:
adj的值决定了文本字符串的方式 在文本,文本和标题中证明是正当的。值为0会产生 左对齐文本,0.5(默认)居中文本和 右对齐文本。 (允许[0,1]中的任何值,并且最多 在该间隔之外的设备值也将起作用。)