如何根据CART图(rpart.plot)[R]中节点的级别更改节点的颜色

时间:2018-09-07 03:48:26

标签: r statistics data-analysis

我想根据R上CART Plot / rpart.plot中节点的级别更改节点的颜色。所需的绘图是这样的。

enter image description here

我已经做完了,直到这一步为止,我还没有做: 1.将目标变量(Setosa,Versicolor和Virginica)的值移到图表的左侧。 2.根据需要更改节点的颜色。

enter image description here

1 个答案:

答案 0 :(得分:0)

通过“节点级别”,我假设您的意思是在节点上预测的类。 如果是这样,请按以下步骤进行操作(请参见rpart.plot package vignette图1的底部图):

library(rpart.plot)
png("aswin.png")
data(iris)
tree <- rpart(Species~., data=iris)
# may have to play with value of legend.x and legend.y for your plot
rpart.plot(tree, type=1, extra=4, legend.x=-.25, legend.y=1.2)
dev.off()

给出以下情节

plot

如果用“节点的级别”代替,则表示节点在树中的深度,则 您的第一个示例图令人困惑,因为在该图中,叶节点的深度 左侧(1.00 .00 .00)为2,但其颜色与其他颜色相同 深度为3的叶子节点。不过,以下代码将根据节点在树中的深度为其着色:

library(rpart.plot)
data(iris)
tree <- rpart(Species~., data=iris)
node.depth <- function(node.number)
{
    node.depth <- 1
    while(node.number > 1) {
        node.number <- node.number %/% 2
        node.depth <- node.depth + 1
    }
    node.depth
}
# node numbers in order they appear in tree$frame
node.numbers <- as.numeric(row.names(tree$frame))
# depth of each node in node.numbers
node.depths <- integer(length(node.numbers))
for(i in 1:length(node.depths))
    node.depths[i] <- node.depth(node.numbers[i])
colors <- topo.colors(n=max(node.depths)) # change these colors to taste
rpart.plot(tree, type=1, extra=4, 
           fallen.leaves=FALSE, nn=TRUE, # optional
           box.col=colors[node.depths])

给出以下情节

plot