簡體   English   中英

Rpart樹中的顏色節點

[英]Color nodes in rpart tree

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

事實證明,指定條件box.col語句與指定語句以有條件地為其他圖形着色沒有什么不同,我發現這篇文章對提出解決方案很有用: 使用條件語句更改數據點的顏色

關鍵是tree$frame給出一個可用於幫助指定條件語句的數據tree$frame (請參閱rpart文檔 )。 yval變量保留了預期的目標結果(在這種情況下為年齡),可用於指示顏色。

以下是2種顏色和3種顏色的解決方案:

# 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))])

節點號未存儲在tree$frame因此我不確定如何根據節點號為框上色,但是出於我的目的,上述解決方案將起作用。

使用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中添加的,該版本在您的原始帖子之后發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM