python - propiedades - Colocación de imágenes personalizadas en una ventana de trazado: como marcadores de datos personalizados o para anotar esos marcadores
propiedades de label en python (5)
Tengo un conjunto de imágenes png de 150x150px y un conjunto de coordenadas (x, y) a las que corresponden. ¿Hay alguna manera de trazar las imágenes en una cuadrícula? Por ejemplo, estoy buscando una solución R o Python para crear algo como lo siguiente:
En R, se leyó en la ayuda (rasterImage):
require(grDevices)
#set up the plot region:
op <- par(bg = "thistle") <h>
plot(c(100, 250), c(300, 450), type = "n", xlab="", ylab="")
image <- as.raster(matrix(0:1, ncol=5, nrow=3))
rasterImage(image, 100, 300, 150, 350, interpolate=FALSE)
rasterImage(image, 100, 400, 150, 450)
rasterImage(image, 200, 300, 200 + xinch(.5), 300 + yinch(.3), interpolate=FALSE)
rasterImage(image, 200, 400, 250, 450, angle=15, interpolate=FALSE)
par(op)
.... es un buen ejemplo.
También en R puede usar las funciones my.symbols y ms.image en el paquete TeachingDemos.
Una forma de hacerlo en R (2.11.0 y superior):
library("png")
# read a sample file (R logo)
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
# img2 <- readPNG(system.file("img", "Rlogo.png", package="png"))
img2 <- readPNG("hand.png", TRUE) # here import a different image
if (exists("rasterImage")) {
plot(1:1000, type=''n'')
rasterImage(img, 100, 100, 200, 200)
rasterImage(img2, 300, 300, 400, 400)
}
vea? readPNG y? rasterImage para más detalles.
Usted crea un cuadro delimitador al crear una instancia de AnnotationBbox --una vez para cada imagen que desea mostrar; la imagen y sus coordenadas se pasan al constructor.
El código es obviamente repetitivo para las dos imágenes, por lo que una vez que ese bloque se pone en una función, no es tan largo como parece aquí.
import matplotlib.pyplot as PLT
from matplotlib.offsetbox import AnnotationBbox, OffsetImage
from matplotlib._png import read_png
fig = PLT.gcf()
fig.clf()
ax = PLT.subplot(111)
# add a first image
arr_hand = read_png(''/path/to/this/image.png'')
imagebox = OffsetImage(arr_hand, zoom=.1)
xy = [0.25, 0.45] # coordinates to position this image
ab = AnnotationBbox(imagebox, xy,
xybox=(30., -30.),
xycoords=''data'',
boxcoords="offset points")
ax.add_artist(ab)
# add second image
arr_vic = read_png(''/path/to/this/image2.png'')
imagebox = OffsetImage(arr_vic, zoom=.1)
xy = [.6, .3] # coordinates to position 2nd image
ab = AnnotationBbox(imagebox, xy,
xybox=(30, -30),
xycoords=''data'',
boxcoords="offset points")
ax.add_artist(ab)
# rest is just standard matplotlib boilerplate
ax.grid(True)
PLT.draw()
PLT.show()
Yo usaría matplotlib para eso. esta demostración muestra algo similar, estoy seguro de que se puede adaptar a su problema particular