class_docstr: Stack plotted objects on top of each other
  
  The objects to stack are those that have
  an overlapping x range.
  
  Parameters
  ----------
  vjust :
      By what fraction to avoid overlapping the lower object,
      where `0` gives a complete overlap and `1` gives no overlap.
  reverse :
      Reverse the order of the stacked groups if true.
code: def compute_panel(cls, data, scales, params):
      if not params["var"]:
          return data
  
      # Positioning happens after scale has transformed the data,
      # and stacking only works well for linear data.
      # If the scale(transformation) is not linear, we undo it,
      # do the "stacking" and redo the transformation.
      from ..scales.scale_continuous import scale_continuous
  
      if isinstance(scales.y, scale_continuous):
          undo_transform = (
              not scales.y.is_linear
              and scales.y.trans.domain_is_numerical
          )
      else:
          undo_transform = False
  
      if undo_transform:
          data = cls.transform_position(data, trans_y=scales.y.inverse)
  
      negative = data["ymax"] < 0
      neg = data.loc[negative]
      pos = data.loc[~negative]
  
      if len(neg):
          neg = cls.collide(neg, params=params)
  
      if len(pos):
          pos = cls.collide(pos, params=params)
  
      data = pd.concat([neg, pos], axis=0, ignore_index=True, sort=True)
  
      if undo_transform:
          data = cls.transform_position(
              data, trans_y=scales.y.transform
          )
  
      return data
  
file_path: plotnine/plotnine/positions/position_stack.py
imports: from __future__ import annotations
  from warnings import warn
  import numpy
  import pandas
  from .._utils import remove_missing
  from ..exceptions import PlotnineWarning
  from .position import position
label_desc: Use image node_id 4 for calling the position_stack obj's underlying member method code with example usage: obj.compute_panel(cls, data, scales, params) and returns: data, data