Я строю деревья решений, построенные с partykit
в ggparty
, и изо всех сил пытаюсь повернуть ветви дерева вокруг узлов ветвей - например, изменить порядок их отображения. Я надеюсь построить дерево с ветвями, отображаемыми в порядке, соответствующем значениям терминальных узлов. Это было бы в некоторой степени сравнимо с использованием reorder()
в стандартном ggplot
geom.
Например, приведенное ниже использование данных WeatherPlay из виньетки ggparty позволяет ветвям этого дерева вращаться так, чтобы графики конечного узла geom_bar () отображались в порядке возрастания пропорции «да»? В данном случае это будет означать «солнечный», затем «дождливый», затем «пасмурный».
Для моего проекта у меня будут терминальные узлы с коробочными диаграммами, но я предполагаю, что метод для вращающихся ветвей является модульным и может быть перепрофилирован.
## Playing with default WeatherPlay data as demonstrated in ggparty examples here:
# https://cran.r-project.org/web/packages/ggparty/vignettes/ggparty-graphic-partying.html
library(partykit)
library(ggparty)
data("WeatherPlay", package = "partykit")
sp_o <- partysplit(1L, index = 1:3)
sp_h <- partysplit(3L, breaks = 75)
sp_w <- partysplit(4L, index = 1:2)
pn <- partynode(1L, split = sp_o, kids = list(
partynode(2L, split = sp_h, kids = list(
partynode(3L, info = "yes"),
partynode(4L, info = "no"))),
partynode(5L, info = "yes"),
partynode(6L, split = sp_w, kids = list(
partynode(7L, info = "yes"),
partynode(8L, info = "no")))))
py <- party(pn, WeatherPlay)
# Node plots
n1 <- partynode(id = 1L, split = sp_o, kids = lapply(2L:4L, partynode))
t2 <- party(n1,
data = WeatherPlay,
fitted = data.frame(
"(fitted)" = fitted_node(n1, data = WeatherPlay),
"(response)" = WeatherPlay$play,
check.names = FALSE),
terms = terms(play ~ ., data = WeatherPlay)
)
t2 <- as.constparty(t2)
# Plot tree
ggparty(t2) +
geom_edge() +
geom_edge_label() +
geom_node_splitvar() +
geom_node_plot(gglist = list(geom_bar(aes(x = "", fill = play),
position = position_fill()),
xlab("play")),
# draw only one label for each axis
shared_axis_labels = TRUE,
# draw line between tree and legend
legend_separator = TRUE
)
![enter image description here](https://i.stack.imgur.com/cDjpG.png)