code: def plot_study(self, algorithm, data_type, study):
      key = f"{data_type}_{algorithm}"
  
      plots = [
          (
              optuna.visualization.matplotlib.plot_optimization_history,
              "optimization_history",
          ),
          (
              optuna.visualization.matplotlib.plot_parallel_coordinate,
              "parallel_coordinate",
          ),
          (
              optuna.visualization.matplotlib.plot_param_importances,
              "param_importances",
          ),
          # (optuna.visualization.matplotlib.plot_slice, "slice"),
      ]
  
      matplotlib_default_figsize = matplotlib.rcParams["figure.figsize"]
      matplotlib.rcParams["figure.figsize"] = (11, 7)
  
      md = f"# Optuna tuning for {algorithm} on {data_type} data\n\n"
      for plot, title in plots:
          try:
              with warnings.catch_warnings():
                  warnings.simplefilter("ignore")
                  plt.figure()
                  plt.rcParams["axes.grid"] = (
                      title != "parallel_coordinate"
                  )
                  plot(study)
                  plt.tight_layout(pad=2.0)
                  fname = f"{key}_{title}.png"
                  plt.savefig(os.path.join(self.study_dir, fname))
                  plt.close("all")
  
                  md += f'## {algorithm} {title.replace("_", " ").title()}\n\n'
                  md += (
                      f"![{algorithm} {data_type} {title}]({fname})\n\n"
                  )
  
          except Exception as e:
              print(str(e))
  
      matplotlib.rcParams["figure.figsize"] = matplotlib_default_figsize
      plt.style.use("default")
  
      with open(os.path.join(self.study_dir, "README.md"), "a") as fout:
          fout.write(md)
          fout.write("\n\n[<< Go back](../README.md)\n")
  
imports: import json
  import os
  import warnings
  import joblib
  import matplotlib
  import optuna
  from matplotlib import pyplot
  from supervised.exceptions import AutoMLException
  from supervised.preprocessing.preprocessing_utils import PreprocessingUtils
  from supervised.tuner.optuna.catboost import CatBoostObjective
  from supervised.tuner.optuna.extra_trees import ExtraTreesObjective
  from supervised.tuner.optuna.knn import KNNObjective
  from supervised.tuner.optuna.lightgbm import LightgbmObjective
  from supervised.tuner.optuna.nn import NeuralNetworkObjective
  from supervised.tuner.optuna.random_forest import RandomForestObjective
  from supervised.tuner.optuna.xgboost import XgboostObjective
  from supervised.utils.metric import Metric
  from supervised.utils.jsonencoder import MLJSONEncoder
label_desc: Use image node_id 7 for calling the OptunaTuner obj's underlying member method code with example usage: obj.plot_study(algorithm, data_type, study) without return types