code: def imscatter(images, positions):
      """
      Creates a scatter plot, where each plot is shown by corresponding image
      """
      positions = np.array(positions)
  
      bottoms = positions[:, 1] - np.array(
          [im.shape[1] / 2.0 for im in images]
      )
      tops = bottoms + np.array([im.shape[1] for im in images])
  
      lefts = positions[:, 0] - np.array(
          [im.shape[0] / 2.0 for im in images]
      )
      rigths = lefts + np.array([im.shape[0] for im in images])
  
      most_bottom = int(np.floor(bottoms.min()))
      most_top = int(np.ceil(tops.max()))
  
      most_left = int(np.floor(lefts.min()))
      most_right = int(np.ceil(rigths.max()))
  
      scatter_image = np.zeros(
          [most_right - most_left, most_top - most_bottom, 3],
          dtype=imgs[0].dtype,
      )
  
      # shift, now all from zero
      positions -= [most_left, most_bottom]
  
      for im, pos in zip(images, positions):
          xl = int(pos[0] - im.shape[0] / 2)
          xr = xl + im.shape[0]
  
          yb = int(pos[1] - im.shape[1] / 2)
          yt = yb + im.shape[1]
  
          scatter_image[xl:xr, yb:yt, :] = im
      return scatter_image
  
imports: from MulticoreTSNE import MulticoreTSNE
  import skimage.io
  import argparse
  import glob
  from scipy.spatial import KDTree
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: imscatter(images, positions) and returns: scatter_image