¿Cómo puedo usar un gráfico importado con grImport como etiquetas de marca de eje en ggplot2 (usando funciones de cuadrícula)?

Espero poder combinar los poderes de importación y dibujo spiffy degrImport con el increíble poder gráfico deggplot2, pero simplemente no entiendo lagrid sistema lo suficientemente bien como para encontrar una forma elegante de lograr lo que quiero. Lo que quiero es reemplazar las etiquetas de marca del eje x en unaggplot2 gráfico con imágenes importadas usandogrImport.

Dado que ambos paquetes usangrid funciones, espero que haya una manera de usargrid.symbols() ya sea dentro de laggplot2 framework, que sería ideal, o al menos en una trama existente en un dispositivo. ¿Alguien con más conocimiento de tales cosas sabe de una manera sólida de hacer esto? O, ¿alguien puede señalarme más información para ayudarme a aprender sobre grobs, viewports, etc.? He leído elfree Capítulo del libro de gráficos R de Paul Murrel en el modelo gráfico Grid, pero no estoy lo suficientemente familiarizado con el funcionamiento interno de ggplot2 para hacer el enlace.

Mi pregunta es muy similar auna pregunta existente sobre el uso de una imagen como punto de trazado, aunque estoy más interesado en las etiquetas del eje en lugar de los puntos de trazado. Sin embargo, me gustaría saber cuán similares son las dos tareas y si esa solución se puede adaptar para este propósito. No pude resolverlo por mi cuenta.

Esta es mi primera publicación, por lo que no puedo publicar una imagen, pero este código logra algo parecido a lo que quiero. Nota: este enfoque utiliza un truco feo y feo que no es portátil y no es satisfactorio. La trama final que quiero producir tendrá facetas facet_grid), y el eje x es para un factorcon diferentes imágenes en cada eje marque, no una variable continua, por eso estoy buscando una solución más general / robusta que no requiera mucha prueba y error.

library(ggplot2)
## library(grImport)  # not needed for this example, but would be for grid.symbols()

p <- ggplot(mtcars, aes(cyl, mpg)) + stat_summary(fun.data = "mean_cl_boot")
print(p)

## Replace (in this case, overlay) x-axis tick labels with a graphic / grob
iconSize  <- 0.05
iconHt    <- 0.2 
padding   <- 0.09    # horizontal padding around axis: I found this by trial & error
tickSp    <- (1-padding)/(4*2)
downViewport("axis_h-5-3")
## I would use grid.symbols() with an imported Picture in place of grid.circle(),
## but the idea is the same: draw a shape at the ticks along the axis.
for (i in 0:(max(mtcars$cyl) - min(mtcars$cyl)) )
{
  grid.circle(x = (padding/2 + tickSp*(i*2)), y = iconHt, 
              r = iconSize*(min(mtcars$cyl)+i), gp = gpar(fill="black"))
}

upViewport()

Respuestas a la pregunta(6)

Su respuesta a la pregunta