code: def lines(
      x=None,
      y=None,
      samples=None,
      ids=None,
      link_field=None,
      sizes=None,
      labels=None,
      colors=None,
      marker_size=None,
      title=None,
      xlabel=None,
      ylabel=None,
      ax=None,
      ax_equal=False,
      figsize=None,
      style=None,
      buttons=None,
      **kwargs,
  ):
      """Plots the given lines(s) data.
  
      You can attach plots generated by this method to an App session via its
      :attr:`fiftyone.core.session.Session.plots` attribute, which will
      automatically sync the session's view with the currently selected points in
      the plot. To enable this functionality, you must pass ``samples`` to this
      method.
  
      You can use the ``sizes`` parameter to scale the sizes of the points.
  
      Args:
          x (None): the x data to plot. Can be any of the following:
  
              -   an array-like of values
              -   a ``num_lines x n`` array-like or list of length ``num_lines``
                  of array-likes of values for multiple line traces
              -   the name of a sample field or ``embedded.field.name`` of
                  ``samples`` from which to extract values for a single line
              -   the name of a frame field or ``frames.embbeded.field.name`` of
                  ``samples`` from which to extract values for per-sample line
                  traces
              -   a :class:`fiftyone.core.expressions.ViewExpression` that
                  resolves to a list (one line plot) or list of lists (muliple
                  line plots) of numeric values to compute from ``samples`` via
                  :meth:`fiftyone.core.collections.SampleCollection.values`
          y (None): the y data to plot. Can be any of the following:
  
              -   an array-like of values
              -   a ``num_lines x n`` array-like or list of length ``num_lines``
                  of array-likes of values for multiple line traces
              -   the name of a sample field or ``embedded.field.name`` of
                  ``samples`` from which to extract values for a single line
              -   the name of a frame field or ``frames.embbeded.field.name`` of
                  ``samples`` from which to extract values for per-sample line
                  traces
              -   a :class:`fiftyone.core.expressions.ViewExpression` that
                  resolves to a list (one line plot) or list of lists (muliple
                  line plots) of numeric values to compute from ``samples`` via
                  :meth:`fiftyone.core.collections.SampleCollection.values`
          samples (None): the :class:`fiftyone.core.collections.SampleCollection`
              whose data is being visualized
          ids (None): an array-like of IDs of same shape as ``y``. If not
              provided but ``samples`` are provided, the appropriate IDs will be
              extracted from the samples
          link_field (None): a field of ``samples`` whose data corresponds to
              ``y``. Can be any of the following:
  
              -   ``None``, if the line data correspond to samples (single trace)
                  or frames (multiple traces)
              -   ``"frames"``, if the line data correspond to frames (multiple
                  traces). This option exists only for consistency with other
                  plotting methods; in practice, it will be automatically
                  inferred whenever multiple traces are being plotted
              -   the name of a :class:`fiftyone.core.labels.Label` field, if the
                  line data correspond to the labels in this field
          sizes (None): data to use to scale the sizes of the points. Can be any
              of the following:
  
              -   an array-like of numeric values of same shape as ``y``
              -   the name of a sample field (single trace) or frame field
                  (multiple traces) from which to extract numeric values
              -   a :class:`fiftyone.core.expressions.ViewExpression` defining
                  sample-level (single trace) or frame-level (multiple traces)
                  numeric values to compute from ``samples`` via
                  :meth:`fiftyone.core.collections.SampleCollection.values`
          labels (None): a label or list of labels for the line traces
          colors (None): a list of colors recognized by ``matplotlib`` to use for
              the line traces. See
              https://matplotlib.org/stable/tutorials/colors/colormaps.html for
              more information
          marker_size (None): the marker size to use. If ``sizes`` are provided,
              this value is used as a reference to scale the sizes of all points
          title (None): a title for the plot
          xlabel (None): an x-axis label
          ylabel (None): a y-axis label
          ax (None): a matplotlib axis to plot in
          ax_equal (False): whether to set ``axis("equal")``
          figsize (None): a ``(width, height)`` for the figure, in inches
          style (None): a style to use for the plot
          buttons (None): a list of ``(label, icon_image, callback)`` tuples
              defining buttons to add to the plot
          **kwargs: optional keyword arguments for matplotlib's ``plot()`` and
              ``scatter()``
  
      Returns:
          one of the following
  
          -   an :class:`InteractiveCollection`, when IDs are available
          -   a matplotlib figure, otherwise
      """
      (
          x,
          y,
          ids,
          link_field,
          labels,
          sizes,
          is_frames,
      ) = parse_lines_inputs(
          x=x,
          y=y,
          samples=samples,
          ids=ids,
          link_field=link_field,
          labels=labels,
          sizes=sizes,
      )
  
      if style is None:
          style = _DEFAULT_STYLE
  
      if is_frames:
          show_legend = True
      else:
          show_legend = labels[0] is not None
  
      if ids[0] is not None:
          ids = list(itertools.chain.from_iterable(ids))
      else:
          ids = None
  
      with plt.style.context(style):
          collection = _plot_lines(
              x,
              y,
              sizes=sizes,
              labels=labels,
              colors=colors,
              marker_size=marker_size,
              xlabel=xlabel,
              ylabel=ylabel,
              ax=ax,
              ax_equal=ax_equal,
              figsize=figsize,
              show_legend=show_legend,
              **kwargs,
          )
  
          if title is not None:
              collection.axes.figure.suptitle(title)
  
          if samples is None:
              fig = collection.axes.figure
              plt.tight_layout()
              return fig
  
          (
              link_type,
              label_fields,
              selection_mode,
              init_fcn,
          ) = InteractiveCollection.recommend_link_type(
              label_field=link_field,
              samples=samples,
          )
  
          return InteractiveCollection(
              collection,
              ids=ids,
              buttons=buttons,
              link_type=link_type,
              init_view=samples,
              label_fields=label_fields,
              selection_mode=selection_mode,
              init_fcn=init_fcn,
          )
  
imports: import itertools
  import logging
  import numpy
  import matplotlib
  from matplotlib.widgets import Button, LassoSelector
  from matplotlib.path import Path
  import matplotlib.pyplot
  from mpl_toolkits.axes_grid1 import make_axes_locatable
  from mpl_toolkits.axes_grid1.inset_locator import InsetPosition
  from mpl_toolkits.mplot3d import Axes3D
  import sklearn.metrics.pairwise
  import sklearn.metrics
  import eta.core.utils
  import fiftyone.core.context
  import fiftyone.core.utils
  from .base import InteractivePlot
  from .utils import best_fit_line, load_button_icon, parse_lines_inputs, parse_locations, parse_scatter_inputs
label_desc: Use image node_id 6 for calling a global function with example usage: lines(x, y, samples, ids, link_field, sizes, labels, colors, marker_size, title, xlabel, ylabel, ax, ax_equal, figsize, style, buttons) and returns: InteractiveCollection, fig