Как поместить две сетки «vcd» на один график?

Я хотел бы разместить две (несколько нестандартные) сеточные графики на одном графике в R.

Пытаться:

require(vcd)
mosaic(Titanic)
assoc(Titanic)

Проблема в том, что это не lattice графики, и, насколько мне известно, они не сопровождаются аргументом layout или чем-то подобным. И поскольку это grid графы, они невосприимчивы к base графическим трюкам, таким как par(mfrow=c(1,2)).

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

Я уже пробовал предложения в Как строить графики сетки на одном и том же страницу?, но, похоже, они не работают для vcd графиков. В конечном итоге я хотел бы получить что-то похожее на:

введите здесь описание изображения


person landroni    schedule 26.06.2015    source источник
comment
Кажется, что ни один из сюжетов не возвращает какой-либо объект ... и я не понимаю, как захватить гробы, глядя на grid.ls() . Вы можете злоупотреблять ответом здесь ... mosaic(Titanic) ; m <- grid.grab() ; assoc(Titanic) ; a <- grid.grab(); grid.newpage() ;grid.arrange(m, a, ncol=2)   -  person user20650    schedule 26.06.2015
comment
@ user20650: Вы должны опубликовать как ответ.   -  person IRTFM    schedule 26.06.2015
comment
спасибо @BondedDust; я ожидал, что будет более краткий подход ... но, возможно, это быстрое средство для достижения цели   -  person user20650    schedule 26.06.2015
comment
вы можете передать аргумент return_grob = TRUE в мозаику, но это, похоже, все равно использует grid.grab.   -  person baptiste    schedule 28.06.2015
comment
@baptiste Не могли бы вы опубликовать этот подход в качестве ответа?   -  person landroni    schedule 28.06.2015


Ответы (3)


Кажется, что ни один из сюжетов не возвращает какой-либо объект, и я не понимаю, как захватить гробы, глядя на grid.ls(). Итак, используя идею из этого ответа

library(vcd) 
library(gridGraphics)
library(gridExtra)

mosaic(Titanic)  
m <- grid.grab()  

assoc(Titanic)  
a <- grid.grab()

grid.newpage()
grid.arrange(m, a, ncol=2)

введите здесь описание изображения

Я уверен, что будет более сеточный подход, но...

person user20650    schedule 26.06.2015
comment
Я не уверен, что подход, подобный сетке, осуществим. Ни одна из этих функций не возвращает объект сетки, хотя есть опция newpage=FALSE для подавления одного из препятствий к их использованию в качестве функций сетки. Кроме того, я терпел неудачу в своих усилиях, поэтому я подумал, что вы должны подойти и потребовать похвалы. - person IRTFM; 26.06.2015
comment
Спасибо! Это делает то, что я хотел. - person landroni; 26.06.2015

Что-то похожее на решение в Как строить графики сетки на одном и том же страницу? также можно использовать для отображения vcd. Разница в том, что вам нужно установить newpage = FALSE (чтобы предотвратить открытие нового дисплея) и вам нужно самостоятельно нажать и вытолкнуть область просмотра (что может быть удобно при повторном использовании vcd графики в более сложных дисплеях, таких как partykit деревья).

Отображение мозаики и ассоциации для данных Titanic можно визуализировать следующим образом:

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

pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1))
mosaic(Titanic, newpage = FALSE)
popViewport()

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

уступающий

Отображение мозаики и ассоциации

person Achim Zeileis    schedule 27.06.2015

Другой вариант — функция mplot() vcd (подробнее см. ?vcd::mplot):

library(vcd)
mplot(
  mosaic(Titanic, return_grob = TRUE),
  assoc(Titanic, return_grob = TRUE),
  keep_aspect_ratio = FALSE
)

выход

person doncherry    schedule 26.10.2016