Search code examples
rpdfr-grid

Arrange base plots and grid.tables on the same page


I have 2 plots (created using Base graphics) and 2 data frames that I would like to combine onto one sheet in a PDF. I'm using grid.table to create a tableGrobs from my data frames. I'm having a lot of difficulty formatting the PDF output. In particular, I've been unsuccessful keeping all the objects on the same page. I want the right pannel to contain one graph, and the left panel to contain the other graph, and 2 tables below (landscape format).

Currently my code is something like the following:

library('gridExtra')

pdf("Rplots.pdf", paper = "USr", height = 8.5, width = 11)

layout(matrix(c(1,3, 2,3, 4,3), nrow = 3, ncol = 2, byrow = TRUE))

plot(myPlot1)    
grid.table(df1)    
plot(myPlot2)
grid.table(df2)

dev.off()

I do not want to use ggplot2.


Solution

  • To combine base plots and grid objects the package gridBase is useful.

    A rough worked example base on your layout above

    library(grid)
    library(gridBase)
    library(gridExtra)
    
    
    layout(matrix(c(1,3, 2,3, 4,3), nrow = 3, ncol = 2, byrow = TRUE))
    
    # First base plot
    plot(1:10)
    
    # second base plot 
    frame()
    # Grid regions of current base plot (ie from frame)
    vps <- baseViewports()
    pushViewport(vps$inner, vps$figure, vps$plot)
    # Table grob
    grob <-  tableGrob(iris[1:2,1:2])  
    grid.draw(grob)
    
    popViewport(3)
    
    # third base plot
    plot(1:10)
    
    # fourth
    frame()
    vps <- baseViewports()
    pushViewport(vps$inner, vps$figure, vps$plot)  
    grid.draw(grob)
    popViewport(3)
    

    Which gives

    enter image description here