docstr: Plot a metric against a parameter for all experiments in
  this list. If the experiments define primary metric, the
  metric of best checkpoint will be used, otherwise the metric
  will come from the latest checkpoint.
docstr_tok: ["Plot","a","metric","against","a","parameter","for","all","experiments","in","this","list",".","If","the","experiments","define","primary","metric",",","the","metric","of","best","checkpoint","will","be","used",",","otherwise","the","metric","will","come","from","the","latest","checkpoint","."]
code: def scatter(
      self,
      param: str,
      metric: Optional[str] = None,
      logx=False,
      logy=False,
  ):
      """
      Plot a metric against a parameter for all experiments in
      this list. If the experiments define primary metric, the
      metric of best checkpoint will be used, otherwise the metric
      will come from the latest checkpoint.
      """
      import matplotlib.pyplot as plt  # type: ignore
  
      if metric is None:
          metric = self.primary_metric()
  
      names = []
      for exp in self:
          chk = exp.best()
          if chk is None:
              chk = exp.latest()
          if chk is None:
              console.warn(
                  "Experiment '{}' does not have any checkpoints".format(
                      exp.short_id()
                  )
              )
              continue
          if metric not in chk.metrics:
              console.warn(
                  "Metric '{}' does not exist in checkpoint {} in experiment {}".format(
                      metric, chk.short_id(), exp.short_id()
                  )
              )
              continue
          if param not in exp.params:
              console.warn(
                  "Parameter '{}' does not exist in experiment {}".format(
                      param, exp.short_id()
                  )
              )
              continue
          plt.scatter([exp.params[param]], [chk.metrics[metric]])
          names.append(exp.short_id())
  
      plt.legend(names, bbox_to_anchor=(1, 1))
      plt.xlabel(param)
      plt.ylabel(metric)
  
      if logx:
          plt.xscale("log")
      if logy:
          plt.yscale("log")
  
imports: import datetime
  import getpass
  import html
  import json
  import math
  import os
  import shlex
  import sys
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, MutableSequence, Optional, Tuple
  from .None import console
  from .checkpoint import Checkpoint, CheckpointList, PrimaryMetric
  from .metadata import parse_rfc3339, rfc3339_datetime
  from .packages import get_imported_packages
  from .system import get_python_version
  from .validate import check_path
  from .version import version
label_desc: Use image node_id 3 for calling the ExperimentList obj's underlying member method code with example usage: obj.scatter(param, metric, logx, logy) without return types