首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何操作R varImpPlot中的y轴文本标签?

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

Stack Overflow用户
提问于 2013-02-15 17:30:10
回答 3查看 7.3K关注 0票数 7

以下示例与我的数据集相似:

代码语言:javascript
复制
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轴标签在varImpPlot中的位置.我试图改变情节参数(例如mar,oma),但没有成功。我需要的y轴标签转移到左边,以产生一个PDF与适当的标签放置。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-15 18:46:16

我尝试使用adj参数,但它产生了一个bug。作为varImpPlot,在后面使用dotchart,这里是使用格子dotplot的版本。然后可以使用scales参数自定义axs。

代码语言:javascript
复制
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')) )

票数 7
EN

Stack Overflow用户

发布于 2013-03-09 22:01:44

您可以从myref中提取构建绘图所需的数据,并使用ggplot构建一个绘图。这样你就有了更多的自由来调整情节。以下是一些例子

代码语言:javascript
复制
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))

标准地块:

代码语言:javascript
复制
(p <- ggplot(data) + geom_point(aes(IncNodePurity,Parameters))) 

旋转y轴标签:

代码语言:javascript
复制
(p1 <- p+ theme(axis.text.y = element_text(angle = 90, hjust = 1)))

一些更多的调整(也是这里显示的第一个图):

代码语言:javascript
复制
(p2 <- p1 +  scale_x_continuous(limits=c(3,7),breaks=3:7) + theme(axis.title.y = element_blank())) 

看起来像varImpPlot的图(这里显示的第二幅图):

代码语言:javascript
复制
(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:

代码语言:javascript
复制
ggsave("randomforestplot.pdf",p2) 

代码语言:javascript
复制
ggsave("randomforestplot.png",p2)

p2

代码语言:javascript
复制
p3

票数 4
EN

Stack Overflow用户

发布于 2013-03-07 06:59:57

我是否正确地理解了,你想让文本charliebravo更多地离开情节的边界?如果是这样的话,下面有一个基于对绘图中使用的rownames的修改来存档这个文件的黑客:

代码语言:javascript
复制
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的代码,就不能更改该参数。

代码语言:javascript
复制
mtext(labs, side = 2, line = loffset, at = y, **adj = 0**, col = color, 
    las = 2, cex = cex, ...)

(来自dotchart)

编辑:您也可以进行另一种类型的黑客攻击。接受dotchart的代码,将上面的行更改为

代码语言:javascript
复制
 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添加到此函数参数列表中。现在,您可以通过更改参数charliebravo来更改adjust_ylab的对齐方式。

代码语言:javascript
复制
 myrf = randomForest(alpha~bravo+charlie, data = mydata, importance = TRUE) 
 varImpPlotHack(myrf, type = 2,adjust_ylab=0.5)

来自?par

adj的值决定文本字符串在文本、mtext和title中的对齐方式。值为0将生成左对齐文本、0.5 (默认值)居中文本和右对齐文本.(允许0,1中的任何值,而且在大多数设备上,该间隔以外的值也会工作。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14900102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档