class_docstr: Plotting object allows for visualization of absolute group bias metrics and
  relative disparities calculated by Aequitas Group(), Bias(), and Fairness()
  class instances.
docstr: This function plots bar charts of absolute metrics indicated by config
  file
  
  :param data_table: output of group.get_crosstabs, bias.get_disparity, or
      fairness.get_fairness functions
  :param plot_fcn: the single-metric plotting function to use for subplots
  :param metrics: which metric(s) to plot, or 'all.' If this value is
      null, will plot the following absolute metrics (or related disparity
      measures):
          - Predicted Prevalence (pprev),
          - Predicted Positive Rate (ppr),
          - False Discovery Rate (fdr),
          - False Omission Rate (for),
          - False Positive Rate (fpr),
          - False Negative Rate (fnr)
  :param fillzeros: Should null values be filled with zeros. Default is
      True.
  :param title: Whether to display a title on each plot. Default is True.
  :param ncols: The number of subplots to plot per row visualization
      figure.
      Default is 3.
  :param label_dict: Optional dictionary of label replacements. Default is
      None.
  :param show_figure: Whether to show figure (plt.show()). Default is
      True.
  :param min_group_size: Minimum proportion of total group size (all data)
      a population group must meet in order to be included in visualization
  
  :return: Returns a figure
code: def _plot_multiple(
      self,
      data_table,
      plot_fcn,
      metrics=None,
      fillzeros=True,
      title=True,
      ncols=3,
      label_dict=None,
      show_figure=True,
      min_group_size=None,
  ):
      """
      This function plots bar charts of absolute metrics indicated by config
      file
  
      :param data_table: output of group.get_crosstabs, bias.get_disparity, or
          fairness.get_fairness functions
      :param plot_fcn: the single-metric plotting function to use for subplots
      :param metrics: which metric(s) to plot, or 'all.' If this value is
          null, will plot the following absolute metrics (or related disparity
          measures):
              - Predicted Prevalence (pprev),
              - Predicted Positive Rate (ppr),
              - False Discovery Rate (fdr),
              - False Omission Rate (for),
              - False Positive Rate (fpr),
              - False Negative Rate (fnr)
      :param fillzeros: Should null values be filled with zeros. Default is
          True.
      :param title: Whether to display a title on each plot. Default is True.
      :param ncols: The number of subplots to plot per row visualization
          figure.
          Default is 3.
      :param label_dict: Optional dictionary of label replacements. Default is
          None.
      :param show_figure: Whether to show figure (plt.show()). Default is
          True.
      :param min_group_size: Minimum proportion of total group size (all data)
          a population group must meet in order to be included in visualization
  
      :return: Returns a figure
      """
      model_id = self._check_model_id(
          df=data_table, method_table_name="data_table"
      )
  
      if fillzeros:
          data_table = data_table.fillna(0)
  
      if plot_fcn in [self.plot_fairness_group, self.plot_group_metric]:
          if not metrics:
              metrics = [
                  met
                  for met in self.key_metrics
                  if met in data_table.columns
              ]
  
          elif metrics == "all":
              all_abs_metrics = (
                  "pprev",
                  "ppr",
                  "fdr",
                  "for",
                  "fpr",
                  "fnr",
                  "tpr",
                  "tnr",
                  "npv",
                  "precision",
              )
              metrics = [
                  met
                  for met in all_abs_metrics
                  if met in data_table.columns
              ]
  
          ax_lim = 1
  
      # elif plot_fcn in [self.plot_fairness_disparity, self.plot_disparity]:
      else:
          if not metrics:
              metrics = [
                  disp
                  for disp in self.key_disparities
                  if disp in data_table.columns
              ]
          elif metrics == "all":
              metrics = list(
                  data_table.columns[
                      data_table.columns.str.contains("_disparity")
                  ]
              )
  
          ax_lim = min(
              10,
              self._nearest_quartile(max(data_table[metrics].max()))
              + 0.1,
          )
  
      num_metrics = len(metrics)
      rows = math.ceil(num_metrics / ncols)
      if ncols == 1 or (num_metrics % ncols == 0):
          axes_to_remove = 0
      else:
          axes_to_remove = ncols - (num_metrics % ncols)
  
      if not (0 < rows <= num_metrics):
          raise ValueError(
              "Plot must have at least one row. Please update number of columns"
              " ('ncols') or check that at least one metric is specified in "
              "'metrics'."
          )
      if not (0 < ncols <= num_metrics):
          raise ValueError(
              "Plot must have at least one column, and no more columns than "
              "subplots. Please update number of columns ('ncols') or check "
              "that at least one metric is specified in 'metrics'."
          )
  
      total_plot_width = 25
  
      fig, axs = plt.subplots(
          nrows=rows,
          ncols=ncols,
          figsize=(total_plot_width, 6 * rows),
          sharey=True,
          gridspec_kw={"wspace": 0.075, "hspace": 0.25},
      )
  
      # set a different metric to be plotted in each subplot
      ax_col = 0
      ax_row = 0
  
      viz_title = (
          f"{(', ').join(list(map(lambda x: x.upper(), metrics)))}"
      )
  
      for group_metric in metrics:
          if (ax_col >= ncols) and ((ax_col + 1) % ncols) == 1:
              ax_row += 1
              ax_col = 0
  
          if rows == 1:
              current_subplot = axs[ax_col]
  
          elif ncols == 1:
              current_subplot = axs[ax_row]
              ax_row += 1
          else:
              current_subplot = axs[ax_row, ax_col]
  
          plot_fcn(
              data_table,
              group_metric=group_metric,
              ax=current_subplot,
              ax_lim=ax_lim,
              title=title,
              label_dict=label_dict,
              min_group_size=min_group_size,
          )
          ax_col += 1
  
      # disable axes not being used
      if axes_to_remove > 0:
          for i in np.arange(axes_to_remove):
              axs[-1, -(i + 1)].axis("off")
  
      if show_figure:
          plt.show()
  
      if title:
          plt.suptitle(f"{viz_title}", fontsize=25, fontweight="bold")
  
      return fig
  
imports: import logging
  import math
  import numpy
  import collections
  import seaborn
  import matplotlib.pyplot
  import matplotlib.colors
  import matplotlib.cm
  from aequitas import squarify_flipped
label_desc: Use image node_id 19 for calling the Plot obj's underlying member method code with example usage: obj._plot_multiple(data_table, plot_fcn, metrics, fillzeros, title, ncols, label_dict, show_figure, min_group_size) and returns: fig