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.
code: def __init__(self, layout, layout_type, subaxes, subplots, **params):
      # The AdjointLayout ViewableElement object
      self.layout = layout
      # Type may be set to 'Embedded Dual' by a call it grid_situate
      self.layout_type = layout_type
      self.view_positions = self.layout_dict[self.layout_type]
  
      # The supplied (axes, view) objects as indexed by position
      self.subaxes = {
          pos: ax for ax, pos in zip(subaxes, self.view_positions)
      }
      super().__init__(subplots=subplots, **params)
  
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 1 to create a new AdjointLayoutPlot object from inherited base classes: MPLPlot, GenericAdjointLayoutPlot with example: obj = AdjointLayoutPlot(layout, layout_type, subaxes, subplots)