Salida de 538-ify ggplot: justificando pictureGrob en gráficos de cuadrícula R

Estoy tratando de escribir una pequeña función de utilidad que anotará mis tramasEstilo Reuben Fischer-Baum con un pequeño logotipo y una URL en la parte inferior, por ejemplo:

He descubierto cómo cargar un archivo postscript en R; está justificando la imagen en la parte inferior de la trama que me está volviendo loco. No puedo obtener elpictureGrob a la izquierda justificar; en el mejor de los casos, puedo hacer que se centre en el lado izquierdo de mi trama, pero la mitad de mi imagen se corta, como este ejemplo reproducible a continuación:

Jugueteando con elwidth la configuración puede aproximarse a lo que estoy tratando de lograr limitando el búfer alrededor delpictureGrob, pero lo que yoDe Verdad querer, creo, es justificar a la izquierdaimagen en sí dentro de su ventana gráfica O haga que la ventana gráfica se ajuste completamente a la imagen. [Paul Murrell hace algo similar enpags. 162 del libro de cuadrícula, pero eso parece depender de unstringWidth función de utilidad que no tiene socio para imágenes (?)]

He hecho una pregunta similar sobremesas gridextra, pero como Baptiste comenta allí, 'La justificación siempre es bastante difícil de manejar en la cuadrícula'.

Cualquier ayuda es apreciada; Un puntero a cualquier discusión conceptual de lo que está sucediendo con la justificación en la cuadrícula sería espectacular.

Código reproducible (tenga en cuenta quegrImport requiere una instalación de ghostscript):

require(grImport)
require(ggplot2)
require(gridExtra)

#nb: you also need ghostscript installed on your machine.
#I had a hell of a time getting ghostscript to work properly.  
#From the bowels of a R mailing list, I found this helpful tip 
#from Paul Murrell himself:
#https://www.mail-archive.com/[email protected]/msg203180.html

#YMMV, THIS WORKED ON MY MACHINE:
  #gswin <- shortPathName("C:/Program Files/gs/gs9.15/bin/gswin64c.exe")
  #Sys.setenv(R_GSCMD = gswin)


#get a fun little moon
PostScriptTrace(
  file=file.path(system.file(package = "RGraphics"), "extra", "comic_moon.ps"),
  outfilename="comic_moon.xml")
moon <- readPicture("comic_moon.xml")


annotate_me <- function(
  plot_to_annotate,
  some_picture,
  bg_color="gray30"
) {

  #make a gTree
  foo <- gTree(
    children=gList(
      rectGrob(gp=gpar(fill=bg_color)),
      pictureGrob(
        picture=some_picture,
        x=0, y=0.5,
        #width=?
      )
    )
  )

  final <- arrangeGrob(
    plot_to_annotate, foo,
    nrow=2, heights=c(19,1)
  )

  return(final)
}


annotate_me(
  plot_to_annotate=qplot(mpg, data=mtcars),
  some_picture=moon
)

Respuestas a la pregunta(1)

Su respuesta a la pregunta