class_docstr: Ribbon plot
  
  {usage}
  
  Parameters
  ----------
  {common_parameters}
  outline_type : Literal["upper", "lower", "both", "full"], default="both"
      How to stroke to outline of the region / area.
      If `upper`, draw only upper bounding line.
      If `lower`, draw only lower bounding line.
      If `both`, draw both upper & lower bounding lines.
      If `full`, draw closed polygon around the area.
code: def draw_group(
      data: pd.DataFrame,
      panel_params: panel_view,
      coord: Coord,
      ax: Axes,
      **params: Any,
  ):
      _x = "y" if isinstance(coord, coord_flip) else "x"
      data = coord.transform(data, panel_params, munch=True)
      data = data.sort_values(by=["group", _x], kind="mergesort")
      units = ["alpha", "color", "fill", "linetype", "size"]
  
      if len(data[units].drop_duplicates()) > 1:
          msg = "Aesthetics cannot vary within a ribbon."
          raise PlotnineError(msg)
  
      for _, udata in data.groupby(units, dropna=False):
          udata.reset_index(inplace=True, drop=True)
          geom_ribbon.draw_unit(
              udata, panel_params, coord, ax, **params
          )
  
file_path: plotnine/plotnine/geoms/geom_ribbon.py
imports: from __future__ import annotations
  import typing
  from .._utils import SIZE_FACTOR, to_rgba
  from ..coords import coord_flip
  from ..doctools import document
  from ..exceptions import PlotnineError
  from .geom import geom
  from .geom_path import geom_path
  from .geom_polygon import geom_polygon
label_desc: Use image node_id 3 for calling the geom_ribbon obj's underlying member method code with example usage: obj.draw_group(data, panel_params, coord, ax) without return types