我的问题与巴蒂斯特的回答有关,你可以在这里找到:https://stackoverflow.com/a/18667413/2072440。
该代码完全符合我的要求。我想做两处修改。首先,我想将第一列中的文本对齐到左侧。其次,我想改变文字的字体。
我曾尝试编辑描述单元格背景填充的行,但这似乎不会影响字体,它只影响框本身的位置而不是文本中的文本。
谢谢。
答案 0 :(得分:3)
查看网格系统的工作原理会很有用,特别是?grid.text
。网格系统将其绘图对象保存在“grobs”(图形对象)中。我有点惊讶地发现“理由”是我所期望的(并且它是参考中心线而不是单元格的边缘)。如果您在您引用的页面上的"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)
答案 1 :(得分:0)
&#39; ave added a table function in gtable,more options。
不幸的是,非常慢(对于网格图形而言并不令人惊讶)。
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)