Цветовые узлы в rpart.plot по списку цветов, соответствующих узлам - PullRequest
3 голосов
/ 17 июня 2019

В функции rpart.plot (из пакета rpart.plot, расширение для пакета rpart) есть аргумент box.col, который управляет цветом узлов в дереве. Как установить его так, чтобы он окрашивал узлы так, чтобы узлы одного и того же ответа окрашивались одинаково?

Я пробовал несколько различных вариантов с аргументом box.col, например, используя cols в качестве факторов, которые игнорируют выбранные цвета. Самое близкое, что у меня есть, показано ниже


set.seed(1);x <- runif(100)
set.seed(2);y <- runif(100)

data <- matrix(c(x,y),ncol=2)
fact <- as.numeric(factor(--((x > 0.5 & y < 0.5))))
fact[x < 0.1] = 3
cols <- (c("grey80", "red", "blue"))


plot(data, col=fact)

t1 <- rpart(factor(fact) ~ data)
rpart.plot(t1, type=5, extra=2,
           box.col=cols)

Example failed plot Я ожидаю / хочу, чтобы каждый соответствующий узел ответа был окрашен одинаково. В данном коде я ожидал бы, что узлы «1» будут серыми80, «2» - красными, а «3» - голубыми. Приведенный выше график показывает, что на самом деле происходит, что не помогает.

Как уже упоминалось в первой части, как мне настроить его так, чтобы он окрашивал узлы так, чтобы узлы одного и того же ответа окрашивались одинаково?

1 Ответ

2 голосов
/ 17 июня 2019

как насчет использования box.pallete атрибутов

rpart.plot(t1, type=5, extra=2,
           box.palette = list('grey80','red','blue'))

enter image description here

Для более подробного объяснения, если вы установите столбцы как factor в rpart.plot столбцы будут назначаться каждому узлу последовательно.

Например,

>t1

1) root 100 29 1 (0.7100000 0.2200000 0.0700000)  # --> 'grey80'
   2) data1>=0.1037049 93 22 1 (0.7634409 0.2365591 0.0000000)  # --> 'red'
     4) data1< 0.5413779 47  0 1 (1.0000000 0.0000000 0.0000000) * # --> 'blue'
     5) data1>=0.5413779 46 22 1 (0.5217391 0.4782609 0.0000000)  # --> 'grey80'
      10) data2>=0.4849942 24  0 1 (1.0000000 0.0000000 0.0000000) * # --> 'red'
      11) data2< 0.4849942 22  0 2 (0.0000000 1.0000000 0.0000000) *# --> 'blue'
   3) data1< 0.1037049 7  0 3 (0.0000000 0.0000000 1.0000000) * # --> 'grey 80'
...