7

次のサンプルは私のデータセットに似ています。

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など)を変更しようとしましたが、成功しませんでした。適切なラベル配置のPDFを作成するには、y軸ラベルを左にシフトする必要があります。

y軸ラベルを左にシフトするにはどうすればよいですか?

4

3 に答える 3

7

パラメータを使用しようとしましadjたが、バグが発生します。varImpPlot として、dotchart後ろに使用します。ここでは、lattice を使用したバージョン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')) )

ここに画像の説明を入力

于 2013-02-15T18:46:16.990 に答える
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())) 

varImpPlot のようなプロット (2 番目のプロットをここに示します) :

(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

ここに画像の説明を入力

于 2013-03-09T22:01:44.553 に答える
1

プロットの境界のテキストcharlieなどを取得したいということを正しく理解しましたか? もしそうなら、プロットで使用されるbravoの変更に基づいて、これをアーカイブするための1つのハックを次に示します。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)

の adj パラメータdotchartは 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、引数リストに引数を追加し、関数の名前を example のように変更しますdotchartHack。のコードをコピーし、varImpPlotを呼び出す行を見つけ、dotchart関数名を に変更しdotchartHackて引数adjust_ylab=adjust_ylabを関数呼び出しに追加し、関数の名前を に変更して、この関数の引数リストにvarImpPlotHack追加します。パラメータを変更することで、とadjust_ylabの配置を変更できます。charliebravoadjust_ylab

 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] 内の任意の値が許可され、ほとんどのデバイスでは、その間隔外の値も機能します。)

于 2013-03-07T06:59:57.147 に答える