public Numerical1DDataDomainValues(TablePerspective data, EDimension main) {
    super(data, main);
    Perspective p = main.select(data.getDimensionPerspective(), data.getRecordPerspective());
    this.groups = Numerical1DMixin.extractGroups(p, this);
    this.isInteger = DataSupportDefinitions.dataClass(EDataClass.NATURAL_NUMBER).apply(data);

    Object desc = getDescription();
    Float min = null, max = null;
    if (desc instanceof NumericalProperties) {
      min = ((NumericalProperties) desc).getMin();
      max = ((NumericalProperties) desc).getMax();
    }
    if (min == null || min.isNaN() || max == null || max.isNaN()) {
      DoubleStatistics stats = createStats(this, groups);
      if (min == null || min.isNaN()) min = (float) stats.getMin();
      if (max == null || max.isNaN()) max = (float) stats.getMax();
    }
    this.mixin = new Numerical1DMixin(this, groups, min.floatValue(), max.floatValue());
  }
 @Override
 protected void fill(Builder b, TypedList data, EDimension dim, boolean[] existNeigbhor) {
   super.fill(b, data, dim, existNeigbhor);
   mixin.fill(b, data, dim, existNeigbhor);
 }
 @Override
 public Collection<String> getDefaultVisualization() {
   return mixin.getDefaultVisualization();
 }