protected override Func <double, double> GetYScaler([NotNull] double[] yAxis)
        {
            Max = yAxis.Max();
            VerticalAxisView.Canvas.Dispatcher.InvokeAsync(() => { VerticalAxisView.DrawRuler(Min, Max, false); });
            // todo: store height as const or invoke getter to adapt
            //            const int margin = 10;
            const int margin         = 0;
            var       dispAreaHeight = ScreenHeight - 2 * margin;

            return(y => dispAreaHeight - dispAreaHeight / Max * y + margin);
            //     const int margin = 0;
            //            var dispAreaHeight = ScreenHeight - 2*margin;
            //            return y => dispAreaHeight - dispAreaHeight/(max - min)*(y - min) + margin;
        }
        protected override Func <double, double> GetYScaler([NotNull] double[] yAxis)
        {
            double min, max;

            Functions.FindMinMax(yAxis, out min, out max);
            Min = min;
            Max = max;
            VerticalAxisView.Canvas.Dispatcher.InvokeAsync(() => { VerticalAxisView.DrawRuler(min, max, true); });
            // todo: store height as const or invoke getter to adapt
            //            const int margin = 10;
            const int margin         = 0;
            var       dispAreaHeight = ScreenHeight - 2 * margin;

            return(y => dispAreaHeight - dispAreaHeight / (max - min) * (y - min) + margin);
            //     const int margin = 0;
            //            var dispAreaHeight = ScreenHeight - 2*margin;
            //            return y => dispAreaHeight - dispAreaHeight/(max - min)*(y - min) + margin;
        }