code: def map_colors(arr, crange, cmap, hex=True):
      
      if isinstance(crange, np.ndarray):
          xsorted = np.argsort(crange)
          ypos = np.searchsorted(crange, arr)
          arr = xsorted[ypos]
      else:
          if isinstance(crange, tuple):
              cmin, cmax = crange
          else:
              cmin, cmax = np.nanmin(arr), np.nanmax(arr)
          arr = (arr - cmin) / (cmax-cmin)
          arr = np.ma.array(arr, mask=np.logical_not(np.isfinite(arr)))
      arr = cmap(arr)
      if hex:
          return rgb2hex(arr)
      else:
          return arr
docs: Maps an array of values to RGB hex strings, given
      a color range and colormap.