在使用tableGrob或grid.table函数创建表格时如何对齐文本?

15

使用tableGrob或grid.table创建表格时,是否有一种方法可以对齐表格中的文本?第一列靠左,其他列靠右,而不是默认的“居中”。

谢谢!

像这样:我希望将“a”列左对齐。

a <- c("one","two","thirty five")
b <- c(1, 2, 3)
c <- c(4, 5, 6)

data <- data.frame(a,b,c)

windows()

grid.table(
  data,
  gpar.coretext=gpar(fontsize = 12),            
  gpar.coltext = gpar(fontsize = 12),            
  gpar.rowtext = gpar(fontsize = 12),            
  gpar.corefill = 
    gpar(fill = "green", alpha = 0.5, col = NA),           
  h.even.alpha = 0.5,            
  equal.width = FALSE,            
  show.rownames = FALSE,            
  show.vlines = TRUE,           
  padding.h = unit(15, "mm"),            
  padding.v = unit(8, "mm")            
) 

2
我不确定为什么这个问题会被投票关闭。虽然它缺少可重现的示例,但它并不是一个局部化的问题。 - Tyler Rinker
1
请您能否分享一下您的代码,并且做一些解释呢? - Ali
3个回答

10

从gridExtra v>=2.0.0开始,参数现在通过嵌套列表(主题)进行控制,

library(gridExtra)
library(grid)
n=5
d <- data.frame(x=rnorm(n),y=rnorm(n),z=sample(letters[1:2],n,replace=T))

m <- format(d, digits = 1, scientific=F,big.mark = ",")

mytheme <- ttheme_default(core = list(fg_params = list(hjust=0, x=0.1, 
                                                       fontsize=8)),
                          colhead = list(fg_params = list(fontsize=9, 
                                                          fontface="bold"))
                          )
g1 <- tableGrob(m, theme = mytheme, rows=NULL)
grid.newpage()
grid.draw(g1)

7

这是你想要的内容吗?在format()调用的参数中有一个core.just

require("gridExtra")

n=5
df<- data.frame(x=rnorm(n),y=rnorm(n),z=sample(letters[1:2],n,replace=T))


g1<-tableGrob(
format(df, digits = 1,
     scientific=F,big.mark = ","),
     core.just="left",
     #core.just="right",
     #col.just="right",
     gpar.coretext=gpar(fontsize=8), 
     gpar.coltext=gpar(fontsize=9, fontface='bold'), 
     show.rownames = F,
     h.even.alpha = 0,
     gpar.rowtext = gpar(col="black", cex=0.7,
                            equal.width = TRUE,
                            show.vlines = TRUE, 
                            show.hlines = TRUE,
                            separator="grey")                     
)

grid.draw(g1)

谢谢!左列正是我想要的。当我在我的数据上运行您的代码时,其他列中的输入对齐方式不同(有些居中,有些靠左)。我需要更详细地研究format()函数,以弄清楚这个问题。谢谢! - tus
1
我想使我的最后一列和最后一行加粗。请告诉我如何实现。我要么能将所有的行和列都加粗,要么就只能让第一行和最后一行加粗。http://stackoverflow.com/questions/29340345/make-first-and-last-row-of-a-dataframe-bold-using-tablegrob,请帮忙。 - Arun Raja

3
使用ttheme_minimalhjust设置文本对齐来设置“透明”背景。
theme_1 <- ttheme_minimal(core = list(fg_params = list(hjust = 0, 
                                                           x = 0.1, 
                                                    fontsize = 9)),
                          colhead = list(fg_params = list(fontsize = 12, 
                                                          fontface = "bold")))

您可以像这样将主题应用于tableGrob

gridExtra::tableGrob(df_tbl, theme = theme_1, rows=NULL)

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