2013-11-12 5 views
2

Мой вопрос связан с ответом Баптиста, который вы можете найти здесь: https://stackoverflow.com/a/18667413/2072440.Выравнивание текста и размер шрифта в gtable

Этот код делает очень то, что я хочу. Я хотел бы сделать две модификации. Во-первых, я хотел бы выровнять текст в первом столбце слева. Во-вторых, я хотел бы изменить шрифт текста.

Я попытался отредактировать строку, которая описывает заполнение для фона ячеек, но это, похоже, не влияет на шрифт, и это влияет только на положение самих ящиков, а не на текст в них.

спасибо.

ответ

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) 

Чтобы изменить шрифт, который Вы должны были бы установить Г.П. узла «х» аргумент быть список с различной структурой (иной, чем просто пустой список). См `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 объекта можно „настроить“ на $x элемент в Grob :

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) 

enter image description here

+0

Он отлично работает. Большое спасибо за тщательный ответ. –

0

Я added a table function in gtable, с more options.

Это очень медленно, к сожалению (и неудивительно для сетки графики).

enter image description here

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) 
Смежные вопросы