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
答案 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中,该版本在您的原始帖子之后发布。