class_docstr: Box plot
  For each series, shows the median value, the 25th and 75th percentiles,
  and the values within
  1.5 times the interquartile range of the 25th and 75th percentiles.
  
  See http://en.wikipedia.org/wiki/Box_plot
docstr: Return the center of a bounding box defined by a box plot.
  Draws a box plot on self.svg.
code: def _draw_box(
      self, parent_node, quartiles, outliers, box_index, metadata
  ):
      """
      Return the center of a bounding box defined by a box plot.
      Draws a box plot on self.svg.
      """
      width = (self.view.x(1) - self.view.x(0)) / self._order
      series_margin = width * self._series_margin
      left_edge = self.view.x(0) + width * box_index + series_margin
      width -= 2 * series_margin
  
      # draw lines for whiskers - bottom, median, and top
      for i, whisker in enumerate(
          (quartiles[0], quartiles[2], quartiles[4])
      ):
          whisker_width = width if i == 1 else width / 2
          shift = (width - whisker_width) / 2
          xs = left_edge + shift
          xe = left_edge + width - shift
          alter(
              self.svg.line(
                  parent_node,
                  coords=[
                      (xs, self.view.y(whisker)),
                      (xe, self.view.y(whisker)),
                  ],
                  class_="reactive tooltip-trigger",
                  attrib={"stroke-width": 3},
              ),
              metadata,
          )
  
      # draw lines connecting whiskers to box (Q1 and Q3)
      alter(
          self.svg.line(
              parent_node,
              coords=[
                  (left_edge + width / 2, self.view.y(quartiles[0])),
                  (left_edge + width / 2, self.view.y(quartiles[1])),
              ],
              class_="reactive tooltip-trigger",
              attrib={"stroke-width": 2},
          ),
          metadata,
      )
      alter(
          self.svg.line(
              parent_node,
              coords=[
                  (left_edge + width / 2, self.view.y(quartiles[4])),
                  (left_edge + width / 2, self.view.y(quartiles[3])),
              ],
              class_="reactive tooltip-trigger",
              attrib={"stroke-width": 2},
          ),
          metadata,
      )
  
      # box, bounded by Q1 and Q3
      alter(
          self.svg.node(
              parent_node,
              tag="rect",
              x=left_edge,
              y=self.view.y(quartiles[1]),
              height=self.view.y(quartiles[3])
              - self.view.y(quartiles[1]),
              width=width,
              class_="subtle-fill reactive tooltip-trigger",
          ),
          metadata,
      )
  
      # draw outliers
      for o in outliers:
          alter(
              self.svg.node(
                  parent_node,
                  tag="circle",
                  cx=left_edge + width / 2,
                  cy=self.view.y(o),
                  r=3,
                  class_="subtle-fill reactive tooltip-trigger",
              ),
              metadata,
          )
  
      return (
          left_edge + width / 2,
          self.view.y(sum(quartiles) / len(quartiles)),
      )
  
file_path: pygal/pygal/graph/box.py
imports: from bisect import bisect_left, bisect_right
  from pygal.graph.graph import Graph
  from pygal.util import alter, decorate
label_desc: Use image node_id 6 for calling the Box obj's underlying member method code with example usage: obj._draw_box(parent_node, quartiles, outliers, box_index, metadata) and returns: unknown,  self