class_docstr: A LayoutPlot accepts either a Layout or a NdLayout and
  displays the elements in a cartesian grid in scanline order.
code: def __init__(self, layout, keys=None, **params):
      super().__init__(layout=layout, keys=keys, **params)
      with mpl.rc_context(rc=self.fig_rcparams):
          (
              self.subplots,
              self.subaxes,
              self.layout,
          ) = self._compute_gridspec(layout)
      if self.top_level:
          self.traverse(
              lambda x: attach_streams(self, x.hmap, 2),
              [GenericElementPlot],
          )
  
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 LayoutPlot object from inherited base classes: GenericLayoutPlot, CompositePlot with example: obj = LayoutPlot(layout, keys)