code: def iterator(self):
          
          if self.combined:
              grouped_data = [[(0, datum)] for datum in self.data]
              skip_dims = {"chain"}
          else:
              grouped_data = [datum.groupby("chain") for datum in self.data]
              skip_dims = set()
  
          label_dict = OrderedDict()
          for name, grouped_datum in zip(self.model_names, grouped_data):
              for _, sub_data in grouped_datum:
                  datum_iter = xarray_var_iter(
                      sub_data,
                      var_names=[self.var_name],
                      skip_dims=skip_dims,
                      reverse_selections=True,
                  )
                  for _, selection, values in datum_iter:
                      label = make_label(self.var_name, selection, position="beside")
                      if label not in label_dict:
                          label_dict[label] = OrderedDict()
                      if name not in label_dict[label]:
                          label_dict[label][name] = []
                      label_dict[label][name].append(values)
  
          y = self.y_start
          for label, model_data in label_dict.items():
              for model_name, value_list in model_data.items():
                  if model_name:
                      row_label = "{}: {}".format(model_name, label)
                  else:
                      row_label = label
                  for values in value_list:
                      yield y, row_label, label, values, self.model_color[model_name]
                      y += self.chain_offset
                  y += self.var_offset
              y += self.group_offset
docs: Iterate over models and chains for each variable.