class_docstr: OverlayPlot supports compositors processing of Overlays across maps.
class_docstr_tok: ["OverlayPlot","supports","compositors","processing","of","Overlays","across","maps","."]
code: def update_frame(self, key, ranges=None, element=None):
      axis = self.handles["axis"]
      reused = isinstance(self.hmap, DynamicMap) and self.overlaid
      self.prev_frame = self.current_frame
      if element is None and not reused:
          element = self._get_frame(key)
      elif element is not None:
          self.current_frame = element
          self.current_key = key
      empty = element is None
  
      if isinstance(self.hmap, DynamicMap):
          range_obj = element
      else:
          range_obj = self.hmap
      items = [] if element is None else list(element.data.items())
  
      if not empty:
          ranges = self.compute_ranges(range_obj, key, ranges)
      for k, subplot in self.subplots.items():
          el = None if empty else element.get(k, None)
          if isinstance(self.hmap, DynamicMap) and not empty:
              idx, spec, exact = self._match_subplot(
                  k, subplot, items, element
              )
              if idx is not None:
                  _, el = items.pop(idx)
                  if not exact:
                      self._update_subplot(subplot, spec)
          subplot.update_frame(key, ranges, el)
  
      if isinstance(self.hmap, DynamicMap) and items:
          self._create_dynamic_subplots(key, items, ranges)
  
      # Update plot options
      plot_opts = self.lookup_options(element, "plot").options
      inherited = self._traverse_options(
          element, "plot", self._propagate_options, defaults=False
      )
      plot_opts.update(
          **{
              k: v[0]
              for k, v in inherited.items()
              if k not in plot_opts
          }
      )
      self.param.update(**plot_opts)
  
      if self.show_legend and not empty:
          self._adjust_legend(element, axis)
  
      self._finalize_axis(key, element=element, ranges=ranges)
  
imports: import copy
  import math
  import warnings
  from types import FunctionType
  import matplotlib.colors
  import numpy
  import param
  from matplotlib import ticker
  from matplotlib.dates import date2num
  from matplotlib.image import AxesImage
  from packaging.version import Version
  from ...core import CompositeOverlay, Dataset, DynamicMap, Element, Element3D, NdOverlay, util
  from ...core.options import Keywords, abbreviated_exception
  from ...element import Graph, Path
  from ...streams import Stream
  from ...util.transform import dim
  from ..plot import GenericElementPlot, GenericOverlayPlot
  from ..util import color_intervals, dim_range_key, process_cmap
  from .plot import MPLPlot, mpl_rc_context
  from .util import EqHistNormalize, mpl_version, validate, wrap_formatter
label_desc: Use image node_id 5 for calling the OverlayPlot obj's underlying member method code with example usage: obj.update_frame(key, ranges, element) without return types