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
)