code: def __init__(
      self,
      plot_obj,
      which_classes,
      plot_params,
  ):
      if plot_obj.plot_type in ["target", "predict"]:
          self.feat_name = plot_obj.feature_info.name
          self.feat_type = plot_obj.feature_info.type
          feat_name = self.feat_name
      else:
          self.feat_names = [
              info.name for info in plot_obj.feature_infos
          ]
          self.feat_types = [
              info.type for info in plot_obj.feature_infos
          ]
          feat_name = self.feat_names
  
      self.plot_style = _prepare_plot_style(
          feat_name,
          len(which_classes),
          plot_params,
          plot_obj.plot_type,
      )
      self.which_classes = which_classes
      self.plot_obj = plot_obj
  
imports: from .styles import _prepare_plot_style, _axes_modify, _display_percentile, _modify_legend_axes, _get_axes_label
  import numpy
  from itertools import cycle
  import plotly.express
  import matplotlib
  import matplotlib.pyplot
  from matplotlib.gridspec import GridSpecFromSubplotSpec
  from mpl_toolkits.axes_grid1.inset_locator import inset_axes
  import matplotlib.patheffects
  import plotly.graph_objects
label_desc: Use image node_id 1 to create a new BaseInfoPlotEngine object  with example: obj = BaseInfoPlotEngine(plot_obj, which_classes, plot_params)