class_docstr: Class to handle logic from ForestPlot.
docstr: Draw forestplot for each plotter.
  
  Parameters
  ----------
  hdi_prob : float
      Probability for the highest density interval. Width of each line.
  quartiles : bool
      Whether to mark quartiles
  xt_textsize : float
      Size of tick text
  titlesize : float
      Size of title text
  linewidth : float
      Width of forestplot line
  markersize : float
      Size of marker in center of forestplot line
  ax : Axes
      Axes to draw on
docstr_tok: ["Draw","forestplot","for","each","plotter",".","Parameters","--","--","--","--","--","hdi_prob",":","float","Probability","for","the","highest","density","interval",".","Width","of","each","line",".","quartiles",":","bool","Whether","to","mark","quartiles","xt_textsize",":","float","Size","of","tick","text","titlesize",":","float","Size","of","title","text","linewidth",":","float","Width","of","forestplot","line","markersize",":","float","Size","of","marker","in","center","of","forestplot","line","ax",":","Axes","Axes","to","draw","on"]
code: def forestplot(
      self,
      hdi_prob,
      quartiles,
      xt_labelsize,
      titlesize,
      linewidth,
      markersize,
      ax,
      rope,
  ):
      """Draw forestplot for each plotter.
  
      Parameters
      ----------
      hdi_prob : float
          Probability for the highest density interval. Width of each line.
      quartiles : bool
          Whether to mark quartiles
      xt_textsize : float
          Size of tick text
      titlesize : float
          Size of title text
      linewidth : float
          Width of forestplot line
      markersize : float
          Size of marker in center of forestplot line
      ax : Axes
          Axes to draw on
      """
      # Quantiles to be calculated
      endpoint = 100 * (1 - hdi_prob) / 2
      if quartiles:
          qlist = [endpoint, 25, 50, 75, 100 - endpoint]
      else:
          qlist = [endpoint, 50, 100 - endpoint]
  
      for plotter in self.plotters.values():
          for y, selection, values, color in plotter.treeplot(
              qlist, hdi_prob
          ):
              if isinstance(rope, dict):
                  self.display_multiple_ropes(
                      rope,
                      ax,
                      y,
                      linewidth,
                      plotter.var_name,
                      selection,
                  )
  
              mid = len(values) // 2
              param_iter = zip(
                  np.linspace(
                      2 * linewidth, linewidth, mid, endpoint=True
                  )[-1::-1],
                  range(mid),
              )
              for width, j in param_iter:
                  ax.hlines(
                      y,
                      values[j],
                      values[-(j + 1)],
                      linewidth=width,
                      color=color,
                  )
              ax.plot(
                  values[mid],
                  y,
                  "o",
                  mfc=ax.get_facecolor(),
                  markersize=markersize * 0.75,
                  color=color,
              )
      ax.tick_params(labelsize=xt_labelsize)
      ax.set_title(f"{hdi_prob:.1%} HDI", fontsize=titlesize, wrap=True)
      if rope is None or isinstance(rope, dict):
          return
      elif len(rope) == 2:
          ax.axvspan(
              rope[0], rope[1], 0, self.y_max(), color="C2", alpha=0.5
          )
      else:
          raise ValueError(
              "Argument `rope` must be None, a dictionary like"
              '{"var_name": {"rope": (lo, hi)}}, or an '
              "iterable of length 2"
          )
      return ax
  
imports: from collections import OrderedDict, defaultdict
  from itertools import tee
  import matplotlib.pyplot
  import numpy
  from matplotlib.colors import to_rgba
  from matplotlib.lines import Line2D
  from ....stats import hdi
  from ....stats.density_utils import get_bins, histogram, kde
  from ....stats.diagnostics import _ess, _rhat
  from ....sel_utils import xarray_var_iter
  from ....utils import conditional_jit
  from ...plot_utils import _scale_fig_size
  from .None import backend_kwarg_defaults, backend_show
label_desc: Use image node_id 7 for calling the PlotHandler obj's underlying member method code with example usage: obj.forestplot(hdi_prob, quartiles, xt_labelsize, titlesize, linewidth, markersize, ax, rope) and returns: ax