code: def _visualize_variance(self):
      x_ticks_param = list()
      x_ticks_loss = list()
      for param in self.data_under_lock.keys():
          x_ticks_param.append(param)
          x_ticks_loss.append(f"{param}_loss")
      param_values_data = list()
      losses_data = list()
      for value in self.data_under_lock.values():
          param_values_data.append(value[0])
          losses_data.append(value[1])
  
      fig, (ax1, ax2) = plt.subplots(2, figsize=(20, 10))
      ax1.boxplot(param_values_data)
      ax2.boxplot(losses_data)
      ax1.set_title("param")
      ax1.set_xticks(range(1, len(x_ticks_param) + 1))
      ax1.set_xticklabels(x_ticks_param)
      ax2.set_title("loss")
      ax2.set_xticks(range(1, len(x_ticks_loss) + 1))
      ax2.set_xticklabels(x_ticks_loss)
  
      plt.savefig(
          join(self._path_to_save, f"{self.operation_type}_hp_sa.jpg")
      )
  
imports: from copy import deepcopy
  from os.path import join
  from threading import Lock, Thread
  from typing import List, Union
  import matplotlib.pyplot
  import numpy
  from golem.core.log import default_log
  from sklearn.metrics import mean_squared_error
  from fedot.core.data.data import InputData
  from fedot.core.operations.operation_template import extract_operation_params
  from fedot.core.pipelines.node import PipelineNode
  from fedot.core.pipelines.pipeline import Pipeline
  from fedot.core.utils import default_fedot_data_dir
  from fedot.structural_analysis.node_sa_approaches import NodeAnalyzeApproach
  from fedot.structural_analysis.operations_hp_sensitivity.problem import OneOperationProblem
  from fedot.structural_analysis.operations_hp_sensitivity.sa_and_sample_methods import analyze_method_by_name, sample_method_by_name
  from fedot.structural_analysis.sa_requirements import HyperparamsAnalysisMetaParams, SensitivityAnalysisRequirements
label_desc: Use image node_id 8 for calling the OneOperationHPAnalyze obj's underlying member method code with example usage: obj._visualize_variance() without return types