コード例 #1
0
        public NetworkGraph()
        {
            InitializeComponent();

            Plot       = new PlotView();
            Plot.Model = new PlotModel();
            Plot.Dock  = DockStyle.Fill;
            this.Controls.Add(Plot);

            Plot.Model.PlotType   = PlotType.XY;
            Plot.Model.Background = OxyColor.FromRgb(255, 255, 255);
            Plot.Model.TextColor  = OxyColor.FromRgb(0, 0, 0);

            // Create Line series
            TrainingError = new LineSeries {
                Title = "Training Error", StrokeThickness = 1
            };
            ValidationError = new LineSeries {
                Title = "Validation Error", StrokeThickness = 1
            };

            // add Series and Axis to plot model
            Plot.Model.Series.Add(TrainingError);
            Plot.Model.Series.Add(ValidationError);

            xAxis = new LinearAxis(AxisPosition.Bottom, 0.0, 10.0);
            Plot.Model.Axes.Add(xAxis);
            yAxis = new LogarithmicAxis(AxisPosition.Left, "Error", .01, 10);
            Plot.Model.Axes.Add(yAxis);
        }
コード例 #2
0
        public static PlotModel ValueTime()
        {
            var plotModel1 = new PlotModel
            {
                LegendBackground        = OxyColor.FromArgb(200, 255, 255, 255),
                LegendBorder            = OxyColors.Black,
                LegendPlacement         = LegendPlacement.Outside,
                PlotAreaBackground      = OxyColors.Gray,
                PlotAreaBorderColor     = OxyColors.Gainsboro,
                PlotAreaBorderThickness = 2,
                Title = "Value / Time"
            };
            var linearAxis1 = new LinearAxis
            {
                AbsoluteMaximum = 45,
                AbsoluteMinimum = 0,
                Key             = "X-Axis",
                Maximum         = 46,
                Minimum         = -1,
                Position        = AxisPosition.Bottom,
                Title           = "Years",
                Unit            = "yr"
            };

            plotModel1.Axes.Add(linearAxis1);
            var logarithmicAxis1 = new LogarithmicAxis {
                Key = "Y-Axis", Title = "Value for section"
            };

            plotModel1.Axes.Add(logarithmicAxis1);
            var lineSeries1 = new LineSeries
            {
                Color        = OxyColors.Red,
                LineStyle    = LineStyle.Solid,
                MarkerFill   = OxyColors.Black,
                MarkerSize   = 2,
                MarkerStroke = OxyColors.Black,
                MarkerType   = MarkerType.Circle,
                DataFieldX   = "X",
                DataFieldY   = "Y",
                XAxisKey     = "X-Axis",
                YAxisKey     = "Y-Axis",
                Background   = OxyColors.White,
                Title        = "Section Value",
                TrackerKey   = "ValueVersusTimeTracker"
            };

            lineSeries1.Points.Add(new DataPoint(0, 0));
            lineSeries1.Points.Add(new DataPoint(5, 0));
            lineSeries1.Points.Add(new DataPoint(10, 0));
            lineSeries1.Points.Add(new DataPoint(15, 0));
            lineSeries1.Points.Add(new DataPoint(20, 1));
            lineSeries1.Points.Add(new DataPoint(25, 1));
            lineSeries1.Points.Add(new DataPoint(30, 1));
            lineSeries1.Points.Add(new DataPoint(35, 1));
            lineSeries1.Points.Add(new DataPoint(40, 1));
            lineSeries1.Points.Add(new DataPoint(45, 1));
            plotModel1.Series.Add(lineSeries1);
            return(plotModel1);
        }
コード例 #3
0
ファイル: MainPage.xaml.cs プロジェクト: shyshi/App4
        private void setModel()
        {
            LinearAxis lineAxis1 = new LinearAxis();
            LinearAxis lineAxis2 = new LinearAxis();
            LinearAxis lineAxis3 = new LinearAxis();
            LinearAxis lineAxis4 = new LinearAxis();

            lineAxis1.Position = AxisPosition.Bottom;
            lineAxis2.Position = AxisPosition.Left;
            lineAxis3.Position = AxisPosition.Bottom;
            lineAxis4.Position = AxisPosition.Left;
            LogarithmicAxis logAxis1 = new LogarithmicAxis();
            LogarithmicAxis logAxis2 = new LogarithmicAxis();
            LogarithmicAxis logAxis3 = new LogarithmicAxis();
            LogarithmicAxis logAxis4 = new LogarithmicAxis();

            logAxis1.Position = AxisPosition.Bottom;
            logAxis2.Position = AxisPosition.Left;
            logAxis3.Position = AxisPosition.Bottom;
            logAxis4.Position = AxisPosition.Left;
            this.doublelogModel.MyModel.Axes.Add(logAxis1);
            this.doublelogModel.MyModel.Axes.Add(logAxis2);
            this.doublelineModel.MyModel.Axes.Add(lineAxis1);
            this.doublelineModel.MyModel.Axes.Add(lineAxis2);
            this.logxModel.MyModel.Axes.Add(logAxis3);
            this.logxModel.MyModel.Axes.Add(lineAxis4);
            this.logyModel.MyModel.Axes.Add(lineAxis3);
            this.logyModel.MyModel.Axes.Add(logAxis4);
        }
コード例 #4
0
 private LogarithmicAxis CreateNewLogAxis(string title, AxisPosition axpos)
 {
     if (!IsGeneratingPlotsForReporting)
     {
         var newAxis = new LogarithmicAxis
         {
             Position = axpos,
             Title    = title
         };
         if (axpos == AxisPosition.Right)
         {
             newAxis.Key = _rightAxisKey;
         }
         return(newAxis);
     }
     else
     {
         var newAxis = new LogarithmicAxis
         {
             Position = axpos,
             Title    = title
         };
         if (axpos == AxisPosition.Right)
         {
             newAxis.Key = _rightAxisKey;
         }
         return(newAxis);
     }
 }
コード例 #5
0
            public void LogarithmicAxis()
            {
                var s1 = new Axes.LogarithmicAxis();
                var s2 = new LogarithmicAxis();

                OxyAssert.PropertiesAreEqual(s1, s2);
            }
コード例 #6
0
ファイル: MainPage.xaml.cs プロジェクト: shyshi/App4
 private void setModel()
 {
     LinearAxis lineAxis1 = new LinearAxis();
     LinearAxis lineAxis2 = new LinearAxis();
     LinearAxis lineAxis3 = new LinearAxis();
     LinearAxis lineAxis4 = new LinearAxis();
     lineAxis1.Position = AxisPosition.Bottom;
     lineAxis2.Position = AxisPosition.Left;
     lineAxis3.Position = AxisPosition.Bottom;
     lineAxis4.Position = AxisPosition.Left;
     LogarithmicAxis logAxis1 = new LogarithmicAxis();
     LogarithmicAxis logAxis2 = new LogarithmicAxis();
     LogarithmicAxis logAxis3 = new LogarithmicAxis();
     LogarithmicAxis logAxis4 = new LogarithmicAxis();
     logAxis1.Position = AxisPosition.Bottom;
     logAxis2.Position = AxisPosition.Left;
     logAxis3.Position = AxisPosition.Bottom;
     logAxis4.Position = AxisPosition.Left;
     this.doublelogModel.MyModel.Axes.Add(logAxis1);
     this.doublelogModel.MyModel.Axes.Add(logAxis2);
     this.doublelineModel.MyModel.Axes.Add(lineAxis1);
     this.doublelineModel.MyModel.Axes.Add(lineAxis2);
     this.logxModel.MyModel.Axes.Add(logAxis3);
     this.logxModel.MyModel.Axes.Add(lineAxis4);
     this.logyModel.MyModel.Axes.Add(lineAxis3);
     this.logyModel.MyModel.Axes.Add(logAxis4);
 }
コード例 #7
0
        public static PlotModel MouseDownEvent()
        {
            var model            = new PlotModel("LineSeries with smoothing", "Tracker uses wrong points");
            var logarithmicAxis1 = new LogarithmicAxis {
                Position = AxisPosition.Bottom
            };

            model.Axes.Add(logarithmicAxis1);

            // Add a line series
            var s1 = new LineSeries
            {
                Color                 = OxyColors.SkyBlue,
                MarkerType            = MarkerType.Circle,
                MarkerSize            = 6,
                MarkerStroke          = OxyColors.White,
                MarkerFill            = OxyColors.SkyBlue,
                MarkerStrokeThickness = 1.5,
                Smooth                = true
            };

            s1.Points.Add(new DataPoint(100, 100));
            s1.Points.Add(new DataPoint(400, 200));
            s1.Points.Add(new DataPoint(600, -300));
            s1.Points.Add(new DataPoint(1000, 400));
            s1.Points.Add(new DataPoint(1500, 500));
            s1.Points.Add(new DataPoint(2500, 600));
            s1.Points.Add(new DataPoint(3000, 700));
            model.Series.Add(s1);

            return(model);
        }
コード例 #8
0
 public static PlotModel AxisChangedEventHAndler()
 {
     var model = new PlotModel { Title = "AxisChanged event handler" };
     var logAxis = new LogarithmicAxis { Position = AxisPosition.Left, Minimum = 0.1, Maximum = 1000 };
     int n = 0;
     logAxis.AxisChanged += (s, e) => { model.Subtitle = "Changed " + (n++) + " times. ActualMaximum=" + logAxis.ActualMaximum; };
     model.Axes.Add(logAxis);
     model.Series.Add(new FunctionSeries(Math.Exp, 0, Math.Log(900), 100));
     return model;
 }
コード例 #9
0
        public LineChartMono()
        {
            InitializeComponent();

            plotView1.Dock = DockStyle.Fill;

            plotView1.Model = new PlotModel();
            plotView1.Model.PlotType = PlotType.XY;
            plotView1.Model.Background = OxyColors.Black;
            plotView1.Model.TextColor = OxyColors.White;
            plotView1.Model.PlotAreaBorderColor = OxyColors.DimGray;

            chart = plotView1.Model;

            // X Axis.
            XAxis = new LinearAxis();
            XAxis.MajorGridlineColor = OxyColors.DimGray;
            XAxis.MajorGridlineStyle = LineStyle.Solid;
            XAxis.MinorGridlineStyle = LineStyle.Dot;
            XAxis.Position = AxisPosition.Bottom;

            // Y axis.
            YAxis = new LinearAxis();
            YAxis.Key = "Linear";
            YAxis.MajorGridlineColor = OxyColors.DimGray;
            YAxis.MajorGridlineStyle = LineStyle.Solid;
            YAxis.MinorGridlineStyle = LineStyle.Dot;
            YAxis.Position = AxisPosition.Left;

            // Y axis logarithmic.
            YAxisLogarithmic = new LogarithmicAxis();
            YAxisLogarithmic.Key = "Linear";
            YAxisLogarithmic.IsAxisVisible = false;
            YAxisLogarithmic.MajorGridlineColor = OxyColors.DimGray;
            YAxisLogarithmic.MajorGridlineStyle = LineStyle.Solid;
            YAxisLogarithmic.MinorGridlineStyle = LineStyle.Dot;
            YAxisLogarithmic.Position = AxisPosition.Left;

            chart.Axes.Add(XAxis);
            chart.Axes.Add(YAxis);
            chart.Axes.Add(YAxisLogarithmic);

            chart.LegendPosition = LegendPosition.TopCenter;
            chart.LegendPlacement = LegendPlacement.Outside;

            Series = new Dictionary<string, LineSeries>();

            leftToolStripMenuItem.Tag = LegendPosition.LeftMiddle;
            rightToolStripMenuItem.Tag = LegendPosition.RightMiddle;
            topToolStripMenuItem.Tag = LegendPosition.TopCenter;
            bottomToolStripMenuItem.Tag = LegendPosition.BottomCenter;

            MoveLegend(topToolStripMenuItem, EventArgs.Empty);
        }
コード例 #10
0
        public LineChartMono()
        {
            InitializeComponent();

            plotView1.Dock = DockStyle.Fill;

            plotView1.Model                     = new PlotModel();
            plotView1.Model.PlotType            = PlotType.XY;
            plotView1.Model.Background          = OxyColors.Black;
            plotView1.Model.TextColor           = OxyColors.White;
            plotView1.Model.PlotAreaBorderColor = OxyColors.DimGray;

            chart = plotView1.Model;

            // X Axis.
            XAxis = new LinearAxis();
            XAxis.MajorGridlineColor = OxyColors.DimGray;
            XAxis.MajorGridlineStyle = LineStyle.Solid;
            XAxis.MinorGridlineStyle = LineStyle.Dot;
            XAxis.Position           = AxisPosition.Bottom;

            // Y axis.
            YAxis     = new LinearAxis();
            YAxis.Key = "Linear";
            YAxis.MajorGridlineColor = OxyColors.DimGray;
            YAxis.MajorGridlineStyle = LineStyle.Solid;
            YAxis.MinorGridlineStyle = LineStyle.Dot;
            YAxis.Position           = AxisPosition.Left;

            // Y axis logarithmic.
            YAxisLogarithmic                    = new LogarithmicAxis();
            YAxisLogarithmic.Key                = "Linear";
            YAxisLogarithmic.IsAxisVisible      = false;
            YAxisLogarithmic.MajorGridlineColor = OxyColors.DimGray;
            YAxisLogarithmic.MajorGridlineStyle = LineStyle.Solid;
            YAxisLogarithmic.MinorGridlineStyle = LineStyle.Dot;
            YAxisLogarithmic.Position           = AxisPosition.Left;

            chart.Axes.Add(XAxis);
            chart.Axes.Add(YAxis);
            chart.Axes.Add(YAxisLogarithmic);

            chart.LegendPosition  = LegendPosition.TopCenter;
            chart.LegendPlacement = LegendPlacement.Outside;

            Series = new Dictionary <string, LineSeries>();

            leftToolStripMenuItem.Tag   = LegendPosition.LeftMiddle;
            rightToolStripMenuItem.Tag  = LegendPosition.RightMiddle;
            topToolStripMenuItem.Tag    = LegendPosition.TopCenter;
            bottomToolStripMenuItem.Tag = LegendPosition.BottomCenter;

            MoveLegend(topToolStripMenuItem, EventArgs.Empty);
        }
