我的问题与您可以在此处找到的 Baptiste 的答案有关:https ://stackoverflow.com/a/18667413/2072440 。
该代码完成了我想要它做的事情。我想做两个修改。首先,我想将第一列中的文本向左对齐。其次,我想更改文本的字体。
我试图编辑描述单元格背景填充的行,但这似乎不会影响字体,它只会影响框本身的位置,而不是其中的文本。
谢谢你。
回顾一下网格系统是如何工作的,特别是看看?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)
不幸的是,它真的很慢(对于网格图形来说也不足为奇)。
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)