code: def _plot(
      self,
      which_classes=None,
      show_percentile=False,
      figsize=None,
      dpi=300,
      ncols=2,
      plot_params=None,
      engine="plotly",
      template="plotly_white",
      **kwargs,
  ):
      if plot_params is None:
          plot_params = {}
  
      plot_params.update(
          {
              "ncols": ncols,
              "figsize": figsize,
              "dpi": dpi,
              "template": template,
              "engine": engine,
              "show_percentile": show_percentile,
          }
      )
      plot_params.update(kwargs)
  
      which_classes = _check_classes(which_classes, self.n_classes)
      plot_engine = self.plot_engines[self.plot_type](
          self, which_classes, plot_params
      )
      fig, axes = plot_engine.plot()
      return fig, axes, self.summary_df
  
imports: from .info_plot_utils import TargetPlotEngine, PredictPlotEngine, InteractInfoPlotEngine
  from .utils import _make_list, _check_target, _q1, _q2, _q3, FeatureInfo, _check_dataset, _check_model, _calc_preds, _check_classes, _expand_params_for_interact
  import pandas
  from itertools import product
label_desc: Use image node_id 4 for calling the _BaseInfoPlot obj's underlying member method code with example usage: obj._plot(which_classes, show_percentile, figsize, dpi, ncols, plot_params, engine, template) and returns: fig,  axes,  self