コード例 #11
0
        public ChartModel()
        {
            MyModel = new PlotModel()
            {
                IsLegendVisible         = false,
                PlotAreaBorderThickness = new OxyThickness(0),
            };

            _series = new LineSeries()
            {
                Color           = OxyColor.FromRgb(0, 0, 0),
                StrokeThickness = 0.5,
                Title           = "Changed Pixels"
            };

            _Xaxis = new LinearAxis()
            {
                IsAxisVisible  = false,
                Position       = AxisPosition.Bottom,
                MaximumPadding = 0,
                MinimumPadding = 0,
            };

            var logAxis = new LogarithmicAxis()
            {
                IsAxisVisible             = false,
                Minimum                   = 1,
                UseSuperExponentialFormat = true,
                MaximumPadding            = 0.1,
                MinimumPadding            = 0,
            };

            MyModel.Axes.Add(_Xaxis);
            MyModel.Axes.Add(logAxis);

            MyModel.Updated += (sender, args) =>
            {
                lock (_pointBuffer)
                {
                    foreach (var pt in _pointBuffer)
                    {
                        _series.Points.Add(pt);
                    }

                    _pointBuffer.Clear();
                }
            };

            this.MyModel.Series.Add(_series);
        }
コード例 #12
0
        public MainWindowViewModel(Expr s)
        {
            _s = s;

            PlotCommand      = ReactiveCommand.Create(Plot);
            ResetViewCommand = ReactiveCommand.Create(ResetView);

            MagnitudePlot = new PlotModel {
                Title = "Magnitude"
            };

            _magnitudeFrequencyAxis = CreateFrequencyAxis(AxisPosition.Bottom);

            MagnitudePlot.Axes.Add(_magnitudeFrequencyAxis);
            MagnitudePlot.Axes.Add(InitializeAxis(new LinearAxis()
            {
                Position = AxisPosition.Left, Title = "|H(s)|", Unit = "dB", AxisTitleDistance = 32
            }));

            PhasePlot = new PlotModel {
                Title = "Phase"
            };

            _phaseFrequencyAxis = CreateFrequencyAxis(AxisPosition.Bottom);

            PhasePlot.Axes.Add(_phaseFrequencyAxis);
            PhasePlot.Axes.Add(InitializeAxis(new LinearAxis()
            {
                Position = AxisPosition.Left, Title = "∡H(s)", Unit = "°", Minimum = -180, Maximum = 180, MajorStep = 45, AxisTitleDistance = 32
            }));

            BodePlot = new PlotModel {
                Title = "Bode Plot"
            };

            _frequencyAxis = CreateFrequencyAxis(AxisPosition.Bottom);

            var magnitudeAxis = InitializeAxis(new LinearAxis()
            {
                Key = MagnitudeAxisKey, Title = "|H(s)|", Unit = "dB", Position = AxisPosition.Left, StartPosition = 0.5, EndPosition = 1
            });
            var phaseAxis = InitializeAxis(new LinearAxis()
            {
                Key = PhaseAxisKey, Title = "∡H(s)", Unit = "°", Minimum = -180, Maximum = 180, MajorStep = 45, Position = AxisPosition.Left, StartPosition = 0, EndPosition = 0.5
            });

            BodePlot.Axes.Add(_frequencyAxis);
            BodePlot.Axes.Add(magnitudeAxis);
            BodePlot.Axes.Add(phaseAxis);
        }
コード例 #13
0
        private LogarithmicAxis CreateNewLogAxis(string title, AxisPosition axpos)
        {
            var newAxis = new LogarithmicAxis
            {
                Position = axpos,
                Title    = title
            };

            if (axpos == AxisPosition.Right)
            {
                newAxis.Key = _rightAxisKey;
            }
            return(newAxis);
        }
コード例 #14
0
        /// <summary>
        /// Gets a new instance of logarathmic axis at the given position with the given key and title
        /// </summary>
        /// <param name="key">The key to identify the axis</param>
        /// <param name="title">The axis title/label </param>
        /// <param name="position">The position of the axis</param>
        /// <returns></returns>
        private LogarithmicAxis GetLogAxis(string key, string title, AxisPosition position, OxyColor color)
        {
            var logAxis = new LogarithmicAxis()
            {
                MajorGridlineStyle = LineStyle.Dash,
                Key           = key,
                Position      = position,
                IsZoomEnabled = true,
                IsPanEnabled  = true,
                Title         = title,
                TitleColor    = color
            };

            return(logAxis);
        }
コード例 #15
0
        public static PlotModel AxisChangedEventHAndler()
        {
            var model = new PlotModel {
                Title = "AxisChanged event handler"
            };
            var logAxis = new LogarithmicAxis {
                Position = AxisPosition.Left, Minimum = 0.1, Maximum = 1000
            };
            int n = 0;

            logAxis.AxisChanged += (s, e) => { model.Subtitle = "Changed " + (n++) + " times. ActualMaximum=" + logAxis.ActualMaximum; };
            model.Axes.Add(logAxis);
            model.Series.Add(new FunctionSeries(Math.Exp, 0, Math.Log(900), 100));
            return(model);
        }
コード例 #16
0
        public PlotModel SetUpModel(List <double> validationSetErrors, List <double> testSetErrors = null)
        {
            PlotModel plotModel = new PlotModel();
            var       errorAxis = new LogarithmicAxis();

            errorAxis.TickStyle = TickStyle.Outside;
            errorAxis.Position  = AxisPosition.Left;
            errorAxis.Maximum   = validationSetErrors.Max() * 1.1;
            double errMin = validationSetErrors.Min();

            errorAxis.Minimum            = errMin;
            errorAxis.StringFormat       = "E0";
            errorAxis.MajorGridlineStyle = LineStyle.Dot;

            plotModel.Axes.Add(errorAxis);

            var iterationAxis = new LinearAxis();

            iterationAxis.Position  = AxisPosition.Bottom;
            iterationAxis.TickStyle = TickStyle.Outside;
            iterationAxis.Minimum   = 0;
            iterationAxis.Maximum   = validationSetErrors.Count;
            iterationAxis.Title     = "Iteration";
            plotModel.Axes.Add(iterationAxis);

            var series1 = new LineSeries {
                Title = "Validation set error", MarkerType = MarkerType.None
            };

            series1.Points.AddRange(CreateDataPoints(validationSetErrors));
            plotModel.Series.Add(series1);
            if (testSetErrors != null)
            {
                var series2 = new LineSeries {
                    Title = "Test set error", MarkerType = MarkerType.None
                };
                series2.Points.AddRange(CreateDataPoints(testSetErrors));
                plotModel.Series.Add(series2);
            }

            return(plotModel);
        }
コード例 #17
0
        private void SpeakerResponseForm_Load(object sender, EventArgs e)
        {
            var model    = new PlotModel();
            var freqAxis = new LogarithmicAxis {
                AbsoluteMinimum = 10,
                AbsoluteMaximum = 30000,
                Minimum         = 10,
                Maximum         = 30000,
                //MajorStep = 1000,
                MajorGridlineStyle = LineStyle.Solid,
                Base         = 10,
                Position     = AxisPosition.Bottom,
                PowerPadding = false,
                Unit         = "Hz",
                Title        = "f"
            };

            model.Axes.Add(freqAxis);
            splAxis = new LinearAxis {
                Title              = "SPL",
                Unit               = "dB",
                AbsoluteMinimum    = 0,
                AbsoluteMaximum    = 150,
                Minimum            = 70,
                Maximum            = 110,
                MajorStep          = 10,
                MinorStep          = 5,
                MajorGridlineStyle = LineStyle.Solid,
                MinorGridlineStyle = LineStyle.Solid,
                Position           = AxisPosition.Left
            };
            model.Axes.Add(splAxis);
            series = new LineSeries()
            {
                ItemsSource = response,
                Color       = OxyColors.Red,
                LineStyle   = LineStyle.Solid,
                Mapping     = (p) => new DataPoint(((DPoint)p).X, ((DPoint)p).Y)
            };
            model.Series.Add(series);
            plotView.Model = model;
        }
コード例 #18
0
        public static PlotModel LogarithmicAxes()
        {
            var plotModel1 = new PlotModel();

            plotModel1.PlotMargins = new OxyThickness(80, 10, 20, 30);
            var logarithmicAxis1 = new LogarithmicAxis();

            logarithmicAxis1.Maximum = 1000000;
            logarithmicAxis1.Minimum = 1;
            logarithmicAxis1.Title   = "Log axis";
            logarithmicAxis1.UseSuperExponentialFormat = true;
            plotModel1.Axes.Add(logarithmicAxis1);
            var logarithmicAxis2 = new LogarithmicAxis();

            logarithmicAxis2.Maximum  = 10000;
            logarithmicAxis2.Minimum  = 0.001;
            logarithmicAxis2.Position = AxisPosition.Bottom;
            logarithmicAxis2.Title    = "Log axis";
            logarithmicAxis2.UseSuperExponentialFormat = true;
            plotModel1.Axes.Add(logarithmicAxis2);
            return(plotModel1);
        }
コード例 #19
0
        private static PlotModel CreatePlotFromData(string title, List <SeriesData> data, ExportFormat exFormat)
        {
            var plot = new OxyPlot.PlotModel()
            {
                TitlePadding          = 0,
                Title                 = title,
                LegendPosition        = LegendPosition.RightTop,
                LegendFontSize        = 20,
                LegendBorder          = OxyColors.Black,
                LegendBorderThickness = 1,
                //LegendItemAlignment = HorizontalAlignment.Right,
                LegendSymbolPlacement = LegendSymbolPlacement.Right,
            };

            var allPoints = data.SelectMany(x => x.Points).ToList();
            var xMax      = allPoints.Max(x => x.ElutionTimeMidpoint);
            var xMin      = allPoints.Min(x => x.ElutionTimeMidpoint);
            var yMax      = allPoints.Max(x => x.TotalIntensitySum);
            var yMin      = allPoints.Min(x => x.TotalIntensitySum);

            double seriesPointStrokeThickness = 0;
            double seriesPointMarkerSize      = Math.Max(3, 7 - Math.Log10(allPoints.Count));

            var typeface = new Typeface(SystemFonts.MessageFontFamily, SystemFonts.MessageFontStyle, SystemFonts.MessageFontWeight, FontStretches.Normal);

            var font = plot.LegendFont;

            if (string.IsNullOrWhiteSpace(font))
            {
                font = plot.DefaultFont;
            }

            if (!string.IsNullOrWhiteSpace(font))
            {
                typeface = new Typeface(font);
            }

            switch (exFormat)
            {
            case ExportFormat.PDF:
                typeface = new Typeface("Arial");
                // These don't use Windows WPF rendering, so we can't determine text width correctly for the output.
                // Limit to spaces only for a "Close enough" approximation
                SetCombinedTextToEqualWidth(data.Select(x => x.TitleFormatted).ToList(), 2, plot.LegendFontSize, typeface, true);
                break;

            case ExportFormat.SVG:
                // These don't use Windows WPF rendering, so we can't determine text width correctly for the output.
                // Limit to spaces only for a "Close enough" approximation
                SetCombinedTextToEqualWidth(data.Select(x => x.TitleFormatted).ToList(), 2, plot.LegendFontSize, typeface, true);

                // Artificially inflate the titles so that they don't overlap with the symbols
                foreach (var item in data)
                {
                    item.TitleFormatted.TitleFormatted += "         ";
                }
                break;

            case ExportFormat.PNG:
            case ExportFormat.JPEG:
                SetCombinedTextToEqualWidth(data.Select(x => x.TitleFormatted).ToList(), 2, plot.LegendFontSize, typeface);
                break;

            default:
                // Act as if the font was monospaced
                var titleP1MaxWidth = data.Max(x => x.TitleFormatted.TitlePart1.Title.Length);
                var titleP2MaxWidth = data.Max(x => x.TitleFormatted.TitlePart2.Title.Length);
                foreach (var item in data)
                {
                    var p1Diff = titleP1MaxWidth - item.TitleFormatted.TitlePart1.Title.Length;
                    var p2Diff = titleP2MaxWidth - item.TitleFormatted.TitlePart2.Title.Length;
                    item.TitleFormatted.TitleFormatted = $"{item.TitleFormatted.TitlePart1.Title}{new string(' ', p1Diff + p2Diff + 6)}{item.TitleFormatted.TitlePart2.Title}";
                }
                break;
            }

            // TODO: Update this for the newer metrics and names
            var trackerFormatString = $"Compound: {{{nameof(CompoundData.CompoundName)}}}\nStart time: {{{nameof(CompoundData.StartTimeMinutes)}}}\nStop Time: {{{nameof(CompoundData.StopTimeMinutes)}}}\nTotal Abundance: {{{nameof(CompoundData.TotalIntensitySum)}}}\nMax Intensity: {{{nameof(CompoundData.MaxIntensity)}}}\nMax Intensity NET: {{{nameof(CompoundData.MaxIntensityNet)}}}";
            var pointMapper         = new Func <object, ScatterPoint>(x => new ScatterPoint(((CompoundData)x).ElutionTimeMidpoint, ((CompoundData)x).TotalIntensitySum));

            var yAxisMax = yMax * 20;   // seems big, but it is a logarithmic scale
            var yAxisMin = yMin / 10.0; // 1 step down on the log scale
            var yAxis    = new LogarithmicAxis
            {
                Position        = AxisPosition.Left,
                Title           = "Intensity (Log10)",
                StringFormat    = "#.#e00",
                FontSize        = 20,
                Minimum         = yAxisMin,
                AbsoluteMinimum = yAxisMin,
                Maximum         = yAxisMax,
                AbsoluteMaximum = yAxisMax,
            };

            var xAxisMax = xMax * 1.03;        // Add 3%
            var xAxisMin = xMin - xMax * 0.03; // Subtract 3% of the max
            var xAxis    = new LinearAxis
            {
                Position        = AxisPosition.Bottom,
                Title           = "Time (min)",
                FontSize        = 20,
                Minimum         = xAxisMin,
                AbsoluteMinimum = xAxisMin,
                Maximum         = xAxisMax,
                AbsoluteMaximum = xAxisMax,
            };

            plot.Axes.Add(yAxis);
            plot.Axes.Add(xAxis);

            foreach (var item in data)
            {
                var pointStrokeThickness = seriesPointStrokeThickness;
                if (item.PointMarker == MarkerType.Cross || item.PointMarker == MarkerType.Plus || item.PointMarker == MarkerType.Star)
                {
                    pointStrokeThickness += 2;
                }

                var series = new ScatterSeries
                {
                    Title                 = item.TitleFormatted.TitleFormatted,
                    MarkerType            = item.PointMarker,
                    MarkerStrokeThickness = pointStrokeThickness,
                    MarkerSize            = seriesPointMarkerSize,
                    MarkerFill            = item.PointColor,
                    MarkerStroke          = item.PointColor,
                    ItemsSource           = item.Points,
                    Mapping               = pointMapper,
                    TrackerFormatString   = trackerFormatString,
                };

                plot.Series.Add(series);
            }

            return(plot);
        }
