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

阿斯温·坎德拉(Aswin Candra)

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

在此处输入图片说明

在完成此步骤之前,我尚未完成:1.将目标变量(Setosa,Versicolor和Virginica)的值移到图表的左侧。2.根据需要更改节点的颜色。

在此处输入图片说明

斯蒂芬·米尔伯罗

通过“节点级别”,我假设您的意思是在节点上预测的类。如果是这样,请按以下步骤进行操作(请参见rpart.plot包小插图图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()

给出以下情节

情节

如果用“节点的级别”代替,则表示树中节点的深度,则第一个示例图形令人困惑,因为在该图中左侧叶节点的深度(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])

给出以下情节

情节

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章