将基础绘图和网格表格放在同一页上

16

我有两个图形(使用基础绘图)和两个数据框,希望将它们合并到一个PDF页面中。我正在使用grid.table从我的数据框中创建tableGrobs。但是,我遇到了很多困难来格式化PDF输出。特别是,我一直无法让所有对象位于同一页上。我想要右侧面板包含一个图形,左侧面板包含另一个图形,并在下方放置2个表格(横向格式)。

目前我的代码类似于以下内容:

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()

不想使用ggplot2。


2
你看过gridBase吗?它可以将基础图和网格图结合起来。 - user20650
http://stackoverflow.com/questions/34381404/how-to-create-a-pdf-in-r-with-tables-and-plots 有人可以帮忙吗?谢谢! - smit patoliya
1个回答

22

使用包gridBase可以将base图和grid对象组合在一起。

以下是一个基于您上述布局的简单示例:

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)

这给出了

输入图像描述


我想做同样的事情,但只用一个图和一个表格。但是当我运行layout(matrix(c(1,3), nrow = 1, ncol = 2, byrow = TRUE))时,出现了错误。Error in layout(matrix(c(1, 3), nrow = 1, ncol = 2, byrow = TRUE)) : layout matrix must contain at least one reference to each of the values {1 ... 3} - quant
@Quant,您需要按照从小到大的顺序说出每个布局中用数字引用的图形的位置。您只有1和3,但没有2(正如错误所述;但不是太清楚)。因此,请使用c(1,2)。 - user20650

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接