Placing Custom Images in a Plot Window--as custom data markers or to annotate those markers

前端 未结 5 1411
谎友^
谎友^ 2020-12-01 00:19

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

相关标签:
5条回答
  • 2020-12-01 00:59

    In R, readed in the help(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)
    

    ....is a nice example.

    0 讨论(0)
  • 2020-12-01 01:01

    I would use matplotlib for that. this demo shows something similar, I am sure it can be adapted to your particular problem

    0 讨论(0)
  • 2020-12-01 01:02

    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()
    

    enter image description here

    0 讨论(0)
  • 2020-12-01 01:05

    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. enter image description here

    0 讨论(0)
  • 2020-12-01 01:08

    Also in R you can use the my.symbols and ms.image functions in the TeachingDemos package.

    0 讨论(0)
提交回复
热议问题