docs: def imshow(x, y, z, ax, **kwargs):
      """
      Image plot of 2d DataArray using matplotlib.pyplot
  
      Wraps :func:`matplotlib:matplotlib.pyplot.imshow`
  
      While other plot methods require the DataArray to be strictly
      two-dimensional, ``imshow`` also accepts a 3D array where some
      dimension can be interpreted as RGB or RGBA color channels and
      allows this dimension to be specified via the kwarg ``rgb=``.
  
      Unlike matplotlib, Xarray can apply ``vmin`` and ``vmax`` to RGB or RGBA
      data, by applying a single scaling factor and offset to all bands.
      Passing  ``robust=True`` infers ``vmin`` and ``vmax``
      :ref:`in the usual way <robust-plotting>`.
  
      .. note::
          This function needs uniformly spaced coordinates to
          properly label the axes. Call DataArray.plot() to check.
  
      The pixels are centered on the coordinates values. Ie, if the coordinate
      value is 3.2 then the pixels for those coordinates will be centered on 3.2.
      """
  
      if x.ndim != 1 or y.ndim != 1:
          raise ValueError('imshow requires 1D coordinates, try using '
                           'pcolormesh or contour(f)')
  
      # Centering the pixels- Assumes uniform spacing
      try:
          xstep = (x[1] - x[0]) / 2.0
      except IndexError:
          # Arbitrary default value, similar to matplotlib behaviour
          xstep = .1
      try:
          ystep = (y[1] - y[0]) / 2.0
      except IndexError:
          ystep = .1
      left, right = x[0] - xstep, x[-1] + xstep
      bottom, top = y[-1] + ystep, y[0] - ystep
  
      defaults = {'origin': 'upper',
                  'interpolation': 'nearest'}
  
      if not hasattr(ax, 'projection'):
          # not for cartopy geoaxes
          defaults['aspect'] = 'auto'
  
      # Allow user to override these defaults
      defaults.update(kwargs)
  
      if defaults['origin'] == 'upper':
          defaults['extent'] = [left, right, bottom, top]
      else:
          defaults['extent'] = [left, right, top, bottom]
  
      if z.ndim == 3:
          # matplotlib imshow uses black for missing data, but Xarray makes
          # missing data transparent.  We therefore add an alpha channel if
          # there isn't one, and set it to transparent where data is masked.
          if z.shape[-1] == 3:
              alpha = np.ma.ones(z.shape[:2] + (1,), dtype=z.dtype)
              if np.issubdtype(z.dtype, np.integer):
                  alpha *= 255
              z = np.ma.concatenate((z, alpha), axis=2)
          else:
              z = z.copy()
          z[np.any(z.mask, axis=-1), -1] = 0
  
      primitive = ax.imshow(z, **defaults)
  
      return primitive