docs: def register_plotter(identifier, module, plotter_name, plotter_cls=None,
                       sorter=True, plot_func=True, import_plotter=None,
                       **kwargs):
      """
      Register a :class:`psyplot.plotter.Plotter` for the projects
  
      This function registers plotters for the :class:`Project` class to allow
      a dynamical handling of different plotter classes.
  
      Parameters
      ----------
      %(Project._register_plotter.parameters.no_plotter_cls)s
      sorter: bool, optional
          If True, the :class:`Project` class gets a new property with the name
          of the specified `identifier` which allows you to access the instances
          that are plotted by the specified `plotter_name`
      plot_func: bool, optional
          If True, the :class:`ProjectPlotter` (the class that holds the
          plotting method for the :class:`Project` class and can be accessed via
          the :attr:`Project.plot` attribute) gets an additional method to plot
          via the specified `plotter_name` (see `Other Parameters` below.)
      import_plotter: bool, optional
          If True, the plotter is automatically imported, otherwise it is only
          imported when it is needed. If `import_plotter` is None, then it is
          determined by the :attr:`psyplot.rcParams` ``'project.auto_import'``
          item.
  
      Other Parameters
      ----------------
      %(ProjectPlotter._register_plotter.other_parameters)s
      """
      if plotter_cls is None:
          if ((import_plotter is None and rcParams['project.auto_import']) or
                  import_plotter):
              try:
                  plotter_cls = getattr(import_module(module), plotter_name)
              except Exception as e:
                  critical(("Could not import %s!\n" % module) +
                           e.message if six.PY2 else str(e))
                  return
      if sorter:
          if hasattr(Project, identifier):
              raise ValueError(
                  "Project class already has a %s attribute" % identifier)
          Project._register_plotter(
              identifier, module, plotter_name, plotter_cls)
      if plot_func:
          if hasattr(ProjectPlotter, identifier):
              raise ValueError(
                  "Project class already has a %s attribute" % identifier)
          ProjectPlotter._register_plotter(
              identifier, module, plotter_name, plotter_cls, **kwargs)
          DatasetPlotter._register_plotter(
              identifier, module, plotter_name, plotter_cls, **kwargs)
          DataArrayPlotter._register_plotter(
              identifier, module, plotter_name, plotter_cls, **kwargs)
      if identifier not in registered_plotters:
          kwargs.update(dict(
              module=module, plotter_name=plotter_name, sorter=sorter,
              plot_func=plot_func, import_plotter=import_plotter))
          registered_plotters[identifier] = kwargs
      return