code: def labs(title=None, subtitle=None, caption=None, **labels):
      """
      Change plot title and axis label.
  
      Parameters
      ----------
      title : str
          The text for the plot title.
      subtitle : str
          The text for the plot subtitle.
      caption : str
          The text for the plot caption.
      labels
          Name-value pairs where name should be an aesthetic and value should be a string, e.g. `color="New Color label"`.
  
      Returns
      -------
      `FeatureSpec` or `FeatureSpecArray`
          Labels specification.
  
      Examples
      --------
      .. jupyter-execute::
          :linenos:
          :emphasize-lines: 5-6
          
          from lets_plot import *
          LetsPlot.setup_html()
          data = {'x': list(range(10)), 'y': list(range(10))}
          ggplot(data, aes('x', 'y')) + geom_point(aes(size='y')) + \\
              labs(title='New plot title', subtitle='The plot subtitle', caption='The plot caption', \\
                   x='New x axis label', y='New y axis label', size='New legend title')
  
      """
      specs = []
  
      # handle ggtitle
      if title is not None or subtitle is not None:
          specs.append(
              FeatureSpec(
                  "ggtitle", name=None, text=title, subtitle=subtitle
              )
          )
  
      # plot caption
      if caption is not None:
          specs.append(FeatureSpec("caption", name=None, text=caption))
  
      # scales
      for aes, label in labels.items():
          specs.append(_scale(aesthetic=aes, name=label))
  
      if len(specs) == 1:
          return specs[0]
      return FeatureSpecArray(*specs)
  
imports: from .core import FeatureSpec, FeatureSpecArray
  from .scale import _scale
label_desc: Use image node_id 4 for calling a global function with example usage: labs(title, subtitle, caption) and returns: FeatureSpecArray, specs