2012-08-02 10 views
27

Ich habe vor kurzem begonnen, die grid.table Funktion aus dem gridExtra Paket zu verwenden, um tabellarische Daten in png Bilddateien für die Verwendung im Web zu verwandeln. Ich war bisher sehr erfreut darüber, dass es eine sehr gut aussehende Ausgabe standardmäßig erzeugt, ähnlich wie eine ggplot2 für Tabellen. Wie die Person, die diese Frage asked würde ich gerne sehen, die Möglichkeit, die Begründung für einzelne Spalten angeben, aber das wäre Sahnehäubchen auf was ist ein bereits mehr Kuchen.Hinzufügen von Text zu einem grid.table Plot

Meine Frage ist, ob es möglich ist, Text um eine grid.table hinzuzufügen, so dass ich geplottete Tabellen einen Titel und eine Fußnote geben kann. Es scheint mir, dass dies machbar sein sollte, aber ich weiß nicht genug über Grid-Grafiken, um herausfinden zu können, wie man Grob-Tabs zu Grob hinzufügen kann. Zum Beispiel dieser Code:

require(gridExtra) 

mydf <- data.frame(Item = c('Item 1','Item 2','Item 3'), 
                    Value = c(10,15,20), check.names = FALSE) 
grid.table(mydf, 
      gpar.coretext=gpar(fontsize = 16), 
      gpar.coltext = gpar(fontsize = 16), 
      gpar.rowtext = gpar(fontsize = 16), 
      gpar.corefill = gpar(fill = "blue", alpha = 0.5, col = NA), 
      h.even.alpha = 0.5, 
      equal.width = FALSE, 
      show.rownames = FALSE, 
      show.vlines = TRUE, 
      padding.h = unit(15, "mm"), 
      padding.v = unit(8, "mm") 
      ) 

erzeugt dieses Grundstück:

enter image description here

wenn ich würde wirklich in der Lage sein mögen so etwas wie die folgenden im Code zu tun, anstatt durch die Bearbeitung des Bildes mit einem anderen Anwendung:

enter image description here

Antwort

41

um Text am Tisch platzieren Sie wollen die Registerkarte bewerten le Größe zuerst,

library(gridExtra) 
d <- head(iris) 
table <- tableGrob(d) 

grid.newpage() 
h <- grobHeight(table) 
w <- grobWidth(table) 
title <- textGrob("Title", y=unit(0.5,"npc") + 0.5*h, 
        vjust=0, gp=gpar(fontsize=20)) 
footnote <- textGrob("footnote", 
        x=unit(0.5,"npc") - 0.5*w, 
        y=unit(0.5,"npc") - 0.5*h, 
        vjust=1, hjust=0,gp=gpar(fontface="italic")) 
gt <- gTree(children=gList(table, title, footnote)) 
grid.draw(gt) 

Edit (17/07/2015) Mit gridExtra> = 2.0.0 ist dieser Ansatz nicht mehr geeignet. tableGrob gibt jetzt eine gtable zurück, die einfacher angepasst werden kann.

library(gridExtra) 
d <- head(iris) 
table <- tableGrob(d) 

library(grid) 
library(gtable) 

title <- textGrob("Title",gp=gpar(fontsize=50)) 
footnote <- textGrob("footnote", x=0, hjust=0, 
        gp=gpar(fontface="italic")) 

padding <- unit(0.5,"line") 
table <- gtable_add_rows(table, 
         heights = grobHeight(title) + padding, 
         pos = 0) 
table <- gtable_add_rows(table, 
         heights = grobHeight(footnote)+ padding) 
table <- gtable_add_grob(table, list(title, footnote), 
         t=c(1, nrow(table)), l=c(1,2), 
         r=ncol(table)) 
grid.newpage() 
grid.draw(table) 
+0

Danke, das das Problem löst, und ich lernte einige Dinge aus, dass. Ich denke, ich kann auch die Tabelle und Text-Grobs in Ansichtsfenstern und so weiter verwenden? – SlowLearner

+0

sicher, können Sie eine vp zu dem gTree geben – baptiste

+0

es funktioniert, aber die Farbe der Tabelle ist nach der Verwendung dieser. Ich kann nur zum Titel färben. – lulumink

2

Wenn Sie nur den Titel (keine Fußnote) wollen, hier ist eine vereinfachte Version von @ Baptistes Beispiel:

title <- textGrob("Title", gp = gpar(fontsize = 50)) 
padding <- unit(0.5,"line") 
table <- gtable_add_rows(
    table, heights = grobHeight(title) + padding, pos = 0 
) 
table <- gtable_add_grob(
    table, list(title), 
    t = 1, l = 1, r = ncol(table) 
) 
grid.newpage() 
grid.draw(table) 
Verwandte Themen