コード例 #20
0
        public KiviKayra(Window kiv, List <SeulakirjastoIndex> s, List <SeulaLapPros> p, List <Seulakirjasto> alls, List <SeulaLapPros> sisAla, List <SeulaLapPros> sisYla, List <SeulaLapPros> uloAla, List <SeulaLapPros> uloYla)
        {
            InitializeComponent();

            _kivi        = (Kiviohjelma)kiv;
            seulat       = s;
            prosentit    = p;
            kaikkiseulat = alls;
            sisOhjeAla   = sisAla;
            sisOhjeYla   = sisYla;
            uloOhjeAla   = uloAla;
            uloOhjeYla   = uloYla;

            //Tällä saadaan osoitin toimimaan niin, että ei tarvitse muuta tehdä kuin laittaa hiiren osoitin koordinaattipisteen päälle
            //niin se näyttää koordinaattitiedot automaattisesti
            customController = new PlotController();
            customController.UnbindMouseDown(OxyMouseButton.Left);
            customController.BindMouseEnter(PlotCommands.HoverSnapTrack);

            var model = new PlotModel {
                Title = "Rakeisuuskäyrä", Subtitle = "Vie hiiri pisteiden lähelle nähdäksesi arvot"
            };

            //model.PlotType = PlotType.XY;
            model.LegendPosition    = LegendPosition.TopRight;
            model.LegendOrientation = LegendOrientation.Horizontal;
            model.LegendPlacement   = LegendPlacement.Outside;

            /*Collection<Item> items = new Collection<Item>();
             * for (int i = kaikkiseulat.Count - 1; i >= 0; i--)
             * {
             *  items.Add(new Item(kaikkiseulat[i].seula.ToString(), kaikkiseulat[i].seula));
             * }*/
            LinearAxis yaxis = new LinearAxis //Y-akseli
            {
                Maximum            = 100,
                Minimum            = 0,
                Title              = "Prosentti",
                TickStyle          = TickStyle.Inside,
                MinorTickSize      = 4,
                Position           = AxisPosition.Left,
                MinorStep          = 5,
                MinorGridlineStyle = LineStyle.Dot,
                //AbsoluteMaximum = 100,
                //AbsoluteMinimum = 0,
                MajorStep = 10,
                //MinorStep = 5,
                MajorGridlineStyle = LineStyle.Dash,
                //MinorGridlineStyle = LineStyle.Dash,
                IsZoomEnabled = false,
                IsPanEnabled  = false
            };
            //------------------------------Logaritmiakseli-------------------------
            LogarithmicAxis xaxis = new LogarithmicAxis(); //X-akseli

            if (seulat == null || prosentit == null || seulat.Count == 0 || prosentit.Count == 0)
            {
                xaxis.Title              = "Seula";
                xaxis.TickStyle          = TickStyle.Inside;
                xaxis.Position           = AxisPosition.Bottom;
                xaxis.MajorGridlineStyle = LineStyle.Solid;
                //xaxis.MajorStep = 2;
                //xaxis.MinorGridlineStyle = LineStyle.Dash;
                //xaxis.Maximum = seulat[0].seula;
                xaxis.Minimum       = 0.001;
                xaxis.IsZoomEnabled = false;
                xaxis.IsPanEnabled  = false;
            }
            else
            {
                xaxis.Title              = "Seula";
                xaxis.TickStyle          = TickStyle.Inside;
                xaxis.Position           = AxisPosition.Bottom;
                xaxis.MajorGridlineStyle = LineStyle.Solid;
                //xaxis.Base = logbase;
                //xaxis.MajorStep =
                //xaxis.MinorGridlineStyle = LineStyle.Dash;
                xaxis.Maximum = kaikkiseulat[0].seula;
                //xaxis.Minimum = 0.001;
                if (kaikkiseulat[(kaikkiseulat.Count - 1)].seula > 0)
                {
                    xaxis.Minimum = (kaikkiseulat[(kaikkiseulat.Count - 1)].seula);
                }
                else
                {
                    xaxis.Minimum = 0.001;
                }
                xaxis.AbsoluteMinimum = 0;
                xaxis.IsZoomEnabled   = false;
                xaxis.IsPanEnabled    = false;
                xaxis.StartPosition   = 0;
            }

            /*CategoryAxis caxis = new CategoryAxis();//X-akseli
             *
             * if (seulat == null || prosentit == null || seulat.Count == 0 || prosentit.Count == 0)
             * {
             *  caxis.Title = "Seula";
             *  caxis.TickStyle = TickStyle.Inside;
             *  caxis.Position = AxisPosition.Bottom;
             *  caxis.IsTickCentered = true;
             *  caxis.MajorGridlineStyle = LineStyle.Solid;
             *  caxis.MajorGridlineColor = OxyColors.DarkSlateGray;
             *  caxis.MajorTickSize = 7;
             *  //caxis.Maximum = seulat[0].seula;
             *  //caxis.Minimum = seulat[(seulat.Count - 1)].seula;
             *  caxis.IsZoomEnabled = false;
             *  caxis.IsPanEnabled = false;
             *  caxis.MinorStep = 0.5;
             *  caxis.MajorStep = 1;
             *  caxis.ItemsSource = items;
             *  caxis.LabelField = "Label";
             * }
             * else
             * {
             *  caxis.Title = "Seula";
             *  caxis.TickStyle = TickStyle.Inside;
             *  caxis.Position = AxisPosition.Bottom;
             *  caxis.IsTickCentered = true;
             *  caxis.MajorGridlineStyle = LineStyle.Solid;
             *  caxis.MajorGridlineColor = OxyColors.DarkSlateGray;
             *  caxis.MajorTickSize = 7;
             *  //caxis.Maximum = seulat[0].seula;
             *  //caxis.Minimum = seulat[(seulat.Count-1)].seula;
             *  caxis.IsZoomEnabled = false;
             *  caxis.IsPanEnabled = false;
             *  caxis.MinorStep = 0.5;
             *  caxis.MajorStep = 1;
             *  caxis.ItemsSource = items;
             *  caxis.LabelField = "Label";
             * }
             * for (int i = kaikkiseulat.Count-1; i >= 0; i--) //Laittaa Y-akselille otsikot, eli seulat jotka on käytössä tällä hetkellä
             * {
             *  caxis.ActualLabels.Add(kaikkiseulat[i].seula.ToString());
             * }*/

            LineSeries l1 = new LineSeries //Tuloskäyrä/viiva
            {
                Title      = "Rakeisuuskäyrä",
                MarkerType = MarkerType.Circle,
                CanTrackerInterpolatePoints = false,
                MarkerSize = 5
                             //LabelFormatString = "Läp%: {1:0.0} %"
            };
            LineSeries ohje1 = new LineSeries
            {
                Title      = "Sisäiset ohjealueet",
                MarkerType = MarkerType.None,
                CanTrackerInterpolatePoints = false,
                MarkerSize     = 0,
                Color          = OxyColors.CadetBlue,
                RenderInLegend = true
            };
            LineSeries ohje2 = new LineSeries
            {
                //Title = "Sisäinen ylempi ohjealue",
                MarkerType = MarkerType.None,
                CanTrackerInterpolatePoints = false,
                MarkerSize     = 0,
                Color          = OxyColors.CadetBlue,
                RenderInLegend = false
            };
            LineSeries ohje3 = new LineSeries
            {
                Title      = "Ulkoiset ohjealueet",
                MarkerType = MarkerType.None,
                CanTrackerInterpolatePoints = false,
                MarkerSize     = 0,
                Color          = OxyColors.Indigo,
                RenderInLegend = true
            };
            LineSeries ohje4 = new LineSeries
            {
                //Title = "Ulkoinen ylempi ohjealue",
                MarkerType = MarkerType.None,
                CanTrackerInterpolatePoints = false,
                MarkerSize     = 0,
                Color          = OxyColors.Indigo,
                RenderInLegend = false
            };
            //seulat.Reverse();

            /*sisOhjeAla.Reverse();
            *  sisOhjeYla.Reverse();
            *  uloOhjeAla.Reverse();
            *  uloOhjeYla.Reverse();*/
            List <Pisteet> la = new List <Pisteet>(); //Pääviiva
            List <Pisteet> o1 = new List <Pisteet>();
            List <Pisteet> o2 = new List <Pisteet>();
            List <Pisteet> o3 = new List <Pisteet>();
            List <Pisteet> o4 = new List <Pisteet>();

            //------------------Käytetään CategoryAxisin kanssa--------------------

            /*int j = 0;
             * for (int i = prosentit.Count - 1; i >= 0; i--)
             * {
             *  Pisteet l = new Pisteet();
             *  l.X = seulat[i].index;
             *  l.Y = prosentit[j].tulos;
             *  la.Add(l);
             *  j++;
             * }//--------------------------------------------------------------------*/
            //---------------Käytetään LogarithmAxisin kanssa---------------------
            for (int i = 0; i < prosentit.Count; i++)
            {
                Pisteet l = new Pisteet();
                l.X = seulat[i].seula;//seulat[i].seula kun käytetään LogarithmAxisia
                l.Y = prosentit[i].tulos;
                la.Add(l);
            }//--------------------------------------------------------------------*/
            foreach (Control c in _kivi.ohjeArvot.Children)
            {
                if (c.GetType() == typeof(TextBox))
                {
                    if (((TextBox)c).Tag.ToString() != null)
                    {
                        if (((TextBox)c).Tag.ToString() == "seulaValue")
                        {
                            if (((TextBox)c).Text != String.Empty)
                            {
                                string seulatxt = ((TextBox)c).Text;
                                seulatxt = seulatxt.Replace(".", ",");
                                string name = ((TextBox)c).Name;
                                int    ind  = Convert.ToInt32(Regex.Match(name, @"\d+$").Value);//otetaan objektin järjestysnumero nimestä,

                                foreach (SeulaLapPros sl in sisOhjeAla)
                                {
                                    if (ind == sl.index)
                                    {
                                        if (Double.TryParse(seulatxt, out double r) == true)
                                        {
                                            sl.seulaArvo = Convert.ToDouble(seulatxt);
                                        }
                                    }
                                }
                                foreach (SeulaLapPros sl in sisOhjeYla)
                                {
                                    if (ind == sl.index)
                                    {
                                        if (Double.TryParse(seulatxt, out double r) == true)
                                        {
                                            sl.seulaArvo = Convert.ToDouble(seulatxt);
                                        }
                                    }
                                }
                                foreach (SeulaLapPros sl in uloOhjeAla)
                                {
                                    if (ind == sl.index)
                                    {
                                        if (Double.TryParse(seulatxt, out double r) == true)
                                        {
                                            sl.seulaArvo = Convert.ToDouble(seulatxt);
                                        }
                                    }
                                }
                                foreach (SeulaLapPros sl in uloOhjeYla)
                                {
                                    if (ind == sl.index)
                                    {
                                        if (Double.TryParse(seulatxt, out double r) == true)
                                        {
                                            sl.seulaArvo = Convert.ToDouble(seulatxt);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            for (int i = sisOhjeAla.Count - 1; i >= 0; i--)
            {
                Pisteet l = new Pisteet();
                l.X = sisOhjeAla[i].seulaArvo;
                l.Y = sisOhjeAla[i].tulos;
                o1.Add(l);
            }
            for (int i = sisOhjeYla.Count - 1; i >= 0; i--)
            {
                Pisteet l = new Pisteet();
                l.X = sisOhjeYla[i].seulaArvo;
                l.Y = sisOhjeYla[i].tulos;
                o2.Add(l);
            }
            for (int i = uloOhjeAla.Count - 1; i >= 0; i--)
            {
                Pisteet l = new Pisteet();
                l.X = uloOhjeAla[i].seulaArvo;
                l.Y = uloOhjeAla[i].tulos;
                o3.Add(l);
            }
            for (int i = uloOhjeYla.Count - 1; i >= 0; i--)
            {
                Pisteet l = new Pisteet();
                l.X = uloOhjeYla[i].seulaArvo;
                l.Y = uloOhjeYla[i].tulos;
                o4.Add(l);
            }


            foreach (Pisteet e in la)
            {
                l1.Points.Add(new DataPoint(e.X, e.Y));
            }
            foreach (Pisteet e in o1)
            {
                ohje1.Points.Add(new DataPoint(e.X, e.Y));
            }
            foreach (Pisteet e in o2)
            {
                ohje2.Points.Add(new DataPoint(e.X, e.Y));
            }
            foreach (Pisteet e in o3)
            {
                ohje3.Points.Add(new DataPoint(e.X, e.Y));
            }
            foreach (Pisteet e in o4)
            {
                ohje4.Points.Add(new DataPoint(e.X, e.Y));
            }
            //----------------------Kovakoodatut arvot, testitapaus-----------------------------

            /*double[] ar = new double[] { 0.063, 0.125, 0.25, 0.5, 1, 2, 4, 6, 8, 12, 16, 18, 20, 25, 30, 64, 100, 200 };
             * double[] er = new double[] { 1.8, 3, 4.5, 5.6, 6.5, 8.3, 9.0, 9.9, 13.8, 15.6, 16.5, 17.4, 18.6, 20.4, 30.8, 31.4, 50.5, 62.7 };
             * List<Pisteet> la = new List<Pisteet>();
             * for (int i = 0; i < ar.Length; i++)//prosentit.Count
             * {
             *  Pisteet l = new Pisteet();
             *  l.X = ar[i];
             *  l.Y = er[i];
             *  la.Add(l);
             * }
             * foreach (Pisteet e in la)
             * {
             *  l1.Points.Add(new DataPoint(e.X, e.Y));
             * }*///-----------------------------------------------------------------------------------

            model.Axes.Add(yaxis);
            model.Axes.Add(xaxis);
            //model.Axes.Add(caxis);
            model.Series.Add(l1);
            model.Series.Add(ohje1);
            model.Series.Add(ohje2);
            model.Series.Add(ohje3);
            model.Series.Add(ohje4);
            KiviModel        = model;
            this.DataContext = this;
        }
コード例 #21
0
 public void LogarithmicAxis()
 {
     var s1 = new OxyPlot.Axes.LogarithmicAxis();
     var s2 = new LogarithmicAxis();
     OxyAssert.PropertiesAreEqual(s1, s2);
 }
コード例 #22
0
 private void setLogModel()
 {
     LinearAxis AxiX = new LinearAxis();            
     LogarithmicAxis AxiY = new LogarithmicAxis();            
     AxiX.Position = AxisPosition.Bottom;         
     AxiY.Position = AxisPosition.Left;
     this.logModel.MyModel.Axes.Add(AxiX);
     this.logModel.MyModel.Axes.Add(AxiY);
 }
コード例 #23
0
ファイル: KayraImage.cs プロジェクト: JTu8/Kivilabra
        public MemoryStream KayraKuva(Window win)
        {
            if (win.Name == "kiviohjelma")
            {
                Kiviohjelma _kivi = (Kiviohjelma)win;
                List <SeulakirjastoIndex> selist     = new List <SeulakirjastoIndex>(); //Seulat joita on käytetty laskennassa, eli X-arvot.
                List <SeulaLapPros>       tulist     = new List <SeulaLapPros>();       //Läpäisyprosenttitulokset, eli Y-arvot
                List <Seulakirjasto>      selistALL  = new List <Seulakirjasto>();      //Kaikki seulat mitä on valittuna. Tehdään täysi X-akseli tällä.
                List <SeulaLapPros>       sisOhjeAla = new List <SeulaLapPros>();       //Sisempi ohjealue, alempi ohje%
                List <SeulaLapPros>       sisOhjeYla = new List <SeulaLapPros>();       //Sisempi ohjealue, ylempi ohje%
                List <SeulaLapPros>       uloOhjeAla = new List <SeulaLapPros>();       //Ulompi ohjealue, alempi ohje%
                List <SeulaLapPros>       uloOhjeYla = new List <SeulaLapPros>();       //Ulompi ohjealue, ylempi ohje%


                //Lukee tarvittavat prosenttiarvot ja lisää ne tulist-listaan
                //Ottaa valitut seulat ohjelmasta, ottaa talteen niiden sijainnin järjestyslukuna ja laittaa ne selist-listaan
                //Tuloksissa saattaa olla välejä (kaikkeja rivejä ei täytetty) joten koodi tarkistaa sen myös

                if (_kivi.lapaisypros1.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 0,
                        tulos = Convert.ToDouble(_kivi.lapaisypros1.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula1.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 17,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros2.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 1,
                        tulos = Convert.ToDouble(_kivi.lapaisypros2.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula2.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 16,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros3.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 2,
                        tulos = Convert.ToDouble(_kivi.lapaisypros3.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula3.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 15,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros4.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 3,
                        tulos = Convert.ToDouble(_kivi.lapaisypros4.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula4.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 14,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros5.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 4,
                        tulos = Convert.ToDouble(_kivi.lapaisypros5.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula5.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 13,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros6.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 5,
                        tulos = Convert.ToDouble(_kivi.lapaisypros6.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula6.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 12,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros7.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 6,
                        tulos = Convert.ToDouble(_kivi.lapaisypros7.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula7.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 11,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros8.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 7,
                        tulos = Convert.ToDouble(_kivi.lapaisypros8.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula8.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 10,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros9.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 8,
                        tulos = Convert.ToDouble(_kivi.lapaisypros9.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula9.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 9,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros10.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 9,
                        tulos = Convert.ToDouble(_kivi.lapaisypros10.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula10.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 8,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros11.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 10,
                        tulos = Convert.ToDouble(_kivi.lapaisypros11.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula11.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 7,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros12.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 11,
                        tulos = Convert.ToDouble(_kivi.lapaisypros12.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula12.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 6,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros13.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 12,
                        tulos = Convert.ToDouble(_kivi.lapaisypros13.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula13.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 5,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros14.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 13,
                        tulos = Convert.ToDouble(_kivi.lapaisypros14.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula14.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 4,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros15.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 14,
                        tulos = Convert.ToDouble(_kivi.lapaisypros15.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula15.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 3,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros16.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 15,
                        tulos = Convert.ToDouble(_kivi.lapaisypros16.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula16.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 2,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros17.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 16,
                        tulos = Convert.ToDouble(_kivi.lapaisypros17.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula17.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 1,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }
                if (_kivi.lapaisypros18.Text != String.Empty)
                {
                    SeulaLapPros sl = new SeulaLapPros
                    {
                        index = 17,
                        tulos = Convert.ToDouble(_kivi.lapaisypros18.Text)
                    };
                    tulist.Add(sl);
                    string seulatxt = _kivi.Seula18.Text;
                    seulatxt = seulatxt.Replace(".", ",");
                    SeulakirjastoIndex ke = new SeulakirjastoIndex
                    {
                        index = 0,
                        seula = Convert.ToDouble(seulatxt)
                    };
                    selist.Add(ke);
                }

                foreach (Control c in _kivi.seulaArvot.Children) //Kaikille esineille seulaArvot-canvasissa. Tarkoituksena ottaa kaikki valitut seulat dropdown-valikoista talteen
                {
                    if (c.GetType() == typeof(ComboBox))         //jos esineen tyyppi on combobox
                    {
                        //Console.WriteLine("Combobox text: " + ((ComboBox)c).Text+",  tag: "+ ((ComboBox)c).Tag);
                        if (((ComboBox)c).Tag.ToString() != null)        //Jos comboboxin tagi on tyhjä
                        {
                            if (((ComboBox)c).Tag.ToString() == "seula") //jos comboboxin tagi on "seula", eli kaikki seuladropdown-valikot
                            {
                                //Console.WriteLine(((ComboBox)c).Text);
                                string seulatxt = ((ComboBox)c).Text;
                                seulatxt = seulatxt.Replace(".", ",");
                                Seulakirjasto ke = new Seulakirjasto
                                {
                                    seula = Convert.ToDouble(seulatxt)
                                };
                                selistALL.Add(ke);
                            }
                        }
                    }
                }

                for (int i = 0; i < 4; i++)//Otetaan ohjealueet talteen yksi kolumni kerrallaan
                {
                    switch (i)
                    {
                    case 0:
                        int o = 17;
                        foreach (Control c in _kivi.ohjeArvot.Children)
                        {
                            if (c.GetType() == typeof(TextBox))
                            {
                                if (((TextBox)c).Tag.ToString() != null)
                                {
                                    if (((TextBox)c).Tag.ToString() == "sisAla")
                                    {
                                        if (((TextBox)c).Text != String.Empty)
                                        {
                                            string seulatxt = ((TextBox)c).Text;
                                            seulatxt = seulatxt.Replace(".", ",");
                                            SeulaLapPros ohj = new SeulaLapPros
                                            {
                                                index = o,
                                                tulos = Convert.ToDouble(seulatxt)
                                            };
                                            sisOhjeAla.Add(ohj);
                                        }
                                        o--;
                                    }
                                }
                            }
                        }
                        break;

                    case 1:
                        int k = 17;
                        foreach (Control c in _kivi.ohjeArvot.Children)
                        {
                            if (c.GetType() == typeof(TextBox))
                            {
                                if (((TextBox)c).Tag.ToString() != null)
                                {
                                    if (((TextBox)c).Tag.ToString() == "sisYla")
                                    {
                                        if (((TextBox)c).Text != String.Empty)
                                        {
                                            string seulatxt = ((TextBox)c).Text;
                                            seulatxt = seulatxt.Replace(".", ",");
                                            SeulaLapPros ohj = new SeulaLapPros
                                            {
                                                index = k,
                                                tulos = Convert.ToDouble(seulatxt)
                                            };
                                            sisOhjeYla.Add(ohj);
                                        }
                                        k--;
                                    }
                                }
                            }
                        }
                        break;

                    case 2:
                        int l = 17;
                        foreach (Control c in _kivi.ohjeArvot.Children)
                        {
                            if (c.GetType() == typeof(TextBox))
                            {
                                if (((TextBox)c).Tag.ToString() != null)
                                {
                                    if (((TextBox)c).Tag.ToString() == "uloAla")
                                    {
                                        if (((TextBox)c).Text != String.Empty)
                                        {
                                            string seulatxt = ((TextBox)c).Text;
                                            seulatxt = seulatxt.Replace(".", ",");
                                            SeulaLapPros ohj = new SeulaLapPros
                                            {
                                                index = l,
                                                tulos = Convert.ToDouble(seulatxt)
                                            };
                                            uloOhjeAla.Add(ohj);
                                        }
                                        l--;
                                    }
                                }
                            }
                        }
                        break;

                    case 3:
                        int m = 17;
                        foreach (Control c in _kivi.ohjeArvot.Children)
                        {
                            if (c.GetType() == typeof(TextBox))
                            {
                                if (((TextBox)c).Tag.ToString() != null)
                                {
                                    if (((TextBox)c).Tag.ToString() == "uloYla")
                                    {
                                        if (((TextBox)c).Text != String.Empty)
                                        {
                                            string seulatxt = ((TextBox)c).Text;
                                            seulatxt = seulatxt.Replace(".", ",");
                                            SeulaLapPros ohj = new SeulaLapPros
                                            {
                                                index = m,
                                                tulos = Convert.ToDouble(seulatxt)
                                            };
                                            uloOhjeYla.Add(ohj);
                                        }
                                        m--;
                                    }
                                }
                            }
                        }
                        break;

                    default:
                        break;
                    }
                }
                //----------------------------------------------------------------------
                //Luodaan listoista käyrä ja otetaan kuva
                //----------------------------------------------------------------------
                PlotModel plotModel = new PlotModel();
                plotModel.PlotType        = PlotType.XY;
                plotModel.IsLegendVisible = false;
                plotModel.PlotMargins     = new OxyThickness(15, 15, 15, 15);
                //asetetaan legendan asetukset
                //plotModel.LegendPosition = LegendPosition.TopRight;
                //plotModel.LegendOrientation = LegendOrientation.Horizontal;
                //plotModel.LegendPlacement = LegendPlacement.Outside;
                //Tehdään kokoelma, jossa on kaikki käytössä olevat seulat. Nämä sidotaan X-akseliin

                /*Collection<Item> items = new Collection<Item>();
                 * for (int i = selistALL.Count - 1; i >= 0; i--)
                 * {
                 *  items.Add(new Item(selistALL[i].seula.ToString(), selistALL[i].seula));
                 * }*/
                //Luodaan Y-akseli
                LinearAxis yaxis = new LinearAxis //Y-akseli
                {
                    Maximum = 100,
                    Minimum = 0,
                    //Title = "Prosentti",
                    TickStyle          = TickStyle.Inside,
                    MinorStep          = 5,
                    MinorGridlineStyle = LineStyle.Dot,
                    Position           = AxisPosition.Left,
                    //AbsoluteMaximum = 100,
                    //AbsoluteMinimum = 0,
                    MajorStep = 10,
                    //MinorStep = 5,
                    MajorGridlineStyle = LineStyle.Dash,
                    //MinorGridlineStyle = LineStyle.Dash,
                    IsZoomEnabled = false,
                    IsPanEnabled  = false
                };
                //------------------------------Logaritmiakseli-------------------------
                LogarithmicAxis xaxis = new LogarithmicAxis(); //X-akseli

                /* double yhteensa = 0;
                 * foreach (Seulakirjasto value in selistALL)
                 * {
                 *   yhteensa += value.seula;
                 * }*/
                //double keskimaara = yhteensa / kaikkiseulat.Count;
                //double logbase = 1.0 / Math.Log(Math.E, keskimaara);
                if (selist == null || tulist == null || selist.Count == 0 || tulist.Count == 0)
                {
                    //xaxis.Title = "Seula";
                    xaxis.TickStyle          = TickStyle.Inside;
                    xaxis.Position           = AxisPosition.Bottom;
                    xaxis.MajorGridlineStyle = LineStyle.Solid;
                    //xaxis.Base = logbase;
                    //xaxis.MajorStep = 2;
                    //xaxis.MinorGridlineStyle = LineStyle.Dash;
                    //xaxis.Maximum = seulat[0].seula;
                    //xaxis.Minimum = seulat[(seulat.Count - 1)].seula;
                    xaxis.IsZoomEnabled = false;
                    xaxis.IsPanEnabled  = false;
                }
                else
                {
                    //xaxis.Title = "Seula";
                    xaxis.TickStyle          = TickStyle.Inside;
                    xaxis.Position           = AxisPosition.Bottom;
                    xaxis.MajorGridlineStyle = LineStyle.Solid;
                    //xaxis.Base = logbase;
                    //xaxis.MajorStep =
                    //xaxis.MinorGridlineStyle = LineStyle.Dash;
                    xaxis.Maximum       = selistALL[0].seula;
                    xaxis.Minimum       = selistALL[(selistALL.Count - 1)].seula;
                    xaxis.IsZoomEnabled = false;
                    xaxis.IsPanEnabled  = false;
                }
                //-------------------------------------------------------------------
                //Luodaan X-akseli

                /*CategoryAxis caxis = new CategoryAxis();//X-akseli
                 *
                 * if (selist == null || tulist == null || selist.Count == 0 || tulist.Count == 0) //Jos jokin lista on tyhjä, luodaan tyhjä perusakseli
                 * {
                 *  caxis.Title = "Seula";
                 *  caxis.TickStyle = TickStyle.Inside;
                 *  caxis.Position = AxisPosition.Bottom;
                 *  caxis.IsTickCentered = true;
                 *  caxis.MajorGridlineStyle = LineStyle.Solid;
                 *  caxis.MajorGridlineColor = OxyColors.DarkSlateGray;
                 *  caxis.MajorTickSize = 7;
                 *  //caxis.Maximum = seulat[0].seula;
                 *  //caxis.Minimum = seulat[(seulat.Count - 1)].seula;
                 *  caxis.IsZoomEnabled = false;
                 *  caxis.IsPanEnabled = false;
                 *  caxis.MinorStep = 0.5;
                 *  caxis.MajorStep = 1;
                 *  caxis.ItemsSource = items;
                 *  caxis.LabelField = "Label";
                 * }
                 * else
                 * {
                 *  caxis.Title = "Seula";
                 *  caxis.TickStyle = TickStyle.Inside;
                 *  caxis.Position = AxisPosition.Bottom;
                 *  caxis.IsTickCentered = true;
                 *  caxis.MajorGridlineStyle = LineStyle.Solid;
                 *  caxis.MajorGridlineColor = OxyColors.DarkSlateGray;
                 *  caxis.MajorTickSize = 7;
                 *  //caxis.Maximum = seulat[0].seula;
                 *  //caxis.Minimum = seulat[(seulat.Count-1)].seula;
                 *  caxis.IsZoomEnabled = false;
                 *  caxis.IsPanEnabled = false;
                 *  caxis.MinorStep = 0.5;
                 *  caxis.MajorStep = 1;
                 *  caxis.ItemsSource = items;
                 *  caxis.LabelField = "Label";
                 * }
                 * for (int i = selistALL.Count - 1; i >= 0; i--) //Laittaa Y-akselille otsikot, eli seulat jotka on käytössä tällä hetkellä
                 * {
                 *  caxis.ActualLabels.Add(selistALL[i].seula.ToString());
                 * }*/

                LineSeries l1 = new LineSeries //Tuloskäyrä/viiva
                {
                    Title      = "Rakeisuuskäyrä",
                    MarkerType = MarkerType.Circle,
                    CanTrackerInterpolatePoints = false,
                    MarkerSize = 3
                                 //LabelFormatString = "Läp%: {1:0.0} %"
                };
                //Luodaan itse viivat
                LineSeries ohje1 = new LineSeries
                {
                    MarkerType = MarkerType.None,
                    CanTrackerInterpolatePoints = false,
                    MarkerSize = 1,
                    Color      = OxyColors.CadetBlue
                };
                LineSeries ohje2 = new LineSeries
                {
                    MarkerType = MarkerType.None,
                    CanTrackerInterpolatePoints = false,
                    MarkerSize = 0,
                    Color      = OxyColors.CadetBlue
                };
                LineSeries ohje3 = new LineSeries
                {
                    MarkerType = MarkerType.None,
                    CanTrackerInterpolatePoints = false,
                    MarkerSize = 0,
                    Color      = OxyColors.Indigo
                };
                LineSeries ohje4 = new LineSeries
                {
                    MarkerType = MarkerType.None,
                    CanTrackerInterpolatePoints = false,
                    MarkerSize = 0,
                    Color      = OxyColors.Indigo
                };
                //selist.Reverse();
                //Luodaan listat joihin tulee viivojen pisteet
                List <Pisteet> la = new List <Pisteet>(); //Pääviiva
                List <Pisteet> o1 = new List <Pisteet>();
                List <Pisteet> o2 = new List <Pisteet>();
                List <Pisteet> o3 = new List <Pisteet>();
                List <Pisteet> o4 = new List <Pisteet>();
                //------------------Käytetään CategoryAxisin kanssa--------------------

                /*int j = 0;
                 * for (int i = tulist.Count - 1; i >= 0; i--)
                 * {
                 *  //Syötetään yhden pisteen koordinaatit listaan esineeksi
                 *  Pisteet l = new Pisteet();
                 *  l.X = selist[i].index;
                 *  l.Y = tulist[j].tulos;
                 *  la.Add(l);
                 *  j++;
                 * }//--------------------------------------------------------------------*/
                //---------------Käytetään LogarithmAxisin kanssa---------------------
                for (int i = 0; i < tulist.Count; i++)
                {
                    Pisteet l = new Pisteet();
                    l.X = selist[i].seula;//seulat[i].seula kun käytetään LogarithmAxisia
                    l.Y = tulist[i].tulos;
                    la.Add(l);
                }//--------------------------------------------------------------------*/

                for (int i = sisOhjeAla.Count - 1; i >= 0; i--)
                {
                    Pisteet l = new Pisteet();
                    l.X = sisOhjeAla[i].index;
                    l.Y = sisOhjeAla[i].tulos;
                    o1.Add(l);
                }
                for (int i = sisOhjeYla.Count - 1; i >= 0; i--)
                {
                    Pisteet l = new Pisteet();
                    l.X = sisOhjeYla[i].index;
                    l.Y = sisOhjeYla[i].tulos;
                    o2.Add(l);
                }
                for (int i = uloOhjeAla.Count - 1; i >= 0; i--)
                {
                    Pisteet l = new Pisteet();
                    l.X = uloOhjeAla[i].index;
                    l.Y = uloOhjeAla[i].tulos;
                    o3.Add(l);
                }
                for (int i = uloOhjeYla.Count - 1; i >= 0; i--)
                {
                    Pisteet l = new Pisteet();
                    l.X = uloOhjeYla[i].index;
                    l.Y = uloOhjeYla[i].tulos;
                    o4.Add(l);
                }

                //Laitetaan luodut pistelistat viivoihinsa
                foreach (Pisteet e in la)
                {
                    l1.Points.Add(new DataPoint(e.X, e.Y));
                }
                foreach (Pisteet e in o1)
                {
                    ohje1.Points.Add(new DataPoint(e.X, e.Y));
                }
                foreach (Pisteet e in o2)
                {
                    ohje2.Points.Add(new DataPoint(e.X, e.Y));
                }
                foreach (Pisteet e in o3)
                {
                    ohje3.Points.Add(new DataPoint(e.X, e.Y));
                }
                foreach (Pisteet e in o4)
                {
                    ohje4.Points.Add(new DataPoint(e.X, e.Y));
                }
                //----------------------Kovakoodatut arvot, testitapaus-----------------------------

                /*double[] ar = new double[] { 0.063, 0.125, 0.25, 0.5, 1, 2, 4, 6, 8, 12, 16, 18, 20, 25, 30, 64, 100, 200 };
                 * double[] er = new double[] { 1.8, 3, 4.5, 5.6, 6.5, 8.3, 9.0, 9.9, 13.8, 15.6, 16.5, 17.4, 18.6, 20.4, 30.8, 31.4, 50.5, 62.7 };
                 * List<Pisteet> la = new List<Pisteet>();
                 * for (int i = 0; i < ar.Length; i++)//prosentit.Count
                 * {
                 *  Pisteet l = new Pisteet();
                 *  l.X = ar[i];
                 *  l.Y = er[i];
                 *  la.Add(l);
                 * }
                 * foreach (Pisteet e in la)
                 * {
                 *  l1.Points.Add(new DataPoint(e.X, e.Y));
                 * }*///-----------------------------------------------------------------------------------
                //Syötetään kaikki luodut viivat ja akselit kaavioon
                plotModel.Axes.Add(yaxis);
                plotModel.Axes.Add(xaxis);
                //plotModel.Axes.Add(caxis);
                plotModel.Series.Add(l1);
                plotModel.Series.Add(ohje1);
                plotModel.Series.Add(ohje2);
                plotModel.Series.Add(ohje3);
                plotModel.Series.Add(ohje4);


                //Palautetaan kuva viivakaaviosta
                var kuvastream  = new MemoryStream();
                var pngExporter = new OxyPlot.Wpf.PngExporter {
                    Width = 750, Height = 500, Background = OxyColors.White
                };
                pngExporter.Export(plotModel, kuvastream);
                return(kuvastream);
            }
            else
            {
                return(null);
            }
        }
コード例 #24
0
        public PlotView getScatteredPlot(string[,] dataArray, string title, int xColumn, int yColumn, int colorColumn, int regressionIndex, bool logX, bool logY)
        {
            string xTitle     = ucLoadFile.Instance.getCurrentColumnNames()[xColumn];
            string yTitle     = ucLoadFile.Instance.getCurrentColumnNames()[yColumn];
            string colorTitle = "No grouping selected";

            if (colorColumn != -1)
            {
                colorTitle = ucLoadFile.Instance.getCurrentColumnNames()[colorColumn];
            }
            // Getting unique group names when color grouping required and groups are strings
            ArrayList groupNames = getGroupNames(dataArray, colorColumn);

            //Populating scatter plot with data from selected columns
            var model = new PlotModel {
                Title = title
            };
            var scatterSeries = new ScatterSeries {
                MarkerType = MarkerType.Circle
            };

            for (int r = 0; r < dataArray.GetLength(0); r++)
            {   // x axis
                double xDouble   = 0;
                bool   isNumberX = double.TryParse(dataArray[r, xColumn], out xDouble);
                var    x         = xDouble;
                // y axis
                double yDouble   = 0;
                bool   isNumberY = double.TryParse(dataArray[r, yColumn], out yDouble);
                var    y         = yDouble;
                // color grouping
                double colorValue    = 0;
                bool   isNumberColor = true;
                if (colorColumn != -1)
                {
                    double colorDouble = 0;
                    isNumberColor = double.TryParse(dataArray[r, colorColumn], out colorDouble);
                    colorValue    = colorDouble;
                }
                var size = 3;
                if (!isNumberColor && !String.IsNullOrEmpty(dataArray[r, colorColumn]))
                {
                    scatterSeries.Points.Add(new ScatterPoint(x, y, size, groupNames.IndexOf(dataArray[r, colorColumn])));
                }
                else
                {
                    scatterSeries.Points.Add(new ScatterPoint(x, y, size, colorValue));
                }
            }
            // Handling of selection of axis scaling
            if (logX && !logY)
            {
                var logAxisX = new LogarithmicAxis()
                {
                    Position = AxisPosition.Bottom, Title = xTitle + ", Log(x)", UseSuperExponentialFormat = false, Base = 10, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                var linearAxisY = new LinearAxis()
                {
                    Position = AxisPosition.Left, Title = yTitle, UseSuperExponentialFormat = false, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                model.Axes.Add(logAxisX);
                model.Axes.Add(linearAxisY);
            }
            else if (!logX && logY)
            {
                var linearAxisX = new LinearAxis()
                {
                    Position = AxisPosition.Bottom, Title = xTitle, UseSuperExponentialFormat = false, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                var logAxisY = new LogarithmicAxis()
                {
                    Position = AxisPosition.Left, Title = yTitle + ", Log(y)", UseSuperExponentialFormat = false, Base = 10, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                model.Axes.Add(linearAxisX);
                model.Axes.Add(logAxisY);
            }
            else if (logX && logY)
            {
                var logAxisX = new LogarithmicAxis()
                {
                    Position = AxisPosition.Bottom, Title = xTitle + ", Log(x)", UseSuperExponentialFormat = false, Base = 10, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                var logAxisY = new LogarithmicAxis()
                {
                    Position = AxisPosition.Left, Title = yTitle + ", Log(y)", UseSuperExponentialFormat = false, Base = 10, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                model.Axes.Add(logAxisY);
                model.Axes.Add(logAxisX);
            }
            else
            {
                var linearAxisX = new LinearAxis()
                {
                    Position = AxisPosition.Bottom, Title = xTitle, UseSuperExponentialFormat = false, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                var linearAxisY = new LinearAxis()
                {
                    Position = AxisPosition.Left, Title = yTitle, UseSuperExponentialFormat = false, MajorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColors.Gray
                };
                model.Axes.Add(linearAxisX);
                model.Axes.Add(linearAxisY);
            }

            model.Series.Clear();
            model.Annotations.Clear();
            model.Series.Add(scatterSeries);
            // Adding regression graph when selected
            if (regressionIndex == 1)
            {
                double[] xClmn                 = parseDataArrayToDouble(ucLoadFile.Instance.getDataColumn(xColumn, dataArray));
                Func <double, double> pwr      = getPowerRegression(dataArray, xColumn, yColumn);
                string         label           = "pwr rgssn y=" + Math.Round(a, 3).ToString() + "*" + "x pwr" + Math.Round(b, 3).ToString() + ", r=" + Math.Round(r, 2).ToString();
                FunctionSeries fsPwrRegression = new FunctionSeries(pwr, xClmn.Min() - 0.1, xClmn.Max(), 0.01, label);
                fsPwrRegression.Color = OxyColors.DeepSkyBlue;
                model.Series.Add(fsPwrRegression);
            }
            if (regressionIndex == 2)
            {
                double[] xClmn            = parseDataArrayToDouble(ucLoadFile.Instance.getDataColumn(xColumn, dataArray));
                Func <double, double> lnr = getLinearRegression(dataArray, xColumn, yColumn);
                string bstring            = Math.Round(b, 3).ToString();
                if (b <= 0.0009)
                {
                    bstring = Math.Round(b * 1000000, 3).ToString() + "m";
                }
                string         label = "lnr rgssn y=" + Math.Round(a, 3).ToString() + "+" + bstring + "*x, r=" + Math.Round(r, 2).ToString();
                FunctionSeries fsLinearRegression = new FunctionSeries(lnr, xClmn.Min() - 0.1, xClmn.Max(), 0.01, label);
                fsLinearRegression.Color = OxyColors.DeepSkyBlue;
                model.Series.Add(fsLinearRegression);
            }
            // Adding special axis for color coding
            model.Axes.Add(new LinearColorAxis
            {
                Position      = AxisPosition.Top,
                Palette       = OxyPalettes.Rainbow(200),
                Title         = colorTitle,
                TitlePosition = 0.2,
            });

            PlotView plotView = new PlotView();

            // Adding assembled model into plot view
            plotView.Model = model;

            return(plotView);
        }
コード例 #25
0
ファイル: RtPlot.cs プロジェクト: soh05432/SoundAdjuster
        InitPlotModel()
        {
            this.PlotModel                     = new PlotModel();
            this.PlotModel.Background          = OxyColors.Black;
            this.PlotModel.PlotAreaBorderColor = OxyColors.White;

            LogarithmicAxis yAxis = new LogarithmicAxis
            {
                TextColor          = OxyColors.White,
                Position           = AxisPosition.Left,
                Base               = 10,
                Maximum            = 1,
                Minimum            = 0.00001, // peakVal * 10 ^ (dB / 20)
                MajorGridlineStyle = LineStyle.Dot,
                MajorGridlineColor = OxyColors.White,
            };

            // Window of 10 seconds
            LinearAxis xAxis = new LinearAxis
            {
                TextColor          = OxyColors.White,
                Position           = AxisPosition.Bottom,
                MajorGridlineStyle = LineStyle.Dot,
                MajorGridlineColor = OxyColors.White,
            };

            this.PlotModel.Axes.Add(yAxis);
            this.PlotModel.Axes.Add(xAxis);

            LineSeries data = new LineSeries
            {
                LineStyle       = LineStyle.Solid,
                Color           = OxyColors.Red,
                StrokeThickness = 1
            };

            this.PlotModel.Series.Add(data);

            this.PlotModel.MouseDown += (t, e) =>
            {
                double y = yAxis.InverseTransform(e.Position.Y);

                if (_soundAdjuster != null)
                {
                    _soundAdjuster.SetTargetVolume((float)y);
                }

                _pressed = true;
            };

            this.PlotModel.MouseMove += (t, e) =>
            {
                if (_pressed)
                {
                    double y = yAxis.InverseTransform(e.Position.Y);

                    if (_soundAdjuster != null)
                    {
                        _soundAdjuster.SetTargetVolume((float)y);
                    }
                }
            };

            this.PlotModel.MouseUp += (t, e) =>
            {
                _pressed = false;
            };
        }
コード例 #26
0
        private void chartConfig()
        {
            var mapper = Mappers.Xy <ObservablePoint>()
                         .X(point => Math.Log10(point.X))
                         .Y(point => point.Y);

            cartesianChart1.Series = new SeriesCollection(mapper)
            {
                new LineSeries     //BAND1
                {
                    Values        = plotValues[0],
                    Stroke        = System.Windows.Media.Brushes.Red,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries    //BAND2
                {
                    Values        = plotValues[1],
                    Stroke        = System.Windows.Media.Brushes.Blue,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries     //BAND3
                {
                    Values        = plotValues[2],
                    Stroke        = System.Windows.Media.Brushes.Yellow,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries     //BAND4
                {
                    Values        = plotValues[3],
                    Stroke        = System.Windows.Media.Brushes.Green,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries     //BAND5
                {
                    Values        = plotValues[4],
                    Stroke        = System.Windows.Media.Brushes.Orange,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND6
                {
                    Values        = plotValues[5],
                    Stroke        = System.Windows.Media.Brushes.Brown,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND7
                {
                    Values        = plotValues[6],
                    Stroke        = System.Windows.Media.Brushes.Pink,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND8
                {
                    Values        = plotValues[7],
                    Stroke        = System.Windows.Media.Brushes.Purple,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND9
                {
                    Values        = plotValues[8],
                    Stroke        = System.Windows.Media.Brushes.CornflowerBlue,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND10
                {
                    Values        = plotValues[9],
                    Stroke        = System.Windows.Media.Brushes.DarkGreen,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND11
                {
                    Values        = plotValues[10],
                    Stroke        = System.Windows.Media.Brushes.Crimson,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //BAND12
                {
                    Values        = plotValues[11],
                    Stroke        = System.Windows.Media.Brushes.BlanchedAlmond,
                    Fill          = System.Windows.Media.Brushes.Transparent,
                    DataLabels    = false,
                    PointGeometry = null
                },
                new LineSeries      //RESULT
                {
                    Values          = plotValues[12],
                    Stroke          = System.Windows.Media.Brushes.White,
                    StrokeThickness = 3,
                    Fill            = System.Windows.Media.Brushes.Transparent,
                    DataLabels      = false,
                    PointGeometry   = null
                },
            };

            var xAxis = new LogarithmicAxis()
            {
                Base           = 10,
                LabelFormatter = value => Math.Pow(10, value).ToString("N"),
                Separator      = new Separator
                {
                    Stroke          = separatorColor,
                    StrokeThickness = 0.5
                }
            };

            var yAxis = new Axis()
            {
                MinValue  = -30,
                MaxValue  = 15,
                Separator = new Separator
                {
                    Stroke          = separatorColor,
                    StrokeThickness = 0.5
                }
            };

            cartesianChart1.AxisX.Add(xAxis);
            cartesianChart1.AxisY.Add(yAxis);

            var uri1  = new Uri("D:/THOR/Assets/circle_1.png", UriKind.Relative);
            var uri2  = new Uri("D:/THOR/Assets/circle_2.png", UriKind.Relative);
            var uri3  = new Uri("D:/THOR/Assets/circle_3.png", UriKind.Relative);
            var uri4  = new Uri("D:/THOR/Assets/circle_4.png", UriKind.Relative);
            var uri5  = new Uri("D:/THOR/Assets/circle_5.png", UriKind.Relative);
            var uri6  = new Uri("D:/THOR/Assets/circle_6.png", UriKind.Relative);
            var uri7  = new Uri("D:/THOR/Assets/circle_7.png", UriKind.Relative);
            var uri8  = new Uri("D:/THOR/Assets/circle_8.png", UriKind.Relative);
            var uri9  = new Uri("D:/THOR/Assets/circle_9.png", UriKind.Relative);
            var uri10 = new Uri("D:/THOR/Assets/circle_10.png", UriKind.Relative);
            var uri11 = new Uri("D:/THOR/Assets/circle_11.png", UriKind.Relative);
            var uri12 = new Uri("D:/THOR/Assets/circle_12.png", UriKind.Relative);

            var element1 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][0]),
                Y = gainValues[currentChannel - 1][0] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri1),
                    Width  = 20,
                    Height = 20
                }
            };

            var element2 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][1]),
                Y = gainValues[currentChannel - 1][1] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri2),
                    Width  = 20,
                    Height = 20
                }
            };

            var element3 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][2]),
                Y = gainValues[currentChannel - 1][2] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri3),
                    Width  = 20,
                    Height = 20
                }
            };

            var element4 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][3]),
                Y = gainValues[currentChannel - 1][3] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri4),
                    Width  = 20,
                    Height = 20
                }
            };

            var element5 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][4]),
                Y = gainValues[currentChannel - 1][4] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri5),
                    Width  = 20,
                    Height = 20
                }
            };

            var element6 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][5]),
                Y = gainValues[currentChannel - 1][5] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri6),
                    Width  = 20,
                    Height = 20
                }
            };

            var element7 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][6]),
                Y = gainValues[currentChannel - 1][6] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri7),
                    Width  = 20,
                    Height = 20
                }
            };

            var element8 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][7]),
                Y = gainValues[currentChannel - 1][7] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri8),
                    Width  = 20,
                    Height = 20
                }
            };

            var element9 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][8]),
                Y = gainValues[currentChannel - 1][8] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri9),
                    Width  = 20,
                    Height = 20
                }
            };

            var element10 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][9]),
                Y = gainValues[currentChannel - 1][9] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri10),
                    Width  = 20,
                    Height = 20
                }
            };

            var element11 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][10]),
                Y = gainValues[currentChannel - 1][10] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri11),
                    Width  = 20,
                    Height = 20
                }
            };

            var element12 = new VisualElement
            {
                X = Math.Log10(freqValues[currentChannel - 1][11]),
                Y = gainValues[currentChannel - 1][11] + 2,
                HorizontalAlignment = System.Windows.HorizontalAlignment.Center,
                VerticalAlignment   = System.Windows.VerticalAlignment.Bottom,
                UIElement           = new System.Windows.Controls.Image
                {
                    Source = new BitmapImage(uri12),
                    Width  = 20,
                    Height = 20
                }
            };

            cartesianChart1.VisualElements.Add(element1);
            cartesianChart1.VisualElements.Add(element2);
            cartesianChart1.VisualElements.Add(element3);
            cartesianChart1.VisualElements.Add(element4);
            cartesianChart1.VisualElements.Add(element5);
            cartesianChart1.VisualElements.Add(element6);
            cartesianChart1.VisualElements.Add(element7);
            cartesianChart1.VisualElements.Add(element8);
            cartesianChart1.VisualElements.Add(element9);
            cartesianChart1.VisualElements.Add(element10);
            cartesianChart1.VisualElements.Add(element11);
            cartesianChart1.VisualElements.Add(element12);
        }
