docs: def plot_lines(f, x, samples, ax=None, **kwargs):
      r"""
      Plot a representative set of functions to sample
  
      Additionally, if a list of log-evidences are passed, along with list of
      functions, and list of samples, this function plots the probability mass
      function for all models marginalised according to the evidences.
  
      Parameters
      ----------
      f: function
          function :math:`f(x;\theta)` (or list of functions for each model) with
          dependent variable :math:`x`, parameterised by :math:`\theta`.
  
      x: 1D array-like
          `x` values to evaluate :math:`f(x;\theta)` at.
  
      samples: 2D array-like
          :math:`\theta` samples (or list of :math:`\theta` samples) to evaluate
          :math:`f(x;\theta)` at.
          `shape = (nsamples, npars)`
  
      ax: axes object, optional
          :class:`matplotlib.axes._subplots.AxesSubplot` to plot the contours
          onto. If unsupplied, then :func:`matplotlib.pyplot.gca()` is used to
          get the last axis used, or create a new one.
  
      logZ: 1D array-like, optional
          log-evidences of each model if multiple models are passed.
          Should be same length as the list `f`, and need not be normalised.
          Default: `numpy.ones_like(f)`
  
      weights: 1D array-like, optional
          sample weights (or list of weights), if desired. Should have length
          same as `samples.shape[0]`.
          Default: `numpy.ones_like(samples)`
  
      ntrim: int, optional
          Approximate number of samples to trim down to, if desired. Useful if
          the posterior is dramatically oversampled.
          Default: None
  
      cache: str, optional
          File root for saving previous calculations for re-use
  
      parallel, tqdm_args:
          see docstring for :func:`fgivenx.parallel.parallel_apply`
  
      kwargs: further keyword arguments
          Any further keyword arguments are plotting keywords that are passed to
          :func:`fgivenx.plot.plot_lines`.
      """
      logZ = kwargs.pop('logZ', None)
      weights = kwargs.pop('weights', None)
      ntrim = kwargs.pop('ntrim', None)
      cache = kwargs.pop('cache', '')
      parallel = kwargs.pop('parallel', False)
      tqdm_kwargs = kwargs.pop('tqdm_kwargs', {})
  
      fsamps = compute_samples(f, x, samples, logZ=logZ,
                               weights=weights, ntrim=ntrim,
                               parallel=parallel, cache=cache,
                               tqdm_kwargs=tqdm_kwargs)
      fgivenx.plot.plot_lines(x, fsamps, ax, **kwargs)