繁体   English   中英

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

[英]How to manipulate y-axis text labels in R varImpPlot?

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

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轴标签的varImpPlot 我试过改变绘图参数(例如mar,oma),没有成功。 我需要将y轴标签向左移动,以生成具有适当标签放置的PDF。

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

我试图使用adj参数,但它产生了一个bug。 作为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')) )

在此输入图像描述

您可以从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可以轻松保存为pdf:

ggsave("randomforestplot.pdf",p2) 

要么

ggsave("randomforestplot.png",p2)

p2

在此输入图像描述

p3

在此输入图像描述

我是否理解正确,你想让文本charliebravo更多地留在情节的边界? 如果是这样的话,根据绘图中使用的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添加到函数调用,将函数重命名为varImpPlotHack ,并将adjust_ylab添加到此函数参数列表中。 现在,您可以通过更改参数adjust_ylab来更改charliebravo的对齐方式:

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

来自?par

adj的值确定文本字符串在text,mtext和title中的对齐方式。 值为0会生成左对齐文本,0.5(默认)居中文本和右对齐文本。 (允许[0,1]中的任何值,并且在大多数设备上,该间隔之外的值也将起作用。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM