docs: def projection(self, *axes, **kwargs):
          """Projection to lower-dimensional histogram.
          
          The inheriting class should implement the _projection_class_map
          class attribute to suggest class for the projection. If the 
          arguments don't match any of the map keys, HistogramND is used.        
          """
          axes, _ = self._get_projection_axes(*axes)
          axes = tuple(sorted(axes))
          if axes in self._projection_class_map:
              klass = self._projection_class_map[axes]
              return HistogramND.projection(self, *axes, type=klass, **kwargs)
          else:
              return HistogramND.projection(self, *axes, **kwargs)