code: def _build(self):
          
          if not self.layers:
              self += geom_blank()
  
          self.layout = Layout()
          layers = self.layers
          scales = self.scales
          layout = self.layout
  
          # Give each layer a copy of the data that it will need
          layers.generate_data(self.data)
  
          # Initialise panels, add extra data for margins & missing
          # facetting variables, and add on a PANEL variable to data
          layout.setup(layers, self)
  
          # Compute aesthetics to produce data with generalised
          # variable names
          layers.compute_aesthetics(self)
  
          # Transform data using all scales
          layers.transform(scales)
  
          # Map and train positions so that statistics have access
          # to ranges and all positions are numeric
          layout.train_position(layers, scales.x, scales.y)
          layout.map_position(layers)
  
          # Apply and map statistics
          layers.compute_statistic(layout)
          layers.map_statistic(self)
  
          # Make sure missing (but required) aesthetics are added
          scales.add_missing(('x', 'y'))
  
          # Prepare data in geoms
          # e.g. from y and width to ymin and ymax
          layers.setup_data()
  
          # Apply position adjustments
          layers.compute_position(layout)
  
          # Reset position scales, then re-train and map.  This
          # ensures that facets have control over the range of
          # a plot.
          layout.reset_position_scales()
          layout.train_position(layers, scales.x, scales.y)
          layout.map_position(layers)
  
          # Train and map non-position scales
          npscales = scales.non_position_scales()
          if len(npscales):
              layers.train(npscales)
              layers.map(npscales)
  
          # Train coordinate system
          layout.setup_panel_params(self.coordinates)
  
          # fill in the defaults
          layers.use_defaults()
  
          # Allow stats to modify the layer data
          layers.finish_statistics()
  
          # Allow layout to modify data before rendering
          layout.finish_data(layers)
docs: Build ggplot for rendering.
  
          Notes
          -----
          This method modifies the ggplot object. The caller is
          responsible for making a copy and using that to make
          the method call.