Exemplo n.º 1
0
        public static BoxPlotItem Box(double x, IEnumerable <double> samples)
        {
            var sorted = samples.OrderBy(s => s).ToArray();

            var lq     = Terp(sorted, 0.25);
            var median = Terp(sorted, 0.5);
            var uq     = Terp(sorted, 0.75);
            var mean   = sorted.Average();

            var lt = lq - (median - lq) * 1.5;
            var ut = uq + (uq - median) * 1.5;

            var low  = Math.Min(samples.Where(s => s >= lt).Min(), lq);
            var high = Math.Max(samples.Where(s => s <= ut).Max(), uq);

            var bpi = new BoxPlotItem(x, low, lq, median, uq, high)
            {
                Mean = mean
            };

            foreach (var o in sorted.Where(s => s <low || s> high))
            {
                bpi.Outliers.Add(o);
            }

            return(bpi);
        }
Exemplo n.º 2
0
        private void AddItem(PlotModel plotModel, List<double> values, int slot)
        {
            values.Sort();

            var sorted = values.ToArray();

            var median = sorted.Median();
            int r = values.Count % 2;
            var firstQuartile = sorted.LowerQuartile();
            var thirdQuartile = sorted.UpperQuartile();

            var interQuartileRange = thirdQuartile - firstQuartile;
            var step = interQuartileRange * 1.5;
            var upperWhisker = thirdQuartile + step;
            upperWhisker = values.Where(v => v <= upperWhisker).Max();
            var lowerWhisker = firstQuartile - step;
            lowerWhisker = values.Where(v => v >= lowerWhisker).Min();

            var outliers = values.Where(v => v > upperWhisker || v < lowerWhisker).ToList();

            var item = new BoxPlotItem(slot, lowerWhisker, firstQuartile, median, thirdQuartile, upperWhisker)
            {
                Outliers = outliers
            };
            if (outliers.Any())
            {
                (plotModel.Series[1] as BoxPlotSeries).Items.Add(item);
            }
            else
            {
                (plotModel.Series[0] as BoxPlotSeries).Items.Add(item);
            }
        }
Exemplo n.º 3
0
        public void TestSimpleCase()
        {
            object[] x = new object[7] {
                0d, 1d, 2d, 3d, 4d, 5d, 6d
            };
            object[] y = new object[7] {
                0d, 1d, 1d, 2d, 3d, 3d, 4d
            };
            Line             line   = new Line(LineType.Solid, LineThickness.Normal);
            Marker           marker = new Marker(MarkerType.FilledSquare, MarkerSize.Normal, 1);
            BoxWhiskerSeries series = new BoxWhiskerSeries("Title", Color.Red, true, x, y, line, marker, "", "");
            var oxySeries           = exporter.Export(series, AxisLabelCollection.Empty()).Result;

            Assert.NotNull(oxySeries);
            Assert.True(oxySeries is BoxPlotSeries);
            BoxPlotSeries boxPlot = (BoxPlotSeries)oxySeries;

            // Line style
            Assert.AreEqual(OxyPlot.LineStyle.Solid, boxPlot.LineStyle);
            Assert.AreEqual(0.5, boxPlot.StrokeThickness);

            // Marker style
            Assert.AreEqual(OxyPlot.MarkerType.Square, boxPlot.OutlierType);
            Assert.AreEqual(7, boxPlot.OutlierSize);

            // Colours
            Assert.AreEqual(OxyColors.Transparent, boxPlot.Stroke);
            Assert.AreEqual(OxyColors.Red, boxPlot.Fill);

            // Title
            Assert.AreEqual("Title", boxPlot.Title);

            // Contents of series.
            Assert.AreEqual(1, boxPlot.Items.Count);
            BoxPlotItem item = boxPlot.Items[0];

            Assert.NotNull(item);

            // Test box plot whisker values.
            Assert.AreEqual(0, item.X);
            Assert.AreEqual(0, item.LowerWhisker);
            Assert.AreEqual(1, item.BoxBottom);
            Assert.AreEqual(2, item.Median);
            Assert.AreEqual(3, item.BoxTop);
            Assert.AreEqual(4, item.UpperWhisker);
        }
        private void FillCollection(Collection <BoxPlotItem> collection, List <IntBarSensorData> list)
        {
            foreach (var boxValue in list)
            {
                int    firstQuant   = boxValue.Percentiles.FirstOrDefault(p => Math.Abs(p.Percentile - 0.25) < double.Epsilon).Value;
                int    thirdQuant   = boxValue.Percentiles.FirstOrDefault(p => Math.Abs(p.Percentile - 0.75) < double.Epsilon).Value;
                int    median       = boxValue.Percentiles.FirstOrDefault(p => Math.Abs(p.Percentile - 0.5) < double.Epsilon).Value;
                double lowerWhisker = firstQuant - (1.5 * (thirdQuant - firstQuant));
                double upperWhisker = thirdQuant + (1.5 * (thirdQuant - firstQuant));

                //DateTime time = new DateTime(1970, 1, 1).AddMilliseconds(boxValue.StartTime.ToUniversalTime().ToTimestamp().Seconds);
                double      x        = DateTimeAxis.ToDouble(boxValue.StartTime);
                BoxPlotItem plotItem = new BoxPlotItem(x, lowerWhisker, firstQuant, median,
                                                       thirdQuant, upperWhisker);
                plotItem.Mean = boxValue.Mean;

                collection.Add(plotItem);
            }
        }
Exemplo n.º 5
0
        private BoxPlotItem GetBox(FieldViewModel field, int index)
        {
            double[] data = field.ControlPoints
                            .OrderBy(cp => cp.Penalty)
                            .Select(cp => cp.Penalty)
                            .ToArray();

            var box = new BoxPlotItem
            {
                X            = index,
                LowerWhisker = data.Quantile(0.02),
                BoxBottom    = data.LowerQuartile(),
                Median       = data.Median(),
                BoxTop       = data.UpperQuartile(),
                UpperWhisker = data.Quantile(0.98)
            };

            box.Outliers = data.Where(d => d <box.LowerWhisker || d> box.UpperWhisker).ToList();

            return(box);
        }