class_docstr: Plotting object allows for visualization of absolute group bias metrics and
  relative disparities calculated by Aequitas Group(), Bias(), and Fairness()
  class instances.
code: def generate_axes(
      ncols,
      num_metrics,
      total_plot_width,
      sharey,
      hspace=0.25,
      indiv_height=6,
  ):
      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 = total_plot_width
  
      fig, axs = plt.subplots(
          nrows=rows,
          ncols=ncols,
          figsize=(total_plot_width, indiv_height * rows),
          sharey=sharey,
          gridspec_kw={"wspace": 0.075, "hspace": hspace},
      )
  
      return fig, axs, rows, axes_to_remove
  
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 8 for calling the Plot obj's underlying member method code with example usage: obj.generate_axes(ncols, num_metrics, total_plot_width, sharey, hspace, indiv_height) and returns: fig,  axs,  rows,  axes_to_remove