コード例 #27
0
        public void ToPdf(string address)
        {
            //Create empty chart
            var myModel = new PlotModel()
            {
                Title               = this.title,
                Background          = OxyColor.FromArgb(255, 255, 255, 255),
                PlotAreaBorderColor = OxyColor.FromArgb(25, 0, 0, 0),
            };


            //Configure X Axis
            Axis xAxis = null;

            if (xLogarithmic)
            {
                xAxis = new LogarithmicAxis();
            }
            else
            {
                xAxis = new LinearAxis();
            }
            xAxis.Title              = this.xAxisTitle;
            xAxis.Position           = AxisPosition.Bottom;
            xAxis.IsAxisVisible      = true;
            xAxis.MajorGridlineStyle = LineStyle.Solid;
            xAxis.MajorGridlineColor = OxyColor.FromArgb(25, 0, 0, 0);
            if (xMin.HasValue)
            {
                xAxis.Minimum = xMin.Value;
            }
            if (xMax.HasValue)
            {
                xAxis.Maximum = xMax.Value;
            }
            myModel.Axes.Add(xAxis);

            //Configure Y Axis
            Axis yAxis = null;

            if (yLogarithmic)
            {
                yAxis = new LogarithmicAxis();
            }
            else
            {
                yAxis = new LinearAxis();
            }
            yAxis.Title              = this.yAxisTitle;
            yAxis.Position           = AxisPosition.Left;
            yAxis.IsAxisVisible      = true;
            yAxis.MajorGridlineStyle = LineStyle.Solid;
            yAxis.MajorGridlineColor = OxyColor.FromArgb(25, 0, 0, 0);
            if (yMin.HasValue)
            {
                yAxis.Minimum = yMin.Value;
            }
            if (yMax.HasValue)
            {
                yAxis.Maximum = yMax.Value;
            }
            myModel.Axes.Add(yAxis);

            //Hide legend if only 1 series
            if (chartSeriesData.Count < 2)
            {
                myModel.IsLegendVisible = false;
                myModel.Title           = "";
            }

            //Create series
            foreach (var seriesData in chartSeriesData)
            {
                //Add group
                var series = new ScatterSeries
                {
                    Title      = seriesData.Key,
                    MarkerType = MarkerType.Circle,
                    MarkerSize = 3
                };
                //Add data
                foreach (var datapoint in seriesData.Value)
                {
                    series.Points.Add(new ScatterPoint(datapoint.Item1, datapoint.Item2));
                }

                //Add to chart
                myModel.Series.Add(series);
            }

            //Save chart to file as PDF
            if (Path.GetExtension(address).ToLower() != ".pdf")
            {
                address = address + ".pdf";
            }
            using (var stream = File.Create(address))
            {
                var exporter = new PdfExporter {
                    Width = width, Height = height
                };
                exporter.Export(myModel, stream);
            }
        }
