code: def main():
      if len(sys.argv) != 2:
          print("Usage: hash_join_graphs.py <data>.json")
          print(
              "This script expects there to be a counter called rows/sec as a field of every test in the JSON file."
          )
          return
  
      tests = organize_tests(sys.argv[1])
  
      for i, test_name in enumerate(tests.keys()):
          test = tests[test_name]
          sorted_argnames = (
              test.get_argnames_by_cardinality_increasing()
          )
          # Create a graph per lowest-cardinality arg
          # Create a line per second-lowest-cardinality arg
          # Use highest-cardinality arg as X axis
          fig = plt.figure(i)
          num_args = len(sorted_argnames)
          if num_args == 3:
              fig.suptitle(test_name)
              plot_3d(test, sorted_argnames)
              fig.subplots_adjust(hspace=0.4)
          elif num_args == 2:
              ax = plt.subplot()
              plot_2d(test, sorted_argnames, ax, test_name)
          else:
              fig.suptitle(test_name)
              ax = plt.subplot()
              plot_1d(test, sorted_argnames[0], ax)
          fig.set_size_inches(16, 9)
          fig.savefig(
              "%s.svg" % test_name, dpi=fig.dpi, bbox_inches="tight"
          )
          plt.show()
  
file_path: arrow/cpp/src/arrow/acero/hash_join_graphs.py
imports: import math
  import sys
  import json
  import matplotlib.pyplot
  import seaborn
label_desc: Use image node_id 8 for calling a global function with example usage: main() without return types