class_docstr: A base class of the plot objects.
  
  Do not use this class explicitly.
  
  Instead you should construct its objects with functions `ggplot()`, `geom_point()`,
  `position_dodge()`, `scale_x_continuous()` etc.
class_docstr_tok: ["A","base","class","of","the","plot","objects",".","Do","not","use","this","class","explicitly",".","Instead","you","should","construct","its","objects","with","functions","`","ggplot","(",")","`",",","`","geom_point","(",")","`",",","`","position_dodge","(",")","`",",","`","scale_x_continuous","(",")","`","etc","."]
code: def __add__(self, other):
      if isinstance(other, DummySpec):
          # nothing
          return self
  
      """
              self + plot -> fail
              self + other_feature -> [self,other_feature]
          """
      if isinstance(other, PlotSpec):
          # pass and fail
          pass
      if isinstance(other, FeatureSpec):
          arr = FeatureSpecArray(self, other)
          return arr
  
      raise TypeError(
          "unsupported operand type(s) for +: {} and {}".format(
              self.__class__, other.__class__
          )
      )
  
imports: import io
  import json
  import os
  from typing import Union
  from lets_plot._global_settings import get_global_bool, has_global_value, FRAGMENTS_ENABLED
label_desc: Use image node_id 5 for calling the FeatureSpec obj's underlying member method code with example usage: obj.__add__(other) and returns: self, arr