减少grid.arrange中两个图之间的空间

时间:2014-10-01 17:08:32

标签: r ggplot2

我一直在争论这个问题。我想使用grid.arrange减少ggplot和表之间的空间。我查看了各种threads,在网上搜索过,尝试了各种各样的东西,但如果它们在一列中,我无法减少两个地块之间的空间。 (是的,它需要是一个饼图,尽管表格提供了更好的信息)

这是我的示例代码。

fruits <- data.frame(Type = c("Oranges", "Apples"), Quantity = c(200, 500))
g <- ggplot(fruits, aes(x = factor(1), y = Quantity, fill = Type)) + geom_bar(position = "fill", stat = "identity", width = 1) + coord_polar(theta = "y") 
g <- g  + labs(x = NULL, y = NULL) +  theme(axis.ticks = element_blank(), axis.text = element_blank(), panel.background = element_rect(fill = "white", colour = "white"), legend.position = "none")
g <- g + theme(plot.margin = unit(c(0,0,0,0), "lines"))
gtablegrob <- tableGrob(fruits, show.rownames = FALSE, gpar.coretext = gpar(fontsize = 10), par.coltext = gpar(fontsize = 10), gpar.rowtext = gpar(fontsize = 10), gpar.corefill = gpar(fill = "white", col = "white")) 
grid.arrange(g, gtablegrob, nrow = 2)

另一个类似的线程提供宽度解决方案,但我找不到高度的文档。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用grid包。请参阅下面的png输出示例。在这方面也提出了类似的问题 post

library(ggplot2)
library(grid)

# layout
vp.layout <- grid.layout(nrow=2, ncol=1, heights=unit(c(1,4), c("null","lines")),
  widths=unit(1,"null") )

png("test.png", width=200, height=350)
# start drawing
grid.newpage()
pushViewport(viewport(layout=vp.layout, name="layout"))
# plot
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1, name="plot"))
print(g, newpage=FALSE)
upViewport()
# table
pushViewport(viewport(layout.pos.row=2, layout.pos.col=1, name="table"))
pushViewport(viewport(y=unit(1.2,"npc"), name="tableloc"))
grid.draw(gtablegrob)
upViewport()
dev.off()

enter image description here

但是,由于tableGrob不允许有关字体的许多缩放选项,我建议使用pdf代替,即使初始图形相当小,也可以扩展。 Cairo包在这方面做得很好。

干杯!