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

如何在R varImpPlot中操作y轴文本标签?,r,R,以下示例类似于我的数据集: 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 =

以下示例类似于我的数据集:

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)
我似乎无法控制y轴标签在
VarimPlot
中的位置。我尝试过改变绘图参数(如mar、oma),但没有成功。我需要将y轴标签向左移动,以便生成具有适当标签位置的PDF


如何将y轴标签向左移动?

我试图使用
adj
参数,但它产生了一个错误。作为VarimPlot,在后面使用
点图
,这里是一个使用lattice
点图
的版本。然后,您可以使用
比例
参数自定义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')) )

imp我是否正确理解了,您想让文本
charlie
bravo
更靠近绘图边界?如果是这样的话,这里有一种方法可以将其存档,它基于对绘图中使用的
行名的修改:

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)
(来自
点图

编辑: 你也可以进行另一种黑客攻击。取
点图的代码
,将上一行更改为

 mtext(labs, side = 2, line = loffset, at = y, adj = adjust_ylab, col = color, 
        las = 2, cex = cex, ...)
然后将参数
adjust_ylab
添加到参数列表中,并将函数重命名为例如
dotchart
。现在复制
varimplot
的代码,找到调用
dotchart
的行,将函数名更改为
dotchart
并将参数
adjust_ylab=adjust_ylab
添加到函数调用中,将函数重命名为
varimplothack
并将
adjust_ylab
添加到此函数参数列表中。现在,您可以通过更改参数
adjust_ylab
来更改
charlie
bravo
的对齐方式:

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

adj的值决定文本字符串的显示方式 在文本、多行文字和标题中对齐。值为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))

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))) 
(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())) 
(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')))
ggsave("randomforestplot.pdf",p2) 
ggsave("randomforestplot.png",p2)

p2
p3