rpart树中的颜色节点

时间:2015-08-05 15:13:47

标签: r plot rpart

box.col()着色如何为prp树图工作?我想使用基于任何3个年龄类别或基于任何3个节点数组的三种颜色对终端节点进行着色(对于我的实际数据,两者一起增加,因此基于结果值或节点数的着色将起作用)。

我已经阅读了包文档和插图,但仍然不知道从哪里开始,即使只是两组。以下是我试图控制2种颜色的两个例子。第一个似乎是随机的,第二个,虽然它显然会根据拟合的节点值着色,但根本不会输出任何颜色。

library(rpart)
library(rpart.plot)

data(ptitanic)

tree <- rpart(age ~ ., data = ptitanic)

prp(tree, extra = 1, faclen=0,  nn = T,
    box.col=c("green", "red")) #apparently random colouring?

prp(tree, extra = 1, faclen=0, nn = T,
    box.col=c("green", "red")[tree$frame$yval]) #no colour

2 个答案:

答案 0 :(得分:2)

结果指定条件box.col语句与指定语句与其他图形有条件地着色没有什么不同,我发现这篇文章在提出解决方案时很有用:Using Conditional Statements to Change the Color of Data Points

关键是InvokeRepeating提供了一个可用于帮助指定条件语句的数据框(参见rpart documentation)。 tree$frame变量保存预测的兴趣结果(在这种情况下为年龄),可用于指示着色。

以下是2种颜色和3种颜色的颜色解决方案:

yval

节点编号未存储在# 2 colours # use ifelse: if predicted age > 30 colour red, else colour green prp(tree, extra = 1, faclen=0, nn = T, box.col=ifelse(tree$frame$yval > 30, 'red', 'green')) # 3 colours # use findInterval: if age [0,20) then green; if age [20,30) then orange, else red prp(tree, extra = 1, faclen=0, nn = T, box.col=c("green", "orange", "red")[findInterval(tree$frame$yval, v = c(0,20,30))]) 中,因此我不确定如何根据节点编号对框进行着色,但出于我的目的,上述解决方案将起作用。

答案 1 :(得分:0)

使用box.palette参数:

library(rpart.plot)
data(ptitanic)
tree <- rpart(age ~ ., data = ptitanic)
prp(tree, extra=1, faclen=0,  nn=T, box.palette=c("green", "red"))
# examples using built-in palettes
prp(tree, extra=1, faclen=0,  nn=T, box.palette="GnRd")
prp(tree, extra=1, faclen=0,  nn=T, box.palette="Blues")

box.palette参数已添加到rpart.plot版本2.0中,该版本在您的原始帖子之后发布。