Вот рабочий пример для подражания:
Вам нужно создать нужную группировку, затем использовать ggplot
с geom_bar
.
set.seed(4543)
data(mtcars)
library(randomForest)
mtcars.rf <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE,
importance=TRUE)
imp <- varImpPlot(mtcars.rf) # let's save the varImp object
# this part just creates the data.frame for the plot part
library(dplyr)
imp <- as.data.frame(imp)
imp$varnames <- rownames(imp) # row names to column
rownames(imp) <- NULL
imp$var_categ <- rep(1:2, 5) # random var category
# this is the plot part, be sure to use reorder with the correct measure name
library(ggplot2)
ggplot(imp, aes(x=reorder(varnames, IncNodePurity), weight=IncNodePurity, fill=as.factor(var_categ))) +
geom_bar() +
scale_fill_discrete(name="Variable Group") +
ylab("IncNodePurity") +
xlab("Variable Name")
Вы можете сделать то же самое для другой меры важности, просто измените соответствующую часть графика (weight = %IncMSE
).
Обновление на основе ответа OP:
ggplot(imp, aes(x=reorder(varnames, IncNodePurity), y=IncNodePurity, color=as.factor(var_categ))) +
geom_point() +
geom_segment(aes(x=varnames,xend=varnames,y=0,yend=IncNodePurity)) +
scale_color_discrete(name="Variable Group") +
ylab("IncNodePurity") +
xlab("Variable Name") +
coord_flip()