code: def decisions_multiclass(
      df_preds,
      shap_values,
      expected_value,
      X_vald,
      y_vald,
      model_file_path,
      learner_name,
      class_names,
  ):
      for decision_type in ["worst", "best"]:
          m = 1 if decision_type == "worst" else -1
          for i in range(4):
              fig = plt.gcf()
              shap.multioutput_decision_plot(
                  list(expected_value),
                  shap_values,
                  row_index=df_preds.lp.iloc[m * i],
                  show=False,
                  legend_labels=class_names,
                  title=f"It should be {class_names[df_preds.target.iloc[m*i]]}",
              )
              fig.tight_layout(pad=2.0)
              fig.savefig(
                  os.path.join(
                      model_file_path,
                      f"{learner_name}_sample_{i}_{decision_type}_decisions.png",
                  )
              )
              plt.close("all")
  
imports: import logging
  import os
  import matplotlib.pyplot
  import numpy
  import pandas
  import shap
  from sklearn.preprocessing import OneHotEncoder
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION
  from supervised.utils.config import LOG_LEVEL
  import warnings
label_desc: Use image node_id 10 for calling the PlotSHAP obj's underlying member method code with example usage: obj.decisions_multiclass(df_preds, shap_values, expected_value, X_vald, y_vald, model_file_path, learner_name, class_names) without return types