R tableGrob change format of row

前端 未结 3 1810
感动是毒
感动是毒 2021-01-03 13:31

I have some relatively simple code to create a table for printing to a PDF:

library(gridExtra)
df <- head(iris)
tableGrob(df, gp = gpar(fontsize = 8), row         


        
相关标签:
3条回答
  • 2021-01-03 14:06

    One option is to create a new table, and merge the two together,

    g1 <- tableGrob(iris[1:4, 1:3], rows=NULL)
    g2 <- tableGrob(iris[1, 1:3], rows=NULL, # can't have empty content
                    cols=as.character(iris[4, 1:3])) # use 4th row as header
    
    grid.newpage()
    g <- rbind(g1[-nrow(g1), ], g2[1,])
    grid.draw(g)
    

    0 讨论(0)
  • 2021-01-03 14:06

    You could edit the grobs, as suggested in the vignette

    library(gridExtra)
    g <- tableGrob(iris[1:4, 1:3])
    
    edit_cell <- function(table, row, col, name="core-fg", ...){
      l <- table$layout
      ids <- which(l$t %in% row & l$l %in% col & l$name==name)
      for (id in ids){
      newgrob <- editGrob(table$grobs[id][[1]], ...)
      table$grobs[id][[1]] <- newgrob
      }
      table
    }
    
    g <- edit_cell(g, nrow(g), seq_len(ncol(g)), "core-fg", 
                   gp=gpar(fontsize=15, fontface="bold"))
    g <- edit_cell(g, nrow(g), seq_len(ncol(g)), "core-bg", 
                   gp=gpar(fill="darkolivegreen1", 
                           col = "darkolivegreen4", lwd=5))
    
    grid.newpage()
    grid.draw(g)
    

    0 讨论(0)
  • 2021-01-03 14:27

    I've just remembered that the formatting parameters get recycled (but only with a sane logic after version >=2.2.0), so you can do,

    library(gridExtra)
    library(grid)
    t1 <- ttheme_default(core=list(
            fg_params=list(fontface=c(rep("plain", 4), "bold.italic")),
            bg_params = list(fill=c(rep(c("grey95", "grey90"),
                                        length.out=4), "#6BAED6"))
            ))
    
    grid.newpage()
    grid.table(iris[1:5, 1:3], theme=t1)
    

    0 讨论(0)
提交回复
热议问题