code: def initialize_plot(self, ranges=None, plot=None, plots=None, source=None):
          
          # Get element key and ranges for frame
          if self.batched:
              element = [el for el in self.hmap.data.values() if el][-1]
          else:
              element = self.hmap.last
          key = util.wrap_tuple(self.hmap.last_key)
          ranges = self.compute_ranges(self.hmap, key, ranges)
          self.current_ranges = ranges
          self.current_frame = element
          self.current_key = key
          style_element = element.last if self.batched else element
          ranges = util.match_spec(style_element, ranges)
          # Initialize plot, source and glyph
          if plot is None:
              plot = self._init_plot(key, style_element, ranges=ranges, plots=plots)
              self._init_axes(plot)
          else:
              self.handles['xaxis'] = plot.xaxis[0]
              self.handles['x_range'] = plot.x_range
              self.handles['yaxis'] = plot.yaxis[0]
              self.handles['y_range'] = plot.y_range
          self.handles['plot'] = plot
  
          self._init_glyphs(plot, element, ranges, source)
          if not self.overlaid:
              self._update_plot(key, plot, style_element)
              self._update_ranges(style_element, ranges)
  
          for cb in self.callbacks:
              cb.initialize()
  
          if not self.overlaid:
              self._set_active_tools(plot)
              self._process_legend()
          self._execute_hooks(element)
  
          self.drawn = True
  
          return plot
docs: Initializes a new plot object with the last available frame.