class_docstr: Initially, a AdjointLayoutPlot computes an appropriate layout based for
  the number of Views in the AdjointLayout object it has been given, but
  when embedded in a NdLayout, it can recompute the layout to
  match the number of rows and columns as part of a larger grid.
docstr: Make adjustments to the positions of subplots (if available)
  relative to the main plot axes as required.
  
  This method is called by LayoutPlot after an initial pass
  used to position all the Layouts together. This method allows
  LayoutPlots to make final adjustments to the axis positions.
docstr_tok: ["Make","adjustments","to","the","positions","of","subplots","(","if","available",")","relative","to","the","main","plot","axes","as","required",".","This","method","is","called","by","LayoutPlot","after","an","initial","pass","used","to","position","all","the","Layouts","together",".","This","method","allows","LayoutPlots","to","make","final","adjustments","to","the","axis","positions","."]
code: def adjust_positions(self, redraw=True):
      """
      Make adjustments to the positions of subplots (if available)
      relative to the main plot axes as required.
  
      This method is called by LayoutPlot after an initial pass
      used to position all the Layouts together. This method allows
      LayoutPlots to make final adjustments to the axis positions.
      """
      checks = [self.view_positions, self.subaxes, self.subplots]
      right = all("right" in check for check in checks)
      top = all("top" in check for check in checks)
      if "main" not in self.subplots or not (top or right):
          return
      if redraw:
          self.handles["fig"].canvas.draw()
      main_ax = self.subplots["main"].handles["axis"]
      bbox = main_ax.get_position()
      if right:
          ax = self.subaxes["right"]
          subplot = self.subplots["right"]
          if isinstance(subplot, AdjoinedPlot):
              subplot_size = subplot.subplot_size
              border_size = subplot.border_size
          else:
              subplot_size = 0.25
              border_size = 0.25
          ax.set_position(
              [
                  bbox.x1 + bbox.width * border_size,
                  bbox.y0,
                  bbox.width * subplot_size,
                  bbox.height,
              ]
          )
          if isinstance(subplot, GridPlot):
              ax.set_aspect("equal")
      if top:
          ax = self.subaxes["top"]
          subplot = self.subplots["top"]
          if isinstance(subplot, AdjoinedPlot):
              subplot_size = subplot.subplot_size
              border_size = subplot.border_size
          else:
              subplot_size = 0.25
              border_size = 0.25
          ax.set_position(
              [
                  bbox.x0,
                  bbox.y1 + bbox.height * border_size,
                  bbox.width,
                  bbox.height * subplot_size,
              ]
          )
          if isinstance(subplot, GridPlot):
              ax.set_aspect("equal")
  
imports: from contextlib import contextmanager
  from itertools import chain
  import matplotlib
  import numpy
  import param
  from matplotlib import animation, gridspec, pyplot, rcParams
  from matplotlib.font_manager import font_scalings
  from mpl_toolkits.mplot3d import Axes3D
  from ...core import AdjointLayout, Collator, CompositeOverlay, Element, Empty, GridMatrix, GridSpace, HoloMap, Layout, NdLayout
  from ...core.options import SkipRendering, Store
  from ...core.util import int_to_alpha, int_to_roman, wrap_tuple_streams
  from ..plot import DimensionedPlot, GenericAdjointLayoutPlot, GenericCompositePlot, GenericElementPlot, GenericLayoutPlot
  from ..util import attach_streams, collate, displayable
  from .util import compute_ratios, fix_aspect, get_old_rcparams
label_desc: Use image node_id 3 for calling the AdjointLayoutPlot obj's underlying member method code with example usage: obj.adjust_positions(redraw) without return types