public DistributionResult(string fileName) : this()
        {
            var columns = DataProvider.FetchData(fileName);

            columns = columns.Where(c => c.IsNumeric).ToList();

            var data = DataProvider.GetData(columns);

            foreach (var column in data.Columns)
            {
                column.Data = column.Data.Take(Threshold);
            }

            (var minimum, var maximum) = DistributionProcessor.GetColumnBoundaries(data.Columns);

            DistributionProcessor.Minimum = minimum;
            DistributionProcessor.Maximum = maximum;

            data.Columns.ForEach(DistributionProcessor.CalculateNormalDistribution);
            data.Columns.ForEach(DistributionProcessor.CalculateNormalDistributionEmpirical);
            data.Columns.ForEach(DistributionProcessor.CalculateCumulativeDistribution);
            data.Columns.ForEach(DistributionProcessor.CalculateCumulativeDistributionEmpirical);

            var normalDistributionPlots = data.Columns.Select((c, i) => DisplayNormalDistribution(c, i, data.Columns.Count)).ToList();

            normalDistributionPlots.ForEach(ndp => PlotsGrid.Children.Add(ndp));

            data.Columns.ForEach(c => DisplayCumulativeDistribution(c, CumulativeDistribution.plt));
            data.Columns.ForEach(c => DisplayCumulativeDistributionEmpirical(c, CumulativeDistributionEmpirical.plt));

            CumulativeDistribution.plt.Title("Cumulative distribution");
            CumulativeDistribution.plt.Legend(true);
            CumulativeDistributionEmpirical.plt.Title("Cumulative distribution empirical");
            CumulativeDistributionEmpirical.plt.Legend(true);
        }
        private WpfPlot DisplayNormalDistribution(DataColumn column, int columnIndex, int columnsCount)
        {
            var wpfPlot = new WpfPlot
            {
                Margin = new System.Windows.Thickness(columnIndex * (1800 / columnsCount), 0, 1800 - (columnIndex + 1) * (1800 / columnsCount), 500)
            };

            (var minimum, var maximum) = DistributionProcessor.GetColumnBoundaries(column);

            var    normalDistributionEmpirical = new ScottPlot.Statistics.Histogram(column.Data.ToArray(), binCount: 10, min: minimum, max: maximum);
            double barWidth = normalDistributionEmpirical.binSize * 1.2;

            wpfPlot.plt.PlotBar(normalDistributionEmpirical.bins, normalDistributionEmpirical.countsFrac.Select(v => v / normalDistributionEmpirical.binSize).ToArray(), barWidth: barWidth, outlineWidth: 0, fillColor: Color.Gray);
            wpfPlot.plt.PlotScatter(column.NormalDistribution.Select(nd => nd.x).ToArray(), column.NormalDistribution.Select(nd => nd.y).ToArray(), markerSize: 0, lineWidth: 2);
            wpfPlot.plt.AxisAutoY(margin: 0);
            wpfPlot.plt.Axis(x1: minimum);
            wpfPlot.plt.Ticks(numericFormatStringY: "0.00");
            wpfPlot.plt.Title(column.Name);

            return(wpfPlot);
        }