如何操作R varImpPlot中的y轴文本标签?

如何操作R varImpPlot中的y轴文本标签?

问题描述:

下面的示例类似于我的数据集:如何操作R varImpPlot中的y轴文本标签?

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轴标签左移?

我试图使用adj参数,但它会产生一个错误。作为varImpPlot,在后面使用dotchart,这里使用格子dotplot的版本。然后你可以使用scales参数来定制你的axs。

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'))) 

enter image description here

难道我的理解正确,你想要得到的文本charliebravo更多的情节边界的左边?如果是的话,这里有一个黑客归档此基础上,rownames在绘制中使用的修改:

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添加到函数调用中,将函数重命名为varImpPlotHack,并将adjust_ylab添加到此函数参数列表中。

myrf = randomForest(alpha~bravo+charlie, data = mydata, importance = TRUE) 
varImpPlotHack(myrf, type = 2,adjust_ylab=0.5) 

?par:现在你可以通过改变参数adjust_ylab改变charliebravo的排列

形容词的值决定文本字符串 对齐文本的方式,多行文字和标题。值为0会产生左对齐文本,0.5(默认)居中文本和 右对齐文本。 (在任何值[0,1]是允许的,并且在大多数 装置,其间隔之外的值也将起作用。)

您可以提取构建情节出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())) 

绘图看起来像varImpP很多(这里示出第二曲线):

(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'))) 

保存到PDF很容易与ggplot:

ggsave("randomforestplot.pdf",p2) 

ggsave("randomforestplot.png",p2) 

p2 

enter image description here

p3 

enter image description here