class_docstr: Base class used for composite model structure definition
  
  :param model: `Pipeline` object to be explained
  :param surrogate: surrogate name. Supported surrogates: `[dt, dtreg]`
  
  .. note::
      `score` stores the score of surrogate's prediction on model (equals None if the 'explain' method hasn't been
      called yet)
class_docstr_tok: ["Base","class","used","for","composite","model","structure","definition",":","param","model",":","`","Pipeline","`","object","to","be","explained",":","param","surrogate",":","surrogate","name",".","Supported","surrogates",":","`","[","dt",",","dtreg","]","`","..","note",":",":","`","score","`","stores","the","score","of","surrogate","'s","prediction","on","model","(","equals","None","if","the","'explain","'","method","has","n't","been","called","yet",")"]
docstr: Print and plot results of the last explanation. Suitable keyword parameters
  are passed to the corresponding plot function.
  :param dpi: the figure DPI, defaults to 100.
  :param figsize: the figure size in format `(width, height)`, defaults to `(48, 12)`.
  :param save_path: path to save the plot.
docstr_tok: ["Print","and","plot","results","of","the","last","explanation",".","Suitable","keyword","parameters","are","passed","to","the","corresponding","plot","function",".",":","param","dpi",":","the","figure","DPI",",","defaults","to","100.",":","param","figsize",":","the","figure","size","in","format","`","(","width",",","height",")","`",",","defaults","to","`","(","48",",","12",")","`",".",":","param","save_path",":","path","to","save","the","plot","."]
code: def visualize(
      self,
      dpi: int = 100,
      figsize=(48, 12),
      save_path: str = None,
      **kwargs,
  ):
      """Print and plot results of the last explanation. Suitable keyword parameters
      are passed to the corresponding plot function.
      :param dpi: the figure DPI, defaults to 100.
      :param figsize: the figure size in format `(width, height)`, defaults to `(48, 12)`.
      :param save_path: path to save the plot.
      """
      plt.figure(dpi=dpi, figsize=figsize)
      if self.surrogate_str in ["dt", "dtreg"]:
          if self.score is not None:
              print(
                  f"Surrogate's model reproduction quality: {self.score}"
              )
          # Plot default parameters
          plot_params = {
              "proportion": True,
              "filled": True,
              "rounded": True,
              "fontsize": 12,
          }
          # Plot parameters defined by user
          kwargs_params = {
              par: kwargs[par]
              for par in kwargs
              if par in signature(tree.plot_tree).parameters
          }
  
          plot_params.update(kwargs_params)
  
          tree.plot_tree(
              self.surrogate.root_node.fitted_operation, **plot_params
          )
  
      if save_path is not None:
          plt.savefig(save_path)
          print(f'Saved the plot to "{os.path.abspath(save_path)}"')
  
imports: import os
  from copy import deepcopy
  from inspect import signature
  from typing import Optional
  from matplotlib import pyplot
  from sklearn import tree
  from sklearn.tree._tree import TREE_LEAF
  from fedot.core.composer.metrics import Metric
  from fedot.core.composer.metrics import R2, F1
  from fedot.core.data.data import InputData
  from fedot.core.pipelines.node import PipelineNode
  from fedot.core.pipelines.pipeline import Pipeline
  from fedot.core.repository.tasks import TaskTypesEnum
  from fedot.explainability.explainer_template import Explainer
label_desc: Use image node_id 3 for calling the SurrogateExplainer obj's underlying member method code with example usage: obj.visualize(dpi, figsize, save_path) without return types