code: def get_data(self, element, ranges, style):
      mapping = dict(image="image", x="x", y="y", dw="dw", dh="dh")
      x, y, z = element.dimensions()[:3]
  
      mapping["color_mapper"] = self._get_colormapper(
          z, element, ranges, style
      )
  
      img = np.dstack(
          [
              element.dimension_values(vd, flat=False)
              if not self.invert_axes
              else element.dimension_values(vd, flat=False).transpose()
              for vd in element.vdims
          ]
      )
      # Ensure axis inversions are handled correctly
      l, b, r, t = element.bounds.lbrt()
      if self.invert_axes:
          # transposed in dstack
          l, b, r, t = b, l, t, r
  
      x = [l]
      y = [b]
      dh, dw = t - b, r - l
      if self.invert_xaxis:
          l, r = r, l
          x = [r]
      if self.invert_yaxis:
          b, t = t, b
          y = [t]
  
      data = dict(image=[img], x=x, y=y, dw=[dw], dh=[dh])
      return (data, mapping, style)
  
imports: import sys
  import numpy
  import param
  from bokeh.models import CustomJSHover, DatetimeAxis
  from ...core.util import cartesian_product, dimension_sanitizer, isfinite
  from ...element import Raster
  from ..util import categorical_legend
  from .chart import PointPlot
  from .element import ColorbarPlot, LegendPlot
  from .selection import BokehOverlaySelectionDisplay
  from .styles import base_properties, fill_properties, line_properties, mpl_to_bokeh
  from .util import bokeh33, bokeh34, colormesh
label_desc: Use image node_id 3 for calling the ImageStackPlot obj's underlying member method code with example usage: obj.get_data(element, ranges, style) and returns: data,  mapping,  style