2014-03-03 3 views
6

Ich habe eine ziemlich breite Tabelle (4/3 Seitenbreite), die ich versuche, mit grid.table oder grid.arrange (via tableGrob) in eine PDF-Datei zu drucken. Die Tabelle geht über Seitengrenzen hinaus und wird abgeschnitten. Gibt es eine Möglichkeit, grid.table/grid.arrange zu erzwingen, um die Tabelle auf den Druckbereich zu skalieren?Wie passe ich eine sehr breite grid.table oder tableGrob an, um auf eine pdf-Seite zu passen?

+0

Nö, von Entwurf. Wenn die Tabelle auf die Seite skaliert wurde, müsste der Text so skaliert werden, dass er in die Zellen passt, anstatt eine feste Schriftgröße zu haben, und ich entschied mich, dies nicht zu tun. – baptiste

+1

Das ist eine Erklärung, aber kein Grund. Warum haben Sie sich entschieden, das nicht zu implementieren? Tolles Werkzeug übrigens! – rimorob

Antwort

0

Ich habe dies mit den Schriftgrößen getan. Nicht die beste Lösung (erfordert manuellen Eingriff), aber vielleicht kann jemand etwas eleganter beitragen.

termTable = tableGrob(terms, h.even.alpha=1, h.odd.alpha=1, v.even.alpha=0.5, v.odd.alpha=1, core.just='left', rows=c(), 
gpar.coretext =gpar(fontsize=8), 
gpar.coltext=gpar(fontsize=10, fontface='bold'), 
gpar.rowtext=gpar(fontsize=10, fontface='bold') 
) 
-2

Mit der neuesten Version von gridExtra, die korrekte Formatierung rimorob Antwort zu aktualisieren:

termTable = tableGrob (Begriffe theme = ttheme_default (gpar.coretext = gpar (Schriftgröße = 8), gpar .coltext = gpar (Schriftgröße = 10, fontface = 'fett'), gpar.rowtext = gpar (Schriftgröße = 10, fontface = 'fett')))

+0

Ich bezweifle es, haben Sie diesen Code ausgeführt? – baptiste

3

Es gibt einen Weg, aber es ist unklar, was wann passieren soll Der Text ist zu breit, um in einige Zellen zu passen.

Eine Möglichkeit ist es, die Breiten manuell einzustellen,

library(grid) 
library(gridExtra) 
g1 <- g2 <- tableGrob(head(iris, 10), rows=NULL) 
g2$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc") 
grid.newpage() 
gt = arrangeGrob(textGrob("page 1"), textGrob("page 2"), 
       rectGrob(gp=gpar(fill="grey98")), 
       rectGrob(gp=gpar(fill="grey98")), 
       nullGrob(), 
       layout_matrix=rbind(c(1,5,2), c(3,5,4)), 
       widths = unit(c(1,5,1),c("null", "cm", "null")), 
       heights = unit(c(1, 1),c("line", "null")), 
       vp = viewport(width=0.9, height=0.9)) 
tc = list(g1, g2) 
gt <- gtable::gtable_add_grob(gt, tc, l=c(1,3), t=2, 
           name="newgrobs") 

grid.draw(gt) 

aber natürlich mit einer festen Schriftgröße bedeutet dies, dass einiger Text geschnitten werden könnte.

enter image description here

Wahrscheinlich ist eine bessere Option Zeilenumbrüche einzuführen und/oder (leicht), um die Schriftgröße reduzieren.

g3 <- tableGrob(head(iris, 10), theme = ttheme_default(7), 
       rows=NULL, cols=gsub("\\.", "\\\n",names(iris))) 
g3$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc") 

grid.newpage() 

gt = arrangeGrob(textGrob("page 1"), textGrob("page 2"), 
       rectGrob(gp=gpar(fill="grey98")), 
       rectGrob(gp=gpar(fill="grey98")), 
       nullGrob(), 
       layout_matrix=rbind(c(1,5,2), c(3,5,4)), 
       widths = unit(c(1,1,1),c("null", "line", "null")), 
       heights = unit(c(1, 1),c("line", "null")), 
       vp = viewport(width=0.9, height=0.9)) 
tc = list(g2, g3) 
gt <- gtable::gtable_add_grob(gt, tc, l=c(1,3), t=2, 
           name="newgrobs") 

grid.draw(gt) 

enter image description here

Verwandte Themen