Search code examples
rgmisc

Render multiple transition plots on one page (Gmisc)


I wonder if there is a way to arrange multiple of the nice transition plots of the Gmisc package on one page (e.g. two next to each other or two-by-two)? I tried various common approaches (e.g. par(mfrow = c(2,2)) and grid.arrange()) but was not successful thus far. I would appreciate any help. Thanks!

library(Gmisc)

data.1 <- data.frame(source = c("A", "A", "A", "B", "B", "C", "C"),
                     target = c("A", "B", "C", "B", "C", "C", "C"))
data.2 <- data.frame(source = c("D", "D", "E", "E", "E", "E", "F"),
                     target = c("D", "E", "D", "E", "F", "F", "F"))

transitions.1 <- getRefClass("Transition")$new(table(data.1$source, data.1$target), label = c("Before", "After"))
transitions.2 <- getRefClass("Transition")$new(table(data.2$source, data.2$target), label = c("Before", "After"))

# wish to render transition 1 and transition 2 next to each other
transitions.1$render()
transitions.2$render()

Solution

  • This was actually a bug prior to the 1.9 version (uploading to CRAN when writing this, available now from GitHub). What you need to do is use the grid::viewport system:

    library(grid)
    grid.newpage()
    pushViewport(viewport(name = "basevp", layout = grid.layout(nrow=1, ncol=2)))
    pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 1))
    transitions.1$render(new_page = FALSE)
    popViewport()
    pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 2))
    transitions.2$render(new_page = FALSE)
    

    enter image description here