code: def categorize(self, name, value, criteria,
                     color=None, marker=None, linestyle=None):
          
          # add plotting run control
          for kind, arg in [('color', color), ('marker', marker),
                            ('linestyle', linestyle)]:
              if arg:
                  run_control().update({kind: {name: {value: arg}}})
  
          # find all data that matches categorization
          rows = _apply_criteria(self.data, criteria,
                                 in_range=True, return_test='all')
          idx = _meta_idx(rows)
  
          if len(idx) == 0:
              logger().info("No scenarios satisfy the criteria")
              return  # EXIT FUNCTION
  
          # update metadata dataframe
          self._new_meta_column(name)
          self.meta.loc[idx, name] = value
          msg = '{} scenario{} categorized as `{}: {}`'
          logger().info(msg.format(len(idx), '' if len(idx) == 1 else 's',
                                   name, value))
docs: Assign scenarios to a category according to specific criteria
          or display the category assignment
  
          Parameters
          ----------
          name: str
              category column name
          value: str
              category identifier
          criteria: dict
              dictionary with variables mapped to applicable checks
              ('up' and 'lo' for respective bounds, 'year' for years - optional)
          color: str
              assign a color to this category for plotting
          marker: str
              assign a marker to this category for plotting
          linestyle: str
              assign a linestyle to this category for plotting