library(grid)
grid.ftable <- function(d, padding = unit(4, "mm"), ...) {
nc <- ncol(d)
nr <- nrow(d)
extended_matrix <- cbind(c("", rownames(d)), rbind(colnames(d), as.matrix(d)))
w <- apply(extended_matrix, 2, strwidth, "inch")
h <- apply(extended_matrix, 2, strheight, "inch")
widths <- apply(w, 2, max)
heights <- apply(h, 1, max)
padding <- convertUnit(padding, unitTo = "in", valueOnly = TRUE)
x <- cumsum(widths + padding) - 0.5 * padding
y <- cumsum(heights + padding) - padding
rg <- rectGrob(x = unit(x - widths/2, "in"), y = unit(1, "npc") - unit(rep(y,
each = nc + 1), "in"), width = unit(widths + padding, "in"), height = unit(heights +
padding, "in"))
tg <- textGrob(c(t(extended_matrix)), x = unit(x - widths/2, "in"), y = unit(1,
"npc") - unit(rep(y, each = nc + 1), "in"), just = "center")
g <- gTree(children = gList(rg, tg), ..., x = x, y = y, widths = widths,
heights = heights)
grid.draw(g)
invisible(g)
}
grid.newpage()
grid.ftable(head(iris, 10), gp = gpar(fill = rep(c("grey90", "grey95"), each = 2)))