code: def _compute(self):
          
          self._x_pos = [
              (x + 1) / self._order for x in range(self._order)
          ] if self._order != 1 else [.5]  # Center if only one value
  
          previous = [[self.zero, self.zero] for i in range(self._len)]
          for i, serie in enumerate(self.series):
              y_height = -sum(serie.safe_values) / 2
              all_x_pos = [0] + self._x_pos
              serie.points = []
              for j, value in enumerate(serie.values):
                  poly = []
                  poly.append((all_x_pos[i], previous[j][0]))
                  poly.append((all_x_pos[i], previous[j][1]))
                  previous[j][0] = y_height
                  y_height = previous[j][1] = y_height + value
                  poly.append((all_x_pos[i + 1], previous[j][1]))
                  poly.append((all_x_pos[i + 1], previous[j][0]))
                  serie.points.append(poly)
  
          val_max = max(list(map(sum, cut(self.series, 'values'))) + [self.zero])
          self._box.ymin = -val_max
          self._box.ymax = val_max
  
          if self.range and self.range[0] is not None:
              self._box.ymin = self.range[0]
  
          if self.range and self.range[1] is not None:
              self._box.ymax = self.range[1]
docs: Compute y min and max and y scale and set labels