class_docstr: Collection of plots created by ggplot function.
  Use method `add_plot()` to add plot to 'bunch'.
  Each plot can have arbitrary location and size.
  Use `show()` to draw all plots in bunch.
  
  Examples
  --------
  .. jupyter-execute::
      :linenos:
      :emphasize-lines: 10-14
  
      import numpy as np
      from lets_plot import *
      LetsPlot.setup_html()
      np.random.seed(42)
      n = 100
      x = np.arange(n)
      y = np.random.normal(size=n)
      w, h = 200, 150
      p = ggplot({'x': x, 'y': y}, aes(x='x', y='y')) + ggsize(w, h)
      bunch = GGBunch()
      bunch.add_plot(p + geom_point(), 0, 0)
      bunch.add_plot(p + geom_histogram(bins=3), w, 0)
      bunch.add_plot(p + geom_line(), 0, h, 2*w, h)
      bunch.show()
docstr: Add plot to 'bunch'.
  
  Parameters
  ----------
  plot_spec
      Plot specification created by `ggplot()` function.
  x : int
      x-coordinate of plot origin in px.
  y : int
      y-coordinate of plot origin in px.
  width : int
      Width of plot in px.
  height : int
      Height of plot in px.
docstr_tok: ["Add","plot","to","'bunch","'",".","Parameters","--","--","--","--","--","plot_spec","Plot","specification","created","by","`","ggplot","(",")","`","function",".","x",":","int","x-coordinate","of","plot","origin","in","px",".","y",":","int","y-coordinate","of","plot","origin","in","px",".","width",":","int","Width","of","plot","in","px",".","height",":","int","Height","of","plot","in","px","."]
code: def add_plot(
      self, plot_spec: PlotSpec, x, y, width=None, height=None
  ):
      """
      Add plot to 'bunch'.
  
      Parameters
      ----------
      plot_spec
          Plot specification created by `ggplot()` function.
      x : int
          x-coordinate of plot origin in px.
      y : int
          y-coordinate of plot origin in px.
      width : int
          Width of plot in px.
      height : int
          Height of plot in px.
  
      """
      if width and not height:
          raise TypeError("height argument is required")
      if height and not width:
          raise TypeError("width argument is required")
  
      assert isinstance(x, numbers.Number), "'x' must be numeric"
      assert isinstance(y, numbers.Number), "'y' must be numeric"
      if width:
          assert isinstance(
              width, numbers.Number
          ), "'width' must be numeric"
      if height:
          assert isinstance(
              height, numbers.Number
          ), "'height' must be numeric"
  
      self.items.append(
          dict(
              feature_spec=plot_spec,
              x=x,
              y=y,
              width=width,
              height=height,
          )
      )
  
file_path: lets-plot/python-package/lets_plot/plot/plot.py
imports: import json
  import numbers
  from lets_plot._global_settings import has_global_value, get_global_val, MAX_WIDTH, MAX_HEIGHT, PLOT_THEME
  from lets_plot.geo_data_internals.utils import is_geocoder
  from lets_plot.plot.core import FeatureSpec
  from lets_plot.plot.core import PlotSpec
  from lets_plot.plot.util import as_annotated_data
label_desc: Use image node_id 2 for calling the GGBunch obj's underlying member method code with example usage: obj.add_plot(plot_spec, x, y, width, height) without return types