I have a set of 150x150px png images, and a set of (x, y) coordinates that they correspond to. Is there a way to plot the images on a grid? For example, I'm looking for an R or Python solution to create something like the following:
You create a bounding box by instantiating AnnotationBbox--once for each image that you wish to display; the image and its coordinates are passed to the constructor.
The code is obviously repetitive for the two images, so once that block is put in a function, it's not as long as it seems here.
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()
One way to do it in R (2.11.0 and higher):
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) }
see ?readPNG and ?rasterImage for details.
I would use matplotlib for that. this demo shows something similar, I am sure it can be adapted to your particular problem
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With