docs: def share(self, base=None, keys=None, by=None, **kwargs):
          """
          Share the formatoptions of one plotter with all the others
  
          This method shares specified formatoptions from `base` with all the
          plotters in this instance.
  
          Parameters
          ----------
          base: None, Plotter, xarray.DataArray, InteractiveList, or list of them
              The source of the plotter that shares its formatoptions with the
              others. It can be None (then the first instance in this project
              is used), a :class:`~psyplot.plotter.Plotter` or any data object
              with a *psy* attribute. If `by` is not None, then it is expected
              that `base` is a list of data objects for each figure/axes
          %(Plotter.share.parameters.keys)s
          by: {'fig', 'figure', 'ax', 'axes'}
              Share the formatoptions only with the others on the same
              ``'figure'`` or the same ``'axes'``. In this case, base must either
              be ``None`` or a list of the types specified for `base`
          %(Plotter.share.parameters.no_keys|plotters)s
  
          See Also
          --------
          psyplot.plotter.share"""
          if by is not None:
              if base is not None:
                  if hasattr(base, 'psy') or isinstance(base, Plotter):
                      base = [base]
                  if by.lower() in ['ax', 'axes']:
                      bases = {ax: p[0] for ax, p in six.iteritems(
                          Project(base).axes)}
                  elif by.lower() in ['fig', 'figure']:
                      bases = {fig: p[0] for fig, p in six.iteritems(
                          Project(base).figs)}
                  else:
                      raise ValueError(
                          "*by* must be out of {'fig', 'figure', 'ax', 'axes'}. "
                          "Not %s" % (by, ))
              else:
                  bases = {}
              projects = self.axes if by == 'axes' else self.figs
              for obj, p in projects.items():
                  p.share(bases.get(obj), keys, **kwargs)
          else:
              plotters = self.plotters
              if not plotters:
                  return
              if base is None:
                  if len(plotters) == 1:
                      return
                  base = plotters[0]
                  plotters = plotters[1:]
              elif not isinstance(base, Plotter):
                  base = getattr(getattr(base, 'psy', base), 'plotter', base)
              base.share(plotters, keys=keys, **kwargs)