docs: private RectangleArranger<PlotItem> arrangeVisualizations(double width, double height) {
      if(!(width > 0. && height > 0.)) {
        LOG.warning("No size information during arrange()", new Throwable());
        return new RectangleArranger<>(1., 1.);
      }
      RectangleArranger<PlotItem> plotmap = new RectangleArranger<>(width, height);
  
      Hierarchy<Object> vistree = context.getVisHierarchy();
      for(It<Projector> iter2 = vistree.iterAll().filter(Projector.class); iter2.valid(); iter2.advance()) {
        Collection<PlotItem> projs = iter2.get().arrange(context);
        for(PlotItem it : projs) {
          if(it.w <= 0.0 || it.h <= 0.0) {
            LOG.warning("Plot item with improper size information: " + it);
            continue;
          }
          plotmap.put(it.w, it.h, it);
        }
      }
  
      nextTask: for(It<VisualizationTask> iter2 = vistree.iterAll().filter(VisualizationTask.class); iter2.valid(); iter2.advance()) {
        VisualizationTask task = iter2.get();
        if(!task.isVisible()) {
          continue;
        }
        if(vistree.iterParents(task).filter(Projector.class).valid()) {
          continue nextTask;
        }
        if(task.getRequestedWidth() <= 0.0 || task.getRequestedHeight() <= 0.0) {
          LOG.warning("Task with improper size information: " + task);
          continue;
        }
        PlotItem it = new PlotItem(task.getRequestedWidth(), task.getRequestedHeight(), null);
        it.tasks.add(task);
        plotmap.put(it.w, it.h, it);
      }
      return plotmap;
    }