Пример #1
0
 private void ShowCCResult(CrossCorrelation.Result ccr)
 {
     new CrossCorrelationResult(ccr)
     {
         Owner = this
     }.Show();
 }
        public CrossCorrelationResult(CrossCorrelation.Result ccr)
        {
            InitializeComponent();

            PlotResult(plotter1, ccr);
            PlotResult(plotter2, ccr.AbsoluteResult());


            // Sync horizontal axes

            var p1a1 = plotter1.ActualModel.Axes[0];
            var p2a1 = plotter2.ActualModel.Axes[0];

            bool isInternalChange = false;

            p1a1.AxisChanged += (s, e) => {
                if (isInternalChange)
                {
                    return;
                }

                isInternalChange = true;
                p2a1.Zoom(p1a1.ActualMinimum, p1a1.ActualMaximum);
                plotter2.ActualModel.InvalidatePlot(false);
                isInternalChange = false;
            };

            p2a1.AxisChanged += (s, e) => {
                if (isInternalChange)
                {
                    return;
                }

                isInternalChange = true;
                p1a1.Zoom(p2a1.ActualMinimum, p2a1.ActualMaximum);
                plotter1.ActualModel.InvalidatePlot(false);
                isInternalChange = false;
            };
        }
        private void PlotResult(OxyPlot.Wpf.PlotView plotter, CrossCorrelation.Result ccr)
        {
            int[]            xValues = new int[ccr.Correlations.Length];
            List <DataPoint> values  = new List <DataPoint>();

            for (int i = 0; i < ccr.Correlations.Length; i++)
            {
                xValues[i] = i;
                values.Add(new DataPoint(i, ccr.Correlations[i]));
            }

            var plotModel = new PlotModel();

            // setup plotter axes and viewport
            plotModel.Axes.Add(new LinearAxis()
            {
                Position = AxisPosition.Bottom,
                Minimum  = 0,
                Maximum  = xValues.Length
            });
            plotModel.Axes.Add(new LinearAxis()
            {
                Minimum            = -1,
                Maximum            = 2,
                MajorGridlineStyle = LineStyle.Automatic,
                MinorGridlineStyle = LineStyle.Automatic
            });

            // correlation series
            plotModel.Series.Add(new LineSeries {
                ItemsSource = values,
                Color       = OxyColors.CornflowerBlue,
                Title       = "Correlation"
            });

            // distinct values
            plotModel.Annotations.Add(new LineAnnotation {
                Type        = LineAnnotationType.Horizontal,
                Y           = ccr.MaxValue,
                Color       = OxyColors.Green,
                ClipByXAxis = false
            });

            plotModel.Annotations.Add(new PointAnnotation {
                X    = ccr.MaxIndex,
                Y    = ccr.MaxValue,
                Fill = OxyColors.Red,
                Text = "Max"
            });


            var avg = ccr.Correlations.Average();

            plotModel.Annotations.Add(new LineAnnotation {
                Type        = LineAnnotationType.Horizontal,
                Y           = avg,
                Color       = OxyColors.Red,
                ClipByXAxis = false,
                Text        = "Avg"
            });

            var absavg = ccr.Correlations.Average(f => Math.Abs(f));

            plotModel.Annotations.Add(new LineAnnotation {
                Type        = LineAnnotationType.Horizontal,
                Y           = absavg,
                Color       = OxyColors.Orange,
                ClipByXAxis = false,
                Text        = "Abs Avg"
            });

            plotModel.IsLegendVisible = false;
            plotter.Model             = plotModel;
        }