2014-10-30 10 views
6

Ich versuche, ein .png-Bild (Logo) auf den Kopf meines pdf Berichts von Graphen mit ggplot und gedruckt zu pdf erstellt hinzuzufügen.Add Bild (PNG-Datei) von pdf-Datei mit R erstellt Header

fand ich das folgende Beispiel, wie man ein Bild zu einem ggplot Grundstück hinzuzufügen. Aber ich schaue, um das .png Bild zum Kopf der pdf hinzuzufügen, der außerhalb des ggplot Bereichs ist.

#------------------------------------------------------------------------------- 
# Example png file 
#------------------------------------------------------------------------------- 
library(reshape2) 
library(png) 
mypngfile = download.file('http://api.altmetric.com/donut/502878_64x64.png', 
          destfile = 'mypng.png', mode = 'wb') 
mypng = readPNG('mypng.png') 

#------------------------------------------------------------------------------- 
# create example plot using mtcars data frame from ggplot 
#------------------------------------------------------------------------------- 
library(ggplot2) 
p.example = qplot(mpg, wt, data = mtcars) + 
    annotation_raster(mypng, ymin = 4.5, ymax= 5, xmin = 30, xmax = 35) 

#------------------------------------------------------------------------------- 
# print to pdf file with footnote 
#------------------------------------------------------------------------------- 
fname = "C:/temp/my report.pdf" 
pdf(fname, 10.75, 6.5, onefile=TRUE, paper="a4r") 
print(p.example) 
dev.off() 

..., die eine PDF erzeugt, der wie folgt aussieht:

enter image description here

Aber ich das Bild möchte außerhalb des ggplot Bereich zu zeigen. Oder genauer gesagt, möchte ich das Bild im Berichtskopf zeigen (in oben links) wie im folgenden Beispiel:

enter image description here

Ich fand die folgende Funktion, die verwendet werden können, um einen Text Fußnote zu erstellen, aber wasn Ich bin mir sicher, wie man es ändert, um ein .png Bild einzufügen.

makeFootnote <- function(footnoteText= format(Sys.time(), "%d %b %Y"), 
           size= .4, color= grey(.5)) 
    { 
     require(grid) 
     pushViewport(viewport()) 
     grid.text(label= footnoteText , 
       x = unit(1,"npc") - unit(12, "mm"), 
       y = unit(0.1, "mm"), 
       just=c("right", "bottom"), 
       gp=gpar(cex= size, col=color)) 
     popViewport() 
    } 

Jede Unterstützung würde sehr geschätzt werden.

+0

Haben Sie Latex oder Abschlag verwenden? Wenn ja, dann können Sie 'wallpaper' Paket in etwa so:' \ ULCornerWallPaper {1} {path/to/Logo}; \ Include {path/to/ggplot/image} ' – tonytonov

+0

@Tonytonv: Vielen Dank für Ihre Antwort. Um zu verdeutlichen, ist mein Bild kein Produkt von ggplot, sondern ein gespeichertes Bild (d. H. .png-Datei). Ich werde einen Blick auf Latex und Markdown werfen, dachte aber, dass es eine einfache Möglichkeit geben sollte, dies mit Basisgrafiken zu tun. Leider habe ich die ggplot-Route genommen, so dass ich mit der Basisgrafik nicht vertraut bin. Nochmals vielen Dank für Ihre Anregungen. – MikeTP

+0

Beachten Sie, dass die PDF-Spezifikation PNG nicht unterstützt. Daher wird Ihr PNG vor dem Einfügen in etwas anderes, wahrscheinlich JPEG, konvertiert. Ich würde Ihnen empfehlen, diese Konvertierung zu tun, um sich in ein Format, die Sie wollen, in der Qualität, die Sie wollen, so dass Sie sicher, dass die Qualität des Endprodukts sein kann. Ich würde JPEG2000 empfehlen. – Alasdair

Antwort

10

hier ist ein Vorschlag,

library(ggplot2) 
p.example = qplot(mpg, wt, data = mtcars) 

library(grid) 
library(gtable) 
ann <- rasterGrob(mypng, width=unit(1,"cm"), x = unit(0.5,"cm")) 
g <- ggplotGrob(p.example) 

g <- gtable_add_rows(g, grobHeight(ann), 0) 
g <- gtable_add_grob(g, ann, t=1, l=4) 
grid.newpage() 
grid.draw(g) 

enter image description here

+0

Dies wird das Bild über dem Titel Druck (bei 'labs Zugabe (title = ...)'), so verbraucht er auf das Grundstück mehr Platz. I.e. Das ist nicht der "Berichtsheader", nach dem das OP fragt. –