我的问题与巴普蒂斯特的回答有关,你可以在这里找到答案:https://stackoverflow.com/a/18667413/2072440。
这段代码能做我想做的事。我想作两项修改。首先,我想将第一栏中的文本与左边对齐。第二,我想改变文字的字体。
我试图编辑描述单元格背景填充的行,但它似乎不会影响字体,它只会影响框本身的位置,而不会影响它们中的文本。
谢谢。
发布于 2013-11-12 20:21:35
检查网格系统是如何工作的,特别是查看?grid.text,这将是非常有用的。网格系统将其绘图对象保存在“grobs”(图形对象)中。令我感到惊讶的是,“正当理由”与我所期望的完全相反(而且它引用的是中心线,而不是单元格的边缘)。如果您从引用的页面在"g"-object上运行这段代码,您可能希望文本向右移动,而它实际上会向左移动。
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)

发布于 2014-06-16 11:20:31
不幸的是,它真的很慢(对于网格图形来说也不足为奇)。

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)https://stackoverflow.com/questions/19934523
复制相似问题