2014-10-30 10 views
6

Sto cercando di aggiungere un'immagine .png (logo) all'intestazione del mio report in PDF dei grafici creati con ggplot e stampati in pdf.Aggiungi immagine (file png) all'intestazione del file pdf creato con R

ho trovato il seguente esempio come aggiungere un'immagine ad un ggplot trama. Ma, sto cercando di aggiungere l'immagine .png alla sua intestazione del pdf che si trova al di fuori dell'area ggplot.

#------------------------------------------------------------------------------- 
# 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() 

... che produce un pdf che assomiglia a questo:

enter image description here

Ma, vorrei l'immagine di presentarsi fuori dell'area ggplot. O, più precisamente, voglio l'immagine di presentarsi nell'intestazione del report (in alto a sinistra) come il seguente esempio:

enter image description here

ho trovato la seguente funzione che può essere utilizzata per creare una nota di testo, ma wasn assicurati come modificarlo per inserire un'immagine .png.

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() 
    } 

Qualsiasi assistenza sarebbe molto apprezzata.

+0

Usi lattice o Markdown? Se sì, allora puoi usare il pacchetto 'wallpaper' in questo modo:' \ ULCornerWallPaper {1} {path/to/logo}; \ includegraphics {path/to/ggplot/image} ' – tonytonov

+0

@Tonytonv: Grazie per la risposta. Per chiarire, la mia immagine non è un prodotto di ggplot ma piuttosto un'immagine salvata (cioè il file .png). Daremo un'occhiata a latex e markdown ma ho pensato che ci dovrebbe essere un modo semplice per farlo con la grafica di base. Sfortunatamente, ho seguito il percorso ggplot, quindi non ho familiarità con la grafica di base. Grazie ancora per i tuoi suggerimenti. – MikeTP

+0

Si noti che le specifiche PDF non supportano PNG. Pertanto il tuo PNG verrà convertito in qualcos'altro, probabilmente JPEG, prima di essere inserito. Ti consiglierei di eseguire personalmente questa conversione in un formato che desideri, nella qualità che desideri, in modo da essere sicuro della qualità del prodotto finale. Consiglierei JPEG2000. – Alasdair

risposta

10

ecco un suggerimento,

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

Questa è la stampa dell'immagine sopra il titolo (quando si aggiunge 'labs (title = ...)'), quindi consuma più spazio sulla trama. Cioè non è l'intestazione del report che l'OP chiede. –

Problemi correlati