Superponer datos en la imagen de fondo

Hace poco descubrí lo fácil que era usar una imagen de fondo y datos de mapas encima de Tableau Public. Aquí está el proceso desde su sitio web . Como puede ver, es bastante sencillo, y simplemente le dice al software qué imagen quiere usar y cómo definir las coordenadas.

¿Es el proceso tan sencillo en R? ¿Cuál sería el mejor enfoque?

JPEG

Para imágenes jpeg, puede usar read.jpeg() desde el paquete rimage .

p.ej :

 anImage < - read.jpeg("anImage.jpeg") plot(anImage) points(my.x,my.y,col="red") ... 

Al establecer par (nuevo = T) antes del siguiente comando de trazado, puede construir trazados completos sobre una imagen de fondo. (ver ?par y más abajo)

PNG

Imágenes PNG que puedes cargar usando readPNG desde el paquete png . Con readPNG , necesita el comando rasterImage para trazar (consulte también los archivos de ayuda). En Windows, uno tiene que deshacerse del canal alfa, ya que Windows no puede hacer frente a las alfas por píxel hasta ahora. Simon Urbanek fue tan amable de señalar esta solución:

 img < - readPNG(system.file("img", "Rlogo.png", package="png")) r = as.raster(img[,,1:3]) r[img[,,4] == 0] = "white" plot(1:2,type="n") rasterImage(r,1,1,2,2) 

GIF

Para archivos gif, puede usar read.gif de caTools . El problema es que esto está rotando la matriz, por lo que debe ajustarlo:

 Gif < - read.gif("http://www.openbsd.org/art/puffy/ppuf600X544.gif") n <- dim(Gif$image) image(t(Gif$image)[n[2]:1,n[1]:1],col=Gif$col,axes=F) 

Para trazar sobre esta imagen, debe establecer el par correctamente, por ejemplo:

 image(t(Gif$image)[n[2]:1,n[1]:1],col=Gif$col,axes=F) op < - par(new=T) plot(1:100,new=T) par(op) 

No estoy seguro de que parte de lo que quieres hacer sea lo que se llama “georreferenciación”: el acto de tomar una imagen sin información de coordenadas y definir con precisión cómo se mapea en el mundo real.

Para esto, usaría Quantum GIS, un paquete GIS de código abierto y gratuito. Cargue la imagen como una capa ráster y luego inicie el plugin de georreferenciación. Haga clic en algunos puntos conocidos en su imagen e ingrese las coordenadas lat-long del mundo real de esos puntos. Una vez que tenga suficientes de ellos, el georreferenciador resolverá cómo estirar y cambiar su imagen a su lugar real en el planeta, y escribir un ‘archivo mundial’.

Entonces con eso R debería poder leerlo usando readGDAL del paquete rgdal, y posiblemente también el paquete raster.

Para una imagen JPEG, puede usar la biblioteca jpeg y la biblioteca ggplot2 .

Por lo general, me pareció útil tener el eje graduado en píxeles y el eje vertical positivo en dirección descendente y la imagen manteniendo su relación de aspecto original. De modo que puedo alimentar R directamente con la salida producida por el algoritmo de visión por computadora, por ejemplo, el algoritmo puede detectar el orificio de bala y extraer las coordenadas del agujero de una imagen objective de disparo y luego R puede trazar un histogtwig 2D utilizando la imagen objective como fondo.

Mi código está basado en el código de baptiste encontrado en https://stackoverflow.com/a/16418186/15485

 library(ggplot2) library(jpeg) img < - readJPEG("bersaglio.jpg") # http://www.tiropratico.com/bersagli/forme/avancarica.jpg h<-dim(img)[1] # image height w<-dim(img)[2] # image width df<-data.frame(x=rnorm(100000,w/1.99,w/100),y=rnorm(100000,h/2.01,h/97)) plot(ggplot(df, aes(x,y)) + annotation_custom(grid::rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), 0, w, 0, -h) + # The minus is needed to get the y scale reversed scale_x_continuous(expand=c(0,0),limits=c(0,w)) + scale_y_reverse(expand=c(0,0),limits=c(h,0)) + # The y scale is reversed because in image the vertical positive direction is typically downward # Also note the limits where h>0 is the first parameter. coord_equal() + # To keep the aspect ratio of the image. stat_bin2d(binwidth=2,aes(fill = ..density..)) + scale_fill_gradient(low = "dark red", high = "red") ) 

enter image description here

 df< -data.frame(x=rnorm(100000,100,w/70),y=rnorm(100000,400,h/100)) plot(ggplot(df, aes(x,y)) + annotation_custom(grid::rasterGrob(img, width=unit(1,"npc"), height=unit(1,"npc")), 0, w, 0, -h) + # The minus is needed to get the y scale reversed scale_x_continuous(expand=c(0,0),limits=c(0,w)) + scale_y_reverse(expand=c(0,0),limits=c(h,0)) + # The y scale is reversed because in image the vertical positive direction is typically downward # Also note the limits where h>0 is the first parameter. coord_equal() + # To keep the aspect ratio of the image. stat_bin2d(binwidth=2,aes(fill = ..density..)) + scale_fill_gradient(low = "dark red", high = "red") ) 

enter image description here