code: def plot_matrix_vector_dotproduct_benchmark(result_dir=None):
      df, result_dir = _load_benchmark_data(result_dir)
  
      fig, ax = plt.subplots(1, 1)
      grouped_times = df.groupby("build")["time"]
  
      mean_times = grouped_times.mean()
      confidence_times = grouped_times.std() / np.sqrt(
          grouped_times.count()
      )
      confidence_times *= 1.96
  
      mean_times.plot(
          kind="bar",
          yerr=confidence_times,
          ax=ax,
          error_kw={"capsize": 10},
          rot=0,
      )
  
      for p in ax.patches:
          ax.annotate(
              "{:.4f}".format(p.get_height()),
              (p.get_x() + p.get_width() / 4, p.get_height() / 2),
          )
  
      ax.set_ylabel("Time (s)")
      ax.set_title(BASE_FILE_NAME)
  
      fig.tight_layout()
  
      plot_file_path = os.path.abspath(
          os.path.join(result_dir, "result.png")
      )
      plt.savefig(plot_file_path)
      print("saved figure in {}".format(plot_file_path))
  
imports: import os
  import matplotlib.pyplot
  import numpy
  import pandas
  from tools.benchmark.benchmark_util import iter_executables, run_benchmark, default_result_dir, get_last_result_dir, extract_build_from_name
label_desc: Use image node_id 3 for calling a global function with example usage: plot_matrix_vector_dotproduct_benchmark(result_dir) without return types