docs: public void smooth(final List<Double> DATA_LIST) {
          int      size = DATA_LIST.size();
          double[] x    = new double[size];
          double[] y    = new double[size];
  
          low  = Statistics.getMin(DATA_LIST);
          high = Statistics.getMax(DATA_LIST);
          if (Double.compare(low, high) == 0) {
              low  = minValue;
              high = maxValue;
          }
          range = high - low;
  
          double minX  = graphBounds.getX();
          double maxX  = minX + graphBounds.getWidth();
          double minY  = graphBounds.getY();
          double maxY  = minY + graphBounds.getHeight();
          double stepX = graphBounds.getWidth() / (noOfDatapoints - 1);
          double stepY = graphBounds.getHeight() / range;
  
          for (int i = 0 ; i < size ; i++) {
              x[i] = minX + i * stepX;
              y[i] = maxY - Math.abs(low - DATA_LIST.get(i)) * stepY;
          }
  
          Pair<Double[], Double[]> px = computeControlPoints(x);
          Pair<Double[], Double[]> py = computeControlPoints(y);
  
          sparkLine.getElements().clear();
          for (int i = 0 ; i < size - 1 ; i++) {
              sparkLine.getElements().add(new MoveTo(x[i], y[i]));
              sparkLine.getElements().add(new CubicCurveTo(px.getKey()[i], py.getKey()[i], px.getValue()[i], py.getValue()[i], x[i + 1], y[i + 1]));
          }
          dot.setCenterX(maxX);
          dot.setCenterY(y[size - 1]);
      }