2

我的问题与您可以在此处找到的 Baptiste 的答案有关:https ://stackoverflow.com/a/18667413/2072440 。

该代码完成了我想要它做的事情。我想做两个修改。首先,我想将第一列中的文本向左对齐。其次,我想更改文本的字体。

我试图编辑描述单元格背景填充的行,但这似乎不会影响字体,它只会影响框本身的位置,而不是其中的文本。

谢谢你。

4

2 回答 2

4

回顾一下网格系统是如何工作的,特别是看看?grid.text. 网格系统将其绘图对象保存在“grobs”(图形对象)中。我有点惊讶地发现,“理由”与我的预期相反(并且它参考的是中心线而不是单元格的边缘)。如果您在引用页面的 -object 上运行此代码,"g"您可能希望文本向右移动,而实际上它向左移动。

g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)] <- 
      lapply(g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)], 
             function(x) modifyList( x, list(just="right") ) ) 
grid.draw(g)

为了更改字体,您需要将“x”参数的 gp 节点设置为具有不同结构的列表(与空列表不同)。请参阅 `?gpar' 了解它接受的参数:

str(g$grobs[[6]])
List of 11
 $ label        : chr "5.1"
 $ x            :Class 'unit'  atomic [1:1] 0.5
  .. ..- attr(*, "unit")= chr "npc"
  .. ..- attr(*, "valid.unit")= int 0
 $ y            :Class 'unit'  atomic [1:1] 0.5
  .. ..- attr(*, "unit")= chr "npc"
  .. ..- attr(*, "valid.unit")= int 0
 $ just         : chr "centre"
 $ hjust        : chr "left"
 $ vjust        : NULL
 $ rot          : num 0
 $ check.overlap: logi FALSE
 $ name         : chr "GRID.text.1032"
 $ gp           : list()
  ..- attr(*, "class")= chr "gpar"
 $ vp           : NULL


g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)] <- 
           lapply(g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)], 
                function(x) modifyList( x, list(gp=list(cex=0.8) ) ) )
grid.newpage()
grid.draw(g)

或者使用 fontsize 参数:

g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)] <- 
      lapply(g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)], 
          function(x) modifyList( x, list(gp=list(fontsize=14, cex=1) ) ) )
grid.newpage()
grid.draw(g)

要更改 gtable 对象的理由,可以“调整” grob 中的$x元素:

g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)] <- 
   lapply(g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)], 
     function(z) modifyList( z, list(x=unit(0.1,"npc"), just="left") ) )
g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)] <- 
   lapply(g$grobs[c(6:8, 10:12, 14:16, 18:20, 22:24)], 
     function(x) modifyList( x, list(gp=list(fontsize=16, cex=1) ) ) )
grid.draw(g)

在此处输入图像描述

于 2013-11-12T20:21:35.990 回答
0

在 gtable 中添加了一个表函数,有更多选项

不幸的是,它真的很慢(对于网格图形来说也不足为奇)。

在此处输入图像描述

require(gtable)

d <- head(iris, 3)

core <- gtable_table(d,
                     fg.par = list(col=1:8, hjust=0, x=0.1),
                     bg.par = list(fill=9:15, alpha=0.5))

colhead <- gtable_table(t(colnames(d)), fg.par = list(fontface=4),
                        bg.par = list(col=NA))

rowhead <- gtable_table(c("", rownames(d)), fg.par = list(fontface=3),
                        bg.par = list(col=NA))

g <- rbind(colhead, core)
g <- cbind(rowhead, g)

grid.newpage()
grid.draw(g)
于 2014-06-16T11:20:31.910 回答