コード例 #28
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            var s1Model = new PlotModel();
            var s1FAxis = new LogarithmicAxis()
            {
                AbsoluteMinimum    = 10,
                AbsoluteMaximum    = 30000,
                Minimum            = 10,
                Maximum            = 30000,
                MajorGridlineStyle = LineStyle.Solid,
                Base         = 10,
                Position     = AxisPosition.Bottom,
                PowerPadding = false,
                Unit         = "Hz",
                Title        = "f"
            };
            var s1GainAxis = new LinearAxis()
            {
                Title              = "Gain",
                Unit               = "dB",
                AbsoluteMinimum    = -120,
                AbsoluteMaximum    = 20,
                Minimum            = -12,
                Maximum            = 12,
                MajorStep          = 6,
                MinorStep          = 3,
                MajorGridlineStyle = LineStyle.Solid,
                MinorGridlineStyle = LineStyle.Solid,
                TitleColor         = OxyColors.Green,
                Position           = AxisPosition.Right,
                Key = "Gain",
            };
            var s1SPLAxis = new LinearAxis()
            {
                Title              = "SPL",
                Unit               = "dB",
                AbsoluteMinimum    = 0,
                AbsoluteMaximum    = 150,
                Minimum            = 60,
                Maximum            = 120,
                MajorStep          = 10,
                MinorStep          = 5,
                MajorGridlineStyle = LineStyle.Dash,
                MinorGridlineStyle = LineStyle.Dot,
                TitleColor         = OxyColors.Red,
                Position           = AxisPosition.Left,
                Key = "SPL",
            };

            s1Model.Axes.Add(s1FAxis);
            s1Model.Axes.Add(s1SPLAxis);
            s1Model.Axes.Add(s1GainAxis);
            var s1GainSeries = new LogFunctionSeries(x => cfg.filters1.Sum(f => f.Response(x)) + cfg.gain1, 10, 30000, 1.05d)
            {
                YAxisKey = "Gain",
                Color    = OxyColors.Green
            };

            s1SPLSeries = new LinePlusLogFunctionSeries(cfg.response1, x => cfg.filters1.Sum(f => f.Response(x)) + cfg.gain1, 10, 30000, 1.05d)
            {
                YAxisKey = "SPL",
                Color    = OxyColors.Red
            };
            s1Model.Series.Add(s1GainSeries);
            s1Model.Series.Add(s1SPLSeries);
            s1PlotView.Model = s1Model;

            var s2Model = new PlotModel();
            var s2FAxis = new LogarithmicAxis()
            {
                AbsoluteMinimum    = 10,
                AbsoluteMaximum    = 30000,
                Minimum            = 10,
                Maximum            = 30000,
                MajorGridlineStyle = LineStyle.Solid,
                Base         = 10,
                Position     = AxisPosition.Bottom,
                PowerPadding = false,
                Unit         = "Hz",
                Title        = "f"
            };
            var s2GainAxis = new LinearAxis()
            {
                Title              = "Gain",
                Unit               = "dB",
                AbsoluteMinimum    = -120,
                AbsoluteMaximum    = 20,
                Minimum            = -12,
                Maximum            = 12,
                MajorStep          = 6,
                MinorStep          = 3,
                MajorGridlineStyle = LineStyle.Solid,
                MinorGridlineStyle = LineStyle.Solid,
                TitleColor         = OxyColors.Green,
                Position           = AxisPosition.Right,
                Key = "Gain",
            };
            var s2SPLAxis = new LinearAxis()
            {
                Title              = "SPL",
                Unit               = "dB",
                AbsoluteMinimum    = 0,
                AbsoluteMaximum    = 150,
                Minimum            = 60,
                Maximum            = 120,
                MajorStep          = 10,
                MinorStep          = 5,
                MajorGridlineStyle = LineStyle.Dash,
                MinorGridlineStyle = LineStyle.Dot,
                TitleColor         = OxyColors.Red,
                Position           = AxisPosition.Left,
                Key = "SPL",
            };

            s2Model.Axes.Add(s2FAxis);
            s2Model.Axes.Add(s2SPLAxis);
            s2Model.Axes.Add(s2GainAxis);
            var s2gainSeries = new LogFunctionSeries(x => cfg.filters2.Sum(f => f.Response(x)) + cfg.gain2, 10, 30000, 1.05d)
            {
                YAxisKey = "Gain",
                Color    = OxyColors.Green
            };

            s2SPLSeries = new LinePlusLogFunctionSeries(cfg.response2, x => cfg.filters2.Sum(f => f.Response(x)) + cfg.gain2, 10, 30000, 1.05d)
            {
                YAxisKey = "SPL",
                Color    = OxyColors.Red
            };
            s2Model.Series.Add(s2gainSeries);
            s2Model.Series.Add(s2SPLSeries);
            s2PlotView.Model = s2Model;

            var sumModel = new PlotModel();
            var sumFAxis = new LogarithmicAxis()
            {
                AbsoluteMinimum    = 10,
                AbsoluteMaximum    = 30000,
                Minimum            = 10,
                Maximum            = 30000,
                MajorGridlineStyle = LineStyle.Solid,
                Base         = 10,
                Position     = AxisPosition.Bottom,
                PowerPadding = false,
                Unit         = "Hz",
                Title        = "f"
            };
            var sumSPLAxis = new LinearAxis()
            {
                Title              = "Total SPL",
                Unit               = "dB",
                AbsoluteMinimum    = 0,
                AbsoluteMaximum    = 150,
                Minimum            = 60,
                Maximum            = 120,
                MajorStep          = 10,
                MinorStep          = 5,
                MajorGridlineStyle = LineStyle.Dash,
                MinorGridlineStyle = LineStyle.Dot,
                Position           = AxisPosition.Left,
            };

            sumModel.Axes.Add(sumFAxis);
            sumModel.Axes.Add(sumSPLAxis);
            sumSPLSeries = new DoubleFilteredResponseSeries(cfg.response1, cfg.response2, x => cfg.filters1.Sum(f => f.Response(x)) + cfg.gain1,
                                                            x => cfg.filters2.Sum(f => f.Response(x)) + cfg.gain2, 10, 30000, 1.05d)
            {
                Color = OxyColors.Red
            };
            sumModel.Series.Add(sumSPLSeries);
            sumPlotView.Model = sumModel;
        }
