График BinaryTree (ctree, party) игнорирует параметр графика par ()

Я хотел бы построить BinaryTree в верхней части графика и сделать вторую часть во второй части (внизу). Вот пример кода, показывающий, что график дерева полностью игнорирует параметры разделения, установленные par()

library("party")
### regression
airct <- ctree(Ozone ~ ., data = subset(airquality, !is.na(Ozone)))
### classification
irisct <- ctree(Species ~ .,data = iris)

par(mfrow = c(2, 1))
plot(airct)
plot(irisct)

Этот код не отображает два дерева на одном графике (странице). Как я могу это исправить?

Даже при соблюдении очень подробного ответа в этом случае не работает: графики, созданные рядом 'plot' и 'ggplot', при построении ctree игнорируются все установленные параметры.


person dmeu    schedule 27.11.2013    source источник
comment
Похоже, что методы сюжета для party используют графику grid, а не базовую графику, что означает, что все, что связано с par, совершенно неуместно. Это совершенно другая система.   -  person joran    schedule 27.11.2013
comment
... вы можете попробовать grid.arrange из пакета gridExtra.   -  person joran    schedule 27.11.2013
comment
Хорошо, я посмотрю и доложу. Не знал, что бывают разные системы! Спасибо   -  person dmeu    schedule 27.11.2013
comment
@joran, кажется, что пакет gridExtra и сюжет несовместимы   -  person dmeu    schedule 28.11.2013
comment
Это не совсем так. Это не функция, это используемая система построения графиков. В этой конкретной функции построения графика используется сеточная графика, та же система, что и в gridExtra. Проблема не в том, что они несовместимы, а в том, что метод ctree plot не был написан таким образом, чтобы удобно возвращать один объект сетки, который можно передать в grid.arrange. Это возможно, но для этого потребуется немного больше знаний о сетке, чем у меня.   -  person joran    schedule 28.11.2013


Ответы (1)


Графики в party и его последующем пакете partykit реализованы в grid, поэтому параметры графики base из par(), такие как mfrow, не работают. Помимо примечаний из комментариев, вы можете использовать grid.layout() для достижения аналогичных результатов.

Выполнение этого в простой сетке немного технически, но код не должен быть слишком сложным:

grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 1)))

pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 1))
plot(airct, newpage = FALSE)
popViewport()

pushViewport(viewport(layout.pos.row = 2, layout.pos.col = 1))
plot(irisct, newpage = FALSE)
popViewport()

партийная сетка

Причина аргумента newpage = FALSE заключается в том, что по умолчанию график отображается на новой странице, а не добавляется к потенциально существующему графику.

person Achim Zeileis    schedule 29.07.2020
comment
Лучше поздно, чем никогда! Спасибо - person dmeu; 18.08.2020