anchor.diff:    Range valueRange;
     bool transformsApplied;
   
  -  Visualisation() {
  +  Visualisation([String outputFolder = "output/image/", String outputFilename]) {
       xRange = new Range(double.INFINITY, double.NEGATIVE_INFINITY);
       yRange = new Range(double.INFINITY, double.NEGATIVE_INFINITY);
       valueRange = new Range(double.INFINITY, double.NEGATIVE_INFINITY);
  +    _outputFolder = outputFolder;
  +    _outputFilename = outputFilename;
     }
   
     /// Add a data point defined by the [x] and [y] coordinates and its [value].
  
positive.code:   void _applyTransforms() {
      // Apply the transforms only once. This allows for multiple render calls but
      // a single transforms application phase.
      if (transformsApplied == false)
        return;
      transformsApplied = true;
      // Go through data transforms first and apply them to every point.
      for (DataTransformFunction transform in _dataTransforms) {
  
negative.code:       }
      }
  
      String filename = _outputFolder;
      if (_outputFilename == null) {
        filename = filename +
            new DateTime.now().toString() +
            '_${areaX.min},${areaX.max}_${areaY.min},${areaY.max}' +
            '.png';
      } else {
        filename = filename + _outputFilename;
      }
      new io.File(filename).create(recursive: true).then((io.File file) {
        file.writeAsBytesSync(encodePng(image));
      });
    }
  