code: def plot_slopes(
      model: Model,
      idata: az.InferenceData,
      wrt: Union[str, dict],
      conditional: Union[str, dict, list, None] = None,
      average_by: Union[str, list] = None,
      eps: float = 1e-4,
      slope: str = "dydx",
      sample_new_groups: bool = False,
      use_hdi: bool = True,
      prob=None,
      transforms=None,
      legend: bool = True,
      ax=None,
      fig_kwargs=None,
      subplot_kwargs=None,
  ):
      """Plot Conditional Adjusted Slopes
  
      Parameters
      ----------
      model : bambi.Model
          The model for which we want to plot the predictions.
      idata : arviz.InferenceData
          The InferenceData object that contains the samples from the posterior distribution of
          the model.
      wrt : str, dict
          The slope of the regression with respect to (wrt) this predictor will be computed.
          If 'wrt' is numeric, the derivative is computed, else if string or categorical,
          'comparisons' is called to compute difference in group means.
      conditional : str, dict, list
          The covariates we would like to condition on. If dict, keys are the covariate names and
          values are the values to condition on.
      average_by: str, list, bool, optional
          The covariates we would like to average by. The passed covariate(s) will marginalize
          over the other covariates in the model. If True, it averages over all covariates
          in the model to obtain the average estimate. Defaults to ``None``.
      eps : float, optional
          To compute the slope, 'wrt' is evaluated at wrt +/- 'eps'. The rate of change is then
          computed as the difference between the two values divided by 'eps'. Defaults to 1e-4.
      slope: str, optional
          The type of slope to compute. Defaults to 'dydx'.
          'dydx' represents a unit increase in 'wrt' is associated with an n-unit change in
          the response.
          'eyex' represents a percentage increase in 'wrt' is associated with an n-percent
          change in the response.
          'eydx' represents a unit increase in 'wrt' is associated with an n-percent
          change in the response.
          'dyex' represents a percent change in 'wrt' is associated with a unit increase
          in the response.
      sample_new_groups : bool, optional
          If the model contains group-level effects, and data is passed for unseen groups, whether
          to sample from the new groups. Defaults to ``False``.
      use_hdi : bool, optional
          Whether to compute the highest density interval (defaults to True) or the quantiles.
      prob : float, optional
          The probability for the credibility intervals. Must be between 0 and 1. Defaults to 0.94.
          Changing the global variable ``az.rcParam["stats.hdi_prob"]`` affects this default.
      transforms : dict, optional
          Transformations that are applied to each of the variables being plotted. The keys are the
          name of the variables, and the values are functions to be applied. Defaults to ``None``.
      legend : bool, optional
          Whether to automatically include a legend in the plot. Defaults to ``True``.
      ax : matplotlib.axes._subplots.AxesSubplot, optional
          A matplotlib axes object or a sequence of them. If None, this function instantiates a
          new axes object. Defaults to ``None``.
      fig_kwargs : optional
          Keyword arguments passed to the matplotlib figure function as a dict. For example,
          ``fig_kwargs=dict(figsize=(11, 8)), sharey=True`` would make the figure 11 inches wide
          by 8 inches high and would share the y-axis values.
      subplot_kwargs : optional
          Keyword arguments used to determine the covariates used for the horizontal, group,
          and panel axes. For example, ``subplot_kwargs=dict(main="x", group="y", panel="z")`` would
          plot the horizontal axis as ``x``, the color (hue) as ``y``, and the panel axis as ``z``.
  
      Returns
      -------
      matplotlib.figure.Figure, matplotlib.axes._subplots.AxesSubplot
          A tuple with the figure and the axes.
  
      Raises
      ------
      ValueError
          If the number of ``wrt`` values is greater than 2 and ``average_by`` is ``None``.
          If ``conditional`` and ``average_by`` are both ``None``.
          If length of ``conditional`` is greater than 3 and ``average_by`` is ``None``.
          If ``average_by`` is ``True``.
          If ``slope`` is not one of ('dydx', 'dyex', 'eyex', 'eydx').
          If main covariate is not numeric or categoric.
      """
      wrt_name = wrt
      if isinstance(wrt, dict):
          wrt_name, wrt_value = next(iter(wrt.items()))
          if not isinstance(wrt_value, (list, np.ndarray)):
              wrt_value = [wrt_value]
          if len(wrt_value) > 2 and average_by is None:
              raise ValueError(
                  "When plotting with more than 2 values for 'wrt', you must "
                  "pass a covariate to 'average_by'"
              )
  
      if not isinstance(wrt, dict):
          if is_categorical_dtype(
              model.data[wrt_name]
          ) or is_string_dtype(model.data[wrt_name]):
              num_values = len(model.data[wrt_name].unique())
              if num_values > 2 and average_by is None:
                  raise ValueError(
                      "When plotting with more than 2 values for 'wrt', you must "
                      f"pass a covariate to 'average_by'. {wrt_name} has {num_values} values."
                  )
  
      if conditional is None and average_by is None:
          raise ValueError(
              "Must specify at least one of 'conditional' or 'average_by'."
          )
  
      if conditional is not None and not isinstance(conditional, dict):
          conditional = listify(conditional)
          if len(conditional) > 3 and average_by is None:
              raise ValueError(
                  "Must specify a covariate to 'average_by' when number of covariates"
                  "passed to 'conditional' is greater than 3."
              )
  
      if average_by is True:
          raise ValueError(
              "Plotting when 'average_by = True' is not possible as 'True' marginalizes "
              "over all covariates resulting in a single prediction estimate. "
              "Please pass a covariate(s) to 'average_by'."
          )
  
      if slope not in ("dydx", "dyex", "eyex", "eydx"):
          raise ValueError(
              "'slope' must be one of ('dydx', 'dyex', 'eyex', 'eydx')"
          )
  
      conditional_info = ConditionalInfo(model, conditional)
  
      slopes_summary = slopes(
          model=model,
          idata=idata,
          wrt=wrt,
          conditional=conditional,
          average_by=average_by,
          eps=eps,
          slope=slope,
          use_hdi=use_hdi,
          prob=prob,
          transforms=transforms,
          sample_new_groups=sample_new_groups,
      )
  
      return _plot_differences(
          model=model,
          conditional_info=conditional_info,
          summary_df=slopes_summary,
          average_by=average_by,
          transforms=transforms,
          legend=legend,
          ax=ax,
          fig_kwargs=fig_kwargs,
          subplot_kwargs=subplot_kwargs,
      )
  
file_path: bambi/bambi/interpret/plotting.py
imports: from typing import Union
  import arviz
  from arviz.plots.backends.matplotlib import create_axes_grid
  from arviz.plots.plot_utils import default_grid
  import numpy
  import pandas
  from pandas.api.types import is_categorical_dtype, is_numeric_dtype, is_string_dtype
  from bambi.models import Model
  from bambi.interpret.effects import comparisons, slopes, predictions
  from bambi.interpret.plot_types import plot_categoric, plot_numeric
  from bambi.interpret.utils import get_covariates, ConditionalInfo
  from bambi.utils import get_aliased_name, listify
label_desc: Use image node_id 4 for calling a global function with example usage: plot_slopes(model, idata, wrt, conditional, average_by, eps, slope, sample_new_groups, use_hdi, prob, transforms, legend, ax, fig_kwargs, subplot_kwargs) and returns: _plot_differences