2013-02-15 3 views
7

Следующий пример напоминает мой набор данных:Как управлять текстовыми метками оси Y в 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) 

Я не могу контролировать размещение Y-меток осей в varImpPlot. Я попытался изменить параметры сюжета (например, mar, oma), без успеха. Мне нужны метки оси Y, сдвинутые влево, чтобы создать PDF-файл с правильным размещением меток.

Как сместить метки оси Y влево?

ответ

7

Я попытался использовать параметр adj, но он вызывает ошибку. Как 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'))) 

enter image description here

1

ли я правильно понял, что вы хотите получить тексты charlie и больше bravo слева от границы участка? Если это так, вот один хак в архив этого, на основе модификации 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 фиксируется как 0 (выравнивание вправо), так что не может быть изменен без изменения код dotchart:

mtext(labs, side = 2, line = loffset, at = y, **adj = 0**, col = color, 
    las = 2, cex = cex, ...) 

(от dotchart)

EDIT: Вы можете сделать более того type взлом тоже. Возьмите код 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 в этот список аргументов функций. Теперь вы можете изменить выравнивание charlie и bravo путем изменения параметра adjust_ylab:

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

От ?par:

Значение прил определяет путь, в котором текстовые строки оправданной в тексте, mtext и title. Значение 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))) 

Поворот у-метки оси:

(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

Смежные вопросы