2013-02-15 78 views
7

下面的示例類似於我的數據集:如何操作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軸標籤左移?

回答

7

我試圖使用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

1

難道我的理解正確,你想要得到的文本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]是允許的,並且在大多數 裝置,其間隔之外的值也將起作用。)

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

繪圖看起來像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