class_docstr: Box and whiskers plot
  
  {usage}
  
  Parameters
  ----------
  {common_parameters}
  width : float, default=None
      Box width. If `None`{.py}, the width is set to
      `90%` of the resolution of the data. Note that if the stat
      has a width parameter, that takes precedence over this one.
  outlier_alpha : float, default=1
      Transparency of the outlier points.
  outlier_color : str | tuple, default=None
      Color of the outlier points.
  outlier_shape : str, default="o"
      Shape of the outlier points. An empty string hides the outliers.
  outlier_size : float, default=1.5
      Size of the outlier points.
  outlier_stroke : float, default=0.5
      Stroke-size of the outlier points.
  notch : bool, default=False
      Whether the boxes should have a notch.
  varwidth : bool, default=False
      If `True`{.py}, boxes are drawn with widths proportional to
      the square-roots of the number of observations in the
      groups.
  notchwidth : float, default=0.5
      Width of notch relative to the body width.
  fatten : float, default=2
      A multiplicative factor used to increase the size of the
      middle bar across the box.
class_docstr_tok: ["Box","and","whiskers","plot","{","usage","}","Parameters","--","--","--","--","--","{","common_parameters","}","width",":","float",",","default=None","Box","width",".","If","`","None","`","{",".py","}",",","the","width","is","set","to","`","90","%","`","of","the","resolution","of","the","data",".","Note","that","if","the","stat","has","a","width","parameter",",","that","takes","precedence","over","this","one",".","outlier_alpha",":","float",",","default=1","Transparency","of","the","outlier","points",".","outlier_color",":","str","|","tuple",",","default=None","Color","of","the","outlier","points",".","outlier_shape",":","str",",","default=","''","o","''","Shape","of","the","outlier","points",".","An","empty","string","hides","the","outliers",".","outlier_size",":","float",",","default=1.5","Size","of","the","outlier","points",".","outlier_stroke",":","float",",","default=0.5","Stroke-size","of","the","outlier","points",".","notch",":","bool",",","default=False","Whether","the","boxes","should","have","a","notch",".","varwidth",":","bool",",","default=False","If","`","True","`","{",".py","}",",","boxes","are","drawn","with","widths","proportional","to","the","square-roots","of","the","number","of","observations","in","the","groups",".","notchwidth",":","float",",","default=0.5","Width","of","notch","relative","to","the","body","width",".","fatten",":","float",",","default=2","A","multiplicative","factor","used","to","increase","the","size","of","the","middle","bar","across","the","box","."]
code: def __init__(
      self,
      mapping: Aes | None = None,
      data: DataLike | None = None,
      **kwargs: Any,
  ):
      _position = kwargs.get(
          "position", self.DEFAULT_PARAMS["position"]
      )
      varwidth = kwargs.get("varwidth", self.DEFAULT_PARAMS["varwidth"])
  
      # varwidth = True is not compatible with preserve='total'
      if varwidth:
          if isinstance(_position, str):
              kwargs["position"] = position_dodge2(preserve="single")
          elif (
              isinstance(_position, position)
              and _position.params["preserve"] == "total"
          ):
              warn(
                  "Cannot preserve total widths when varwidth=True",
                  PlotnineWarning,
                  stacklevel=2,
              )
              _position.params["preserve"] = "single"
  
      super().__init__(mapping, data, **kwargs)
  
file_path: plotnine/plotnine/geoms/geom_boxplot.py
imports: from __future__ import annotations
  import typing
  from warnings import warn
  import numpy
  import pandas
  from .._utils import SIZE_FACTOR, copy_missing_columns, resolution, to_rgba
  from ..doctools import document
  from ..exceptions import PlotnineWarning
  from ..positions import position_dodge2
  from ..positions.position import position
  from .geom import geom
  from .geom_crossbar import geom_crossbar
  from .geom_point import geom_point
  from .geom_segment import geom_segment
label_desc: Use image node_id 1 to create a new geom_boxplot object from inherited base classes: geom with example: obj = geom_boxplot(mapping, data)