コード例 #29
0
        private void btnViewGraph_Click(object sender, EventArgs e)
        {
            if (data_g == null)
            {
                return;
            }
            PlotModel myModel = new PlotModel();

            myModel.Series.Add(new FunctionSeries());

            LineSeries linePoints = new LineSeries();
            LineSeries lineMin    = new LineSeries();
            LineSeries lineMax    = new LineSeries();
            LineSeries lineRed    = new LineSeries();
            LineSeries lineB1     = new LineSeries();
            LineSeries lineB2     = new LineSeries();
            LineSeries lineV1     = new LineSeries();

            DataPoint XYpoint = new DataPoint();

            linePoints.Color        = lineMin.Color = lineMax.Color = OxyColor.FromArgb(255, 0, 0, 0);
            lineMin.LineStyle       = LineStyle.Dot;
            lineMax.LineStyle       = LineStyle.Dot;
            lineMin.StrokeThickness = 1;
            lineMax.StrokeThickness = 1;
            lineRed.Color           = OxyColor.FromArgb(255, 255, 0, 0);
            lineRed.StrokeThickness = 1;
            lineB1.StrokeThickness  = 1;
            lineB2.StrokeThickness  = 1;
            lineB1.Color            = lineB2.Color = OxyColor.FromArgb(255, 0, 0, 255);
            lineB1.LineStyle        = LineStyle.Dot;
            lineB2.LineStyle        = LineStyle.Dot;
            lineV1.Color            = OxyColor.FromArgb(255, 0, 255, 0);
            lineV1.LineStyle        = LineStyle.Dot;
            lineV1.StrokeThickness  = 1;

            var listMax = new List <double>();

            foreach (var g in data_g)
            {
                listMax.Add(g.Max);

                XYpoint = new DataPoint(g.Frequency, g.Average);
                linePoints.Points.Add(XYpoint);
                XYpoint = new DataPoint(g.Frequency, g.Min);
                lineMin.Points.Add(XYpoint);
                XYpoint = new DataPoint(g.Frequency, g.Max);
                lineMax.Points.Add(XYpoint);
            }

            double vmax = listMax.Max() + 1;

            lineRed.Points.Add(new DataPoint(f0, vmax));
            lineRed.Points.Add(new DataPoint(f0, 0));

            lineB1.Points.Add(new DataPoint(f0a, vmax));
            lineB1.Points.Add(new DataPoint(f0a, 0));

            lineB2.Points.Add(new DataPoint(f0b, vmax));
            lineB2.Points.Add(new DataPoint(f0b, 0));

            lineV1.Points.Add(new DataPoint(f0 / 4, vmax));
            lineV1.Points.Add(new DataPoint(f0 / 4, 0));

            myModel.Series.Add(linePoints);
            myModel.Series.Add(lineMin);
            myModel.Series.Add(lineMax);
            myModel.Series.Add(lineRed);
            myModel.Series.Add(lineB1);
            myModel.Series.Add(lineB2);
            myModel.Series.Add(lineV1);

            LinearAxis      a = new LinearAxis();
            LogarithmicAxis b = new LogarithmicAxis();

            a.Title         = "Amplitude HV";
            a.Position      = AxisPosition.Left;
            a.FontSize      = 8;
            a.TitleFontSize = 9;

            b.Title         = "Frequency [Hz]";
            b.Position      = AxisPosition.Bottom;
            b.FontSize      = 8;
            b.TitleFontSize = 9;

            myModel.Axes.Add(a);
            myModel.Axes.Add(b);

            PlotForm graph = new PlotForm(myModel);

            graph.ShowDialog(this);
        }
コード例 #30
0
ファイル: Issues.cs プロジェクト: Celderon/oxyplot
        public static PlotModel MouseDownEvent()
        {
            var model = new PlotModel { Title = "LineSeries with smoothing", Subtitle = "Tracker uses wrong points" };
            var logarithmicAxis1 = new LogarithmicAxis { Position = AxisPosition.Bottom };
            model.Axes.Add(logarithmicAxis1);

            // Add a line series
            var s1 = new LineSeries
            {
                Color = OxyColors.SkyBlue,
                MarkerType = MarkerType.Circle,
                MarkerSize = 6,
                MarkerStroke = OxyColors.White,
                MarkerFill = OxyColors.SkyBlue,
                MarkerStrokeThickness = 1.5,
                Smooth = true
            };
            s1.Points.Add(new DataPoint(100, 100));
            s1.Points.Add(new DataPoint(400, 200));
            s1.Points.Add(new DataPoint(600, -300));
            s1.Points.Add(new DataPoint(1000, 400));
            s1.Points.Add(new DataPoint(1500, 500));
            s1.Points.Add(new DataPoint(2500, 600));
            s1.Points.Add(new DataPoint(3000, 700));
            model.Series.Add(s1);

            return model;
        }
コード例 #31
0
 /// <summary>
 /// Function that sets the y-axis of the plot to either 'linear' or 'logarithmic'.
 /// </summary>
 public void UpdateYAxisScale()
 {
     switch (SelectedYAxisScale)
     {
         case "linear":
             {
                 MeasurementsPlotModel.Axes.Remove(MeasurementsPlotModel.Axes.FirstOrDefault(x => x.Position == AxisPosition.Left));
                 var yAxis = new LinearAxis() { Position = AxisPosition.Left, TitleFontSize = 16, AxisTitleDistance = 18, Minimum = 0 };
                 MeasurementsPlotModel.Axes.Add(yAxis);
                 break;
             }
         case "logarithmic":
             {
                 MeasurementsPlotModel.Axes.Remove(MeasurementsPlotModel.Axes.FirstOrDefault(x => x.Position == AxisPosition.Left));
                 var yAxis = new LogarithmicAxis() { Position = AxisPosition.Left, TitleFontSize = 16, AxisTitleDistance = 18, Minimum = 1 };
                 MeasurementsPlotModel.Axes.Add(yAxis);
                 break;
             }
     }
 }
コード例 #32
0
ファイル: MainWindow.xaml.cs プロジェクト: TIPLPA/PLPA
        private void SetScale(int axis, bool log)
        {
            Axis axis1;

            if (log)
                axis1 = new LogarithmicAxis();
            else
                axis1 = new LinearAxis();

            if (axis == 1)
                axis1.Position = AxisPosition.Bottom;
            else
                axis1.Position = AxisPosition.Left;

            axis1.MinorStep = ((XMax - XMin) / 5) % 5; // 5 steps on axis
            if (axis1.MinorStep < 1)
                axis1.MinorStep = 1;
            axis1.MinorGridlineStyle = LineStyle.Dot;

            axis1.Minimum = (axis == 2 ? YMin : XMin);
            axis1.Maximum = (axis == 2 ? YMax : XMax);

            ThePlotModel.Axes[axis - 1] = axis1;

            ThePlotModel.InvalidatePlot(true);
        }
コード例 #33
0
        /// <summary>
        /// Specialized chart rendering NAV and drawdown logarithmically
        /// </summary>
        /// <param name="selectedChart">chart to render</param>
        /// <returns>OxyPlot model</returns>
        private PlotModel RenderNavAndDrawdown(string selectedChart)
        {
            //===== get plot data
            var chartData = PlotData[selectedChart];

            string xLabel = chartData
                            .First()      // first row is as good as any
                            .First().Key; // first column is x-axis

            object xValue = chartData
                            .First()        // first row is as good as any
                            .First().Value; // first column is x-axis

            //===== initialize plot model
            PlotModel plotModel = new PlotModel();

            plotModel.Title          = selectedChart;
            plotModel.LegendPosition = LegendPosition.LeftTop;
            plotModel.Axes.Clear();

            Axis xAxis = xValue.GetType() == typeof(DateTime)
                ? new DateTimeAxis()
                : new LinearAxis();

            xAxis.Title    = xLabel;
            xAxis.Position = AxisPosition.Bottom;
            xAxis.Key      = "x";

            var yAxis = new LogarithmicAxis();

            yAxis.Position      = AxisPosition.Right;
            yAxis.StartPosition = 0.25;
            yAxis.EndPosition   = 1.0;
            yAxis.Key           = "y";

            var ddAxis = new LinearAxis();

            ddAxis.Position      = AxisPosition.Right;
            ddAxis.StartPosition = 0.0;
            ddAxis.EndPosition   = 0.25;
            ddAxis.Key           = "dd";

            plotModel.Axes.Add(xAxis);
            plotModel.Axes.Add(yAxis);
            plotModel.Axes.Add(ddAxis);

            Dictionary <string, object> normalizeValues = chartData
                                                          .First();

            Dictionary <string, double> maxValues = new Dictionary <string, double>();

            //===== create series
            OxyColor navColor   = OxyColor.FromRgb(0x44, 0x72, 0xc4); // OxyColors.Blue
            OxyColor benchColor = OxyColor.FromRgb(0xeb, 0x7f, 0x34); // OxyColors.Orange
            Dictionary <string, LineSeries> allSeries = new Dictionary <string, LineSeries>();

            foreach (var row in chartData)
            {
                xValue = row[xLabel];

                foreach (var col in row)
                {
                    if (col.Key == xLabel)
                    {
                        continue;
                    }

                    if (col.Value.GetType() != typeof(double) ||
                        double.IsInfinity((double)col.Value) || double.IsNaN((double)col.Value))
                    {
                        continue;
                    }

                    string yLabel = col.Key;
                    double yValue = (double)col.Value / (double)normalizeValues[yLabel];

                    maxValues[yLabel] = maxValues.ContainsKey(yLabel)
                        ? Math.Max(maxValues[yLabel], yValue)
                        : yValue;

                    double dd = (yValue - maxValues[yLabel]) / maxValues[yLabel];

                    if (!allSeries.ContainsKey(yLabel))
                    {
                        var newSeries = yLabel == row.Skip(1).First().Key
                            ? new AreaSeries
                        {
                            Color      = navColor,
                            ConstantY2 = 1.0,
                        }
                            : new LineSeries
                        {
                            Color = benchColor,
                        };
                        newSeries.Title     = yLabel;
                        newSeries.IsVisible = true;
                        newSeries.XAxisKey  = "x";
                        newSeries.YAxisKey  = "y";
                        allSeries[yLabel]   = newSeries;

                        var ddSeries = yLabel == row.Skip(1).First().Key
                            ? new AreaSeries
                        {
                            Color = navColor,
                        }
                            : new LineSeries
                        {
                            Color = benchColor,
                        };
                        // ddSeries.Title = "DD(" + yLabel + ")";
                        ddSeries.IsVisible       = true;
                        ddSeries.XAxisKey        = "x";
                        ddSeries.YAxisKey        = "dd";
                        allSeries["dd" + yLabel] = ddSeries;
                    }

                    allSeries[yLabel].Points.Add(new DataPoint(
                                                     xValue.GetType() == typeof(DateTime) ? DateTimeAxis.ToDouble(xValue) : (double)xValue,
                                                     (double)yValue));

                    allSeries["dd" + yLabel].Points.Add(new DataPoint(
                                                            xValue.GetType() == typeof(DateTime) ? DateTimeAxis.ToDouble(xValue) : (double)xValue,
                                                            dd));
                }
            }

            //===== add series to plot model
            foreach (var series in allSeries)
            {
                plotModel.Series.Add(series.Value);
            }

            return(plotModel);
        }
コード例 #34
0
 public static PlotModel LogarithmicAxes()
 {
     var plotModel1 = new PlotModel();
     plotModel1.PlotMargins = new OxyThickness(80, 10, 20, 30);
     var logarithmicAxis1 = new LogarithmicAxis();
     logarithmicAxis1.Maximum = 1000000;
     logarithmicAxis1.Minimum = 1;
     logarithmicAxis1.Title = "Log axis";
     logarithmicAxis1.UseSuperExponentialFormat = true;
     plotModel1.Axes.Add(logarithmicAxis1);
     var logarithmicAxis2 = new LogarithmicAxis();
     logarithmicAxis2.Maximum = 10000;
     logarithmicAxis2.Minimum = 0.001;
     logarithmicAxis2.Position = AxisPosition.Bottom;
     logarithmicAxis2.Title = "Log axis";
     logarithmicAxis2.UseSuperExponentialFormat = true;
     plotModel1.Axes.Add(logarithmicAxis2);
     return plotModel1;
 }
コード例 #35
0
        public TraceDataPlotViewModel(
            IAppState appState,
            IAppService appService,
            IAppSettings appSettings,
            TraceDataPlotState traceDataPlotState
            )
        {
            _appState    = appState;
            _appSettings = appSettings;
            _simulation  = _appState.Target.AssertSome("No simulation");
            State        = traceDataPlotState;

            _depVarConfigViewModel = new DepVarConfigViewModel(
                _simulation.SimConfig.SimOutput,
                _appState.SimEvidence,
                appService,
                traceDataPlotState.DepVarConfigState
                );

            _isSeriesTypeLine             = traceDataPlotState.IsSeriesTypeLine;
            _isAxesOriginLockedToZeroZero = traceDataPlotState.IsAxesOriginLockedToZeroZero;

            _xAbsoluteMinimum = _isAxesOriginLockedToZeroZero ? 0.0 : double.MinValue;
            _xMinimum         = traceDataPlotState.XMinimum ?? (_isAxesOriginLockedToZeroZero ? 0.0 : double.NaN);
            _xMaximum         = traceDataPlotState.XMaximum ?? double.NaN;

            _yAbsoluteMinimum = _isAxesOriginLockedToZeroZero ? 0.0 : double.MinValue;
            _yMinimum         = traceDataPlotState.YMinimum ?? (_isAxesOriginLockedToZeroZero ? 0.0 : double.NaN);
            _yMaximum         = traceDataPlotState.YMaximum ?? double.NaN;

            ToggleSeriesType = ReactiveCommand.Create(HandleToggleSeriesType);

            ToggleLockAxesOriginToZeroZero = ReactiveCommand.Create(HandleToggleIsAxesOriginLockedToZeroZero);

            ResetAxisRanges = ReactiveCommand.Create(HandleResetAxisRanges);

            RemoveChart = ReactiveCommand.Create(HandleRemoveChart);

            _reactiveSafeInvoke = appService.GetReactiveSafeInvoke();

            _plotModel = new PlotModel
            {
                Background     = OxyColors.Transparent,
                LegendPosition = LegendPosition.BottomRight
            };

            _traceHorizontalAxis = new LinearAxis
            {
                Position       = AxisPosition.Bottom,
                MinimumPadding = 0,
                MaximumPadding = 0.06,
            };
            _traceHorizontalAxis.AxisChanged += (s, e) => { if (_reactiveSafeInvoke.React)
                                                            {
                                                                HandleAxisChanged();
                                                            }
            };
            _plotModel.Axes.Add(_traceHorizontalAxis);

            _traceVerticalAxis = new LinearAxis
            {
                Position       = AxisPosition.Left,
                MinimumPadding = 0,
                MaximumPadding = 0.06,
                Key            = nameof(_traceVerticalAxis),
            };
            _traceVerticalAxis.AxisChanged += (s, e) => { if (_reactiveSafeInvoke.React)
                                                          {
                                                              HandleAxisChanged();
                                                          }
            };
            _traceInsetAxis = new LinearAxis
            {
                Position       = AxisPosition.Right,
                MinimumPadding = 0,
                MaximumPadding = 0,
                TickStyle      = TickStyle.Inside,
                LabelFormatter = x => null,
                StartPosition  = 0.4,
                EndPosition    = 0.6,
                Key            = nameof(_traceInsetAxis),
            };

            _traceLogVerticalAxis = new LogarithmicAxis
            {
                Position       = AxisPosition.Left,
                MinimumPadding = 0,
                MaximumPadding = 0.06,
                Key            = nameof(_traceLogVerticalAxis)
            };
            _traceLogVerticalAxis.AxisChanged += (s, e) => { if (_reactiveSafeInvoke.React)
                                                             {
                                                                 HandleAxisChanged();
                                                             }
            };
            _traceLogInsetAxis = new LogarithmicAxis
            {
                Position       = AxisPosition.Right,
                MinimumPadding = 0,
                MaximumPadding = 0.06,
                TickStyle      = TickStyle.Inside,
                LabelFormatter = x => null,
                StartPosition  = 0.4,
                EndPosition    = 0.6,
                Key            = nameof(_traceLogInsetAxis)
            };

            ApplyTheme();

            _subscriptions = new CompositeDisposable(

                _appSettings
                .GetWhenPropertyChanged()
                .Subscribe(
                    _reactiveSafeInvoke.SuspendAndInvoke <string?>(ObserveAppSettingsPropertyChange)
                    ),

                traceDataPlotState
                .ObservableForProperty(x => x.IsVisible)
                .Subscribe(
                    _reactiveSafeInvoke.SuspendAndInvoke <object>(ObserveTraceDataPlotStateIsVisible)
                    ),

                traceDataPlotState.DepVarConfigState
                .GetWhenPropertyChanged()
                .Subscribe(
                    ObserveDepVarConfigStatePropertyChanged
                    ),

                this
                .ObservableForProperty(vm => vm.DataSet)
                .Subscribe(
                    _reactiveSafeInvoke.SuspendAndInvoke <object>(ObserveDataSet)
                    )

                );
        }
コード例 #36
0
        /// <summary>
        /// Specialized chart rendering NAV and drawdown logarithmically
        /// </summary>
        /// <param name="selectedChart">chart to render</param>
        /// <returns>OxyPlot model</returns>
        private PlotModel RenderNavAndDrawdown()
        {
            //===== initialize plot model
            PlotModel plotModel = new PlotModel();

            plotModel.Title          = PlotData.Keys.First();
            plotModel.LegendPosition = LegendPosition.LeftTop;
            plotModel.Axes.Clear();

            Axis xAxis = new DateTimeAxis();

            xAxis.Title    = "Date";
            xAxis.Position = AxisPosition.Bottom;
            xAxis.Key      = "x";

            var yAxis = new LogarithmicAxis();

            yAxis.Title         = "Relative Equity";
            yAxis.Position      = AxisPosition.Right;
            yAxis.StartPosition = 0.35;
            yAxis.EndPosition   = 1.0;
            yAxis.Key           = "y";

            var ddAxis = new LinearAxis();

            ddAxis.Title         = "Drawdown [%]";
            ddAxis.Position      = AxisPosition.Right;
            ddAxis.StartPosition = 0.0;
            ddAxis.EndPosition   = 0.30;
            ddAxis.Key           = "dd";

            plotModel.Axes.Add(xAxis);
            plotModel.Axes.Add(yAxis);
            plotModel.Axes.Add(ddAxis);

            //===== create series
            for (int i = 0; i < NUM_Y_LABELS; i++)
            {
                string yLabel = ALL_Y_LABELS[i];
                var    series = GET_SERIES(yLabel);
                var    color  = SeriesColors[i];

                var eqSeries = (yLabel == FIRST_Y_LABEL && NUM_Y_LABELS <= 2)
                    ? new AreaSeries
                {
                    Title      = yLabel,
                    IsVisible  = true,
                    XAxisKey   = "x",
                    YAxisKey   = "y",
                    Color      = color,
                    Fill       = color,
                    ConstantY2 = 1.0,
                }
                    : new LineSeries
                {
                    Title     = yLabel,
                    IsVisible = true,
                    XAxisKey  = "x",
                    YAxisKey  = "y",
                    Color     = color,
                };

                plotModel.Series.Add(eqSeries);

                var ddSeries = (yLabel == FIRST_Y_LABEL && NUM_Y_LABELS <= 2)
                    ? new AreaSeries
                {
                    IsVisible = true,
                    XAxisKey  = "x",
                    YAxisKey  = "dd",
                    Color     = color,
                    Fill      = color,
                }
                    : new LineSeries
                {
                    IsVisible = true,
                    XAxisKey  = "x",
                    YAxisKey  = "dd",
                    Color     = color,
                };

                plotModel.Series.Add(ddSeries);

                double max = 0.0;
                double y0  = START_VALUE(yLabel);

                foreach (var point in series)
                {
                    var x = point.Key;
                    var y = point.Value;
                    max = Math.Max(max, y);
                    double dd = (y - max) / max;

                    eqSeries.Points.Add(new DataPoint(
                                            DateTimeAxis.ToDouble(x),
                                            (double)y / y0));

                    ddSeries.Points.Add(new DataPoint(
                                            DateTimeAxis.ToDouble(x),
                                            100.0 * dd));
                }
            }

            return(plotModel);
        }
コード例 #37
0
ファイル: Issues.cs プロジェクト: Celderon/oxyplot
 public static PlotModel ValueTime()
 {
     var plotModel1 = new PlotModel
     {
         LegendBackground = OxyColor.FromArgb(200, 255, 255, 255),
         LegendBorder = OxyColors.Black,
         LegendPlacement = LegendPlacement.Outside,
         PlotAreaBackground = OxyColors.Gray,
         PlotAreaBorderColor = OxyColors.Gainsboro,
         PlotAreaBorderThickness = new OxyThickness(2),
         Title = "Value / Time"
     };
     var linearAxis1 = new LinearAxis
     {
         AbsoluteMaximum = 45,
         AbsoluteMinimum = 0,
         Key = "X-Axis",
         Maximum = 46,
         Minimum = -1,
         Position = AxisPosition.Bottom,
         Title = "Years",
         Unit = "yr"
     };
     plotModel1.Axes.Add(linearAxis1);
     var logarithmicAxis1 = new LogarithmicAxis { Key = "Y-Axis", Title = "Value for section" };
     plotModel1.Axes.Add(logarithmicAxis1);
     var lineSeries1 = new LineSeries
     {
         Color = OxyColors.Red,
         LineStyle = LineStyle.Solid,
         MarkerFill = OxyColors.Black,
         MarkerSize = 2,
         MarkerStroke = OxyColors.Black,
         MarkerType = MarkerType.Circle,
         DataFieldX = "X",
         DataFieldY = "Y",
         XAxisKey = "X-Axis",
         YAxisKey = "Y-Axis",
         Background = OxyColors.White,
         Title = "Section Value",
         TrackerKey = "ValueVersusTimeTracker"
     };
     lineSeries1.Points.Add(new DataPoint(0, 0));
     lineSeries1.Points.Add(new DataPoint(5, 0));
     lineSeries1.Points.Add(new DataPoint(10, 0));
     lineSeries1.Points.Add(new DataPoint(15, 0));
     lineSeries1.Points.Add(new DataPoint(20, 1));
     lineSeries1.Points.Add(new DataPoint(25, 1));
     lineSeries1.Points.Add(new DataPoint(30, 1));
     lineSeries1.Points.Add(new DataPoint(35, 1));
     lineSeries1.Points.Add(new DataPoint(40, 1));
     lineSeries1.Points.Add(new DataPoint(45, 1));
     plotModel1.Series.Add(lineSeries1);
     return plotModel1;
 }
コード例 #38
0
        public void RefreshCSV(string csv_file_path
                               , string currency, double euphoriaMin, double largeContangoMin
                               , double contangoMin, double smallContangoMin, double backwardationMin
                               )
        {
            DataTable csvData = new DataTable();

            try
            {
                using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
                {
                    csvReader.SetDelimiters(new string[] { "," });
                    csvReader.HasFieldsEnclosedInQuotes = true;
                    string[] colFields;
                    bool     tableCreated = false;
                    while (tableCreated == false)
                    {
                        colFields = csvReader.ReadFields();
                        foreach (string column in colFields)
                        {
                            DataColumn datecolumn = new DataColumn(column);
                            datecolumn.AllowDBNull = true;
                            csvData.Columns.Add(datecolumn);
                        }
                        tableCreated = true;
                    }
                    while (!csvReader.EndOfData)
                    {
                        csvData.Rows.Add(csvReader.ReadFields());
                    }
                }

                var futuresCurve = new PlotModel();
                var futures      = new List <Future>();

                foreach (DataRow row in csvData.Rows)
                {
                    // timestamp,symbol,price,expire_unixtimestamp,spot
                    Future f = new Future(row[1].ToString());
                    f.LastUpdateDateTime = DateTime.Parse(row[0].ToString());
                    f.LastMarketPrice    = _market.UsdToSats(double.Parse(row[2].ToString()));

                    if (f.InstrumentName != "XBTUSD")
                    {
                        DateTime d             = DateTime.Parse(row[3].ToString());
                        DateTime nd            = new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc);
                        var      diffInSeconds = (d - nd).TotalSeconds;
                        f.ExpirationTimestamp = long.Parse(diffInSeconds.ToString());
                        f.UnderlyingPrice     = _market.UsdToSats(double.Parse(row[4].ToString()));
                    }
                    futures.Add(f);
                }

                IOrderedEnumerable <Future> futuresOrdered;
                futuresOrdered = futures.OrderBy(a => a.LastUpdateDateTime);
                futures        = new List <Future>(futuresOrdered);


                // Create two line series (markers are hidden by default)
                var spot = new LineSeries {
                    MarkerType = MarkerType.Circle, MarkerSize = 1, MarkerFill = OxyColors.Yellow
                };

                // Scatter with color code
                var largeBackwardation = new ScatterSeries()
                {
                    MarkerType = MarkerType.Circle, MarkerFill = OxyColors.Red, MarkerSize = 3
                };
                var backwardation = new ScatterSeries()
                {
                    MarkerType = MarkerType.Square, MarkerFill = OxyColors.Orange, MarkerSize = 2
                };
                var smallContango = new ScatterSeries()
                {
                    MarkerType = MarkerType.Circle, MarkerFill = OxyColors.Yellow, MarkerSize = 2
                };
                var contango = new ScatterSeries()
                {
                    MarkerType = MarkerType.Circle, MarkerFill = OxyColors.Green, MarkerSize = 2
                };
                var largeContango = new ScatterSeries()
                {
                    MarkerType = MarkerType.Square, MarkerFill = OxyColors.Blue, MarkerSize = 2
                };
                var euphoria = new ScatterSeries()
                {
                    MarkerType = MarkerType.Triangle, MarkerFill = OxyColors.Purple, MarkerSize = 3
                };

                currency = "USD";

                foreach (var i in futures)
                {
                    if (i.InstrumentName == "XBTUSD")
                    {
                        spot.Points.Add(new DataPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                    }
                    else
                    {
                        if (i.AnnualizedForwardPremiumInCurrency(currency) > euphoriaMin)
                        {
                            euphoria.Points.Add(new ScatterPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                        }

                        if (i.AnnualizedForwardPremiumInCurrency(currency) <= euphoriaMin && i.AnnualizedForwardPremiumInCurrency(currency) > largeContangoMin)
                        {
                            largeContango.Points.Add(new ScatterPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                        }

                        if (i.AnnualizedForwardPremiumInCurrency(currency) <= largeContangoMin && i.AnnualizedForwardPremiumInCurrency(currency) > contangoMin)
                        {
                            //contango.Points.Add(new ScatterPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                        }

                        if (i.AnnualizedForwardPremiumInCurrency(currency) <= contangoMin && i.AnnualizedForwardPremiumInCurrency(currency) > smallContangoMin)
                        {
                            //smallContango.Points.Add(new ScatterPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                        }

                        if (i.AnnualizedForwardPremiumInCurrency(currency) <= smallContangoMin && i.AnnualizedForwardPremiumInCurrency(currency) > backwardationMin)
                        {
                            backwardation.Points.Add(new ScatterPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                        }

                        if (i.AnnualizedForwardPremiumInCurrency(currency) <= backwardationMin)
                        {
                            largeBackwardation.Points.Add(new ScatterPoint(DateTimeAxis.ToDouble(i.LastUpdateDateTime), i.LastMarketPriceInCurrency(currency)));
                        }
                    }
                }

                var startDate = DateTime.Now.AddDays(-2000);
                var endDate   = DateTime.Now.AddDays(370); // 1Y
                var minValue  = DateTimeAxis.ToDouble(startDate);
                var maxValue  = DateTimeAxis.ToDouble(endDate);
                var xaxis1    = new DateTimeAxis()
                {
                    Title = "Time", Position = AxisPosition.Bottom, Minimum = minValue, Maximum = maxValue, StringFormat = "yyyy/MM/dd"
                };
                var yaxis1 = new LogarithmicAxis()
                {
                    Title = "Market Price"
                };
                futuresCurve.Axes.Add(yaxis1);
                futuresCurve.Axes.Add(xaxis1);

                // Add the series to the plot model
                futuresCurve.Series.Add(spot);
                futuresCurve.Series.Add(largeBackwardation);
                futuresCurve.Series.Add(backwardation);
                futuresCurve.Series.Add(smallContango);
                futuresCurve.Series.Add(contango);
                futuresCurve.Series.Add(largeContango);
                futuresCurve.Series.Add(euphoria);
                HistoricalDataCurve = futuresCurve;
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }