class_docstr: A grid of :class:`PlotlyViewPlot` instances.
  
  Args:
      plots: a :class:`PlotlyViewPlot` or iterable of :class:`PlotlyViewPlot`
          instances
      shape (None): the ``(rows, cols)`` shape to use for the grid
      hgap (None): a horizontal spacing between the subplots, in ``[0, 1]``
      vgap (None): a vertical spacing between the subplots, in ``[0, 1]``
      init_view (None): an optional initial
          :class:`fiftyone.core.collections.SampleCollection` to load
      **kwargs: optional parameters for
          :meth:`plotly:plotly.graph_objects.Figure.update_layout`
code: def _make_widget(self):
      widget = _make_composite_widget(
          self.plots, shape=self.shape, hgap=self.hgap, vgap=self.vgap
      )
  
      layout = _DEFAULT_LAYOUT.copy()
      layout.update(self.layout)
  
      widget.update_layout(**layout)
  
      return widget
  
imports: import itertools
  from operator import itemgetter
  import numpy
  import eta.core.utils
  import plotly.subplots
  import plotly.graph_objects
  import fiftyone.core.aggregations
  from .base import ViewPlot
  from .plotly import PlotlyWidgetMixin
label_desc: Use image node_id 4 for calling the ViewGrid obj's underlying member method code with example usage: obj._make_widget() and returns: widget