public static PlotModel Create(ModelType type)
        {
            PlotModel model = null;

            switch (type)
            {
            case ModelType.SineWave:
                model = CreateSineModel(0.002);
                break;

            case ModelType.SmoothInterpolation:
                model       = CreateSineModel(1);
                model.Title = "Smooth interpolation";
                // Add markers to this plot
                var ls = model.Series[0] as LineSeries;
                if (ls == null)
                {
                    return(null);
                }
                ls.MarkerType            = MarkerType.Circle;
                ls.Color                 = OxyColor.FromArgb(0xFF, 154, 6, 78);
                ls.MarkerStroke          = ls.Color;
                ls.MarkerFill            = OxyColor.FromAColor(0x70, ls.Color);
                ls.MarkerStrokeThickness = 2;
                ls.MarkerSize            = 4;

                var ls2 = CreateLineSeries(Math.Sin,
                                           0, 10, 1, "interpolated curve");
                ls2.Smooth = true;
                model.Series.Add(ls2);
                break;

            case ModelType.NormalDistribution:
                model = CreateNormalDistributionModel();
                break;

            case ModelType.SquareWave:
                model = CreateSquareWave();
                break;

            case ModelType.LogLog:
                model = CreateLogLogPlot();
                break;

            case ModelType.LogLin:
                model = CreateLogLinPlot();
                break;

            case ModelType.LinLog:
                model = CreateLinLogPlot();
                break;

            case ModelType.Clover:
                // http://people.reed.edu/~jerry/Clover/cloverexcerpt.pdf
                // http://www-math.bgsu.edu/z/calc3/vectorvalued1.html
                model = CreateParametricPlot(
                    t => 2 * Math.Cos(2 * t) * Math.Cos(t),
                    t => 2 * Math.Cos(2 * t) * Math.Sin(t),
                    // t=>-4*Math.Sin(2*t)*Math.Cos(t)-2*Math.Cos(2*t)*Math.Sin(t),
                    // t=>-4*Math.Sin(2*t)*Math.Sin(t)+2*Math.Cos(2*t)*Math.Cos(t),))))
                    0, Math.PI * 2, 0.01,
                    "Parametric function",
                    "Using the CartesianAxes property",
                    "2cos(2t)cos(t) , 2cos(2t)sin(t)");
                break;

            case ModelType.KochSnowflake:
                model = CreateKochSnowflake(8);
                break;

            case ModelType.KochSnowflake2:
                model = CreateKochSnowflake(8, true);
                break;

            case ModelType.KochCurve:
                model = CreateKochCurve(4);
                break;

            case ModelType.ZigZag:
                model = CreateZigZagCurve(2000);
                break;

            case ModelType.MathNotation:
                model = CreateMathNotationPlot();
                break;

            case ModelType.StraightLine:
                model = CreateParametricPlot(
                    t => t,
                    t => 1 + t * 1e-8, 0, 10, 0.1,
                    "Straight line", null, null);
                model.PlotType = PlotType.XY;
                break;
            }

            return(model);
        }
Beispiel #2
0
        /// <summary>
        ///     Creates a plot for the given peaks list
        /// </summary>
        /// <param name="peaksX"></param>
        /// <param name="peaksY"></param>
        /// <param name="tolerance"></param>
        /// <returns></returns>
        private static PlotModel CreatePlot(IReadOnlyList <XYData> peaksX,
                                            IReadOnlyList <XYData> peaksY,
                                            double tolerance)
        {
            var plotModel1 = new PlotModel
            {
                LegendBorderThickness = 0,
                LegendOrientation     = LegendOrientation.Horizontal,
                LegendPlacement       = LegendPlacement.Outside,
                LegendPosition        = LegendPosition.BottomCenter,
                Title = "MS/MS Spectra"
            };

            var categoryAxis1 = new LinearAxis {
                MinorStep = tolerance
            };

            plotModel1.Axes.Add(categoryAxis1);

            var linearAxis1 = new LinearAxis {
                MaximumPadding = 0.06, MinimumPadding = 0.06
            };

            plotModel1.Axes.Add(linearAxis1);

            var xseries = new StemSeries();

            for (var j = 0; j < peaksY.Count; j++)
            {
                var peakX = peaksX[j];
                var peakY = peaksY[j];

                double value = 0;
                if (peakX.Y > 0 && peakY.Y > 0)
                {
                    value = 1;
                }

                xseries.Points.Add(new DataPoint(peakX.X, value));
            }
            xseries.Color = OxyColor.FromAColor(100, OxyColors.Green);

            //plotModel1.Series.Add(xseries);

            var series = new StemSeries {
                Title = "Spectra X"
            };
            var max = peaksX.Select(datum => datum.Y).Concat(new double[] { 0 }).Max();

            foreach (var datum in peaksX)
            {
                series.Points.Add(new DataPoint(datum.X, datum.Y / max));
            }
            plotModel1.Series.Add(series);

            max = peaksY.Select(datum => datum.Y).Concat(new[] { max }).Max();
            var series2 = new StemSeries {
                Title = "Spectra Y"
            };

            foreach (var datum in peaksY)
            {
                series2.Points.Add(new DataPoint(datum.X, (datum.Y * -1) / max));
            }
            plotModel1.Series.Add(series2);


            return(plotModel1);
        }
        private void MakeGraphic()
        {
            var defenceDiagramSettingsVm = new DefenceDiagramSettingsVm(variableParametersValue);

            if (defenceDiagramSettingsVm.HzCrossHkDown == 1 || defenceDiagramSettingsVm.HzCrossHkUp == 1)
            {
                MessageBox.Show("Защитная диаграмма пересекается с критической!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
            else
            {
                var plotDefenceDiagram = new OxyPlot.WindowsForms.Plot {
                    Model = new PlotModel(), Dock = DockStyle.Fill
                };
                this.tabControl1.TabPages[3].Controls.Clear();
                this.tabControl1.TabPages[3].Controls.Add(plotDefenceDiagram);
                //Legend
                plotDefenceDiagram.Model.PlotType = PlotType.XY;
                //plotDefenceDiagram.Model.LegendTitle = "Legend";
                plotDefenceDiagram.Model.LegendOrientation = LegendOrientation.Horizontal;
                plotDefenceDiagram.Model.LegendPlacement   = LegendPlacement.Outside;
                plotDefenceDiagram.Model.LegendPosition    = LegendPosition.TopRight;
                plotDefenceDiagram.Model.LegendBackground  = OxyColor.FromAColor(200, OxyColors.White);
                plotDefenceDiagram.Model.LegendBorder      = OxyColors.Gray;
                //Axis
                var xAxis = new LinearAxis(AxisPosition.Bottom, 0)
                {
                    MajorGridlineStyle = LineStyle.Solid,
                    MinorGridlineStyle = LineStyle.Dot,
                    Title   = "Путь (м)",
                    Minimum = -_mineConfig.MainViewConfig.Border.Value,
                    Maximum = -_mineConfig.MainViewConfig.BorderZero.Value
                };
                plotDefenceDiagram.Model.Axes.Add(xAxis);
                var yAxis = new LinearAxis(AxisPosition.Left, 0)
                {
                    MajorGridlineStyle = LineStyle.Solid,
                    MinorGridlineStyle = LineStyle.Dot,
                    Title   = "Скорость (м/с)",
                    Minimum = 0,
                    Maximum = 1.2 * Convert.ToDouble(variableParametersValue[0], CultureInfo.GetCultureInfo("en-US"))
                };
                plotDefenceDiagram.Model.Axes.Add(yAxis);
                // Create Line series
                var s1 = new LineSeries {
                    Title = "Груз", StrokeThickness = 1, Color = OxyColors.Blue
                };
                var s2 = new LineSeries {
                    Title = "Люди", StrokeThickness = 1, Color = OxyColors.Green
                };
                var s3 = new LineSeries {
                    Title = "Оборудование", StrokeThickness = 1, Color = OxyColors.Red
                };
                var s4 = new LineSeries {
                    Title = "Ревизия", StrokeThickness = 1, Color = OxyColors.Orange
                };
                for (int i = 0; i < defenceDiagramSettingsVm.DiagramVeight.Count(); i++)
                {
                    s1.Points.Add(new DataPoint(-defenceDiagramSettingsVm.DiagramVeight[i].X,
                                                defenceDiagramSettingsVm.DiagramVeight[i].Y));
                    s2.Points.Add(new DataPoint(-defenceDiagramSettingsVm.DiagramPeople[i].X,
                                                defenceDiagramSettingsVm.DiagramPeople[i].Y));
                    s3.Points.Add(new DataPoint(-defenceDiagramSettingsVm.DiagramEquipment[i].X,
                                                defenceDiagramSettingsVm.DiagramEquipment[i].Y));
                }
                for (int i = 0; i < defenceDiagramSettingsVm.DiagramRevision.Count(); i++)
                {
                    s4.Points.Add(new DataPoint(-defenceDiagramSettingsVm.DiagramRevision[i].X,
                                                defenceDiagramSettingsVm.DiagramRevision[i].Y));
                }
                // add Series and Axis to plot model
                plotDefenceDiagram.Model.Series.Add(s1);
                plotDefenceDiagram.Model.Series.Add(s2);
                plotDefenceDiagram.Model.Series.Add(s3);
                plotDefenceDiagram.Model.Series.Add(s4);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Renders the annotation on the specified context.
        /// </summary>
        /// <param name="rc">The render context.</param>
        public override void Render(IRenderContext rc)
        {
            base.Render(rc);

            var lon0 = this.XAxis.ActualMinimum;
            var lon1 = this.XAxis.ActualMaximum;
            var lat0 = this.YAxis.ActualMinimum;
            var lat1 = this.YAxis.ActualMaximum;

            // the desired number of tiles horizontally
            double tilesx = this.PlotModel.Width / this.TileSize;

            // calculate the desired zoom level
            var n    = tilesx / (((lon1 + 180) / 360) - ((lon0 + 180) / 360));
            var zoom = (int)Math.Round(Math.Log(n) / Math.Log(2));

            if (zoom < this.MinZoomLevel)
            {
                zoom = this.MinZoomLevel;
            }

            if (zoom > this.MaxZoomLevel)
            {
                zoom = this.MaxZoomLevel;
            }

            // find tile coordinates for the corners
            double x0, y0;

            LatLonToTile(lat0, lon0, zoom, out x0, out y0);
            double x1, y1;

            LatLonToTile(lat1, lon1, zoom, out x1, out y1);

            double xmax = Math.Max(x0, x1);
            double xmin = Math.Min(x0, x1);
            double ymax = Math.Max(y0, y1);
            double ymin = Math.Min(y0, y1);

            var clippingRectangle = this.GetClippingRect();

            // Add the tiles
            for (var x = (int)xmin; x < xmax; x++)
            {
                for (var y = (int)ymin; y < ymax; y++)
                {
                    string uri = this.GetTileUri(x, y, zoom);
                    var    img = this.GetImage(uri, rc.RendersToScreen);

                    if (img == null)
                    {
                        continue;
                    }

                    // transform from tile coordinates to lat/lon
                    double latitude0, latitude1, longitude0, longitude1;
                    TileToLatLon(x, y, zoom, out latitude0, out longitude0);
                    TileToLatLon(x + 1, y + 1, zoom, out latitude1, out longitude1);

                    // transform from lat/lon to screen coordinates
                    var s00 = this.Transform(longitude0, latitude0);
                    var s11 = this.Transform(longitude1, latitude1);

                    var r = OxyRect.Create(s00.X, s00.Y, s11.X, s11.Y);

                    // draw the image
                    rc.DrawClippedImage(clippingRectangle, img, r.Left, r.Top, r.Width, r.Height, this.Opacity, true);
                }
            }

            // draw the copyright notice
            var p        = new ScreenPoint(clippingRectangle.Right - 5, clippingRectangle.Bottom - 5);
            var textSize = rc.MeasureText(this.CopyrightNotice, this.ActualFont, this.ActualFontSize, this.ActualFontWeight);

            rc.DrawRectangle(
                new OxyRect(p.X - textSize.Width - 2, p.Y - textSize.Height - 2, textSize.Width + 4, textSize.Height + 4),
                OxyColor.FromAColor(200, OxyColors.White),
                OxyColors.Undefined,
                0,
                this.EdgeRenderingMode);

            rc.DrawText(
                p,
                this.CopyrightNotice,
                OxyColors.Black,
                this.ActualFont,
                this.ActualFontSize,
                this.ActualFontWeight,
                0,
                HorizontalAlignment.Right,
                VerticalAlignment.Bottom);
        }
        /// <summary>
        /// Настройка модели. Тут происходит настройка координатных осей.
        /// </summary>
        /// <param name="domain">Вид канонической области</param>
        void SetUpModel(CanonicalDomain domain)
        {
            PlotModel.LegendTitle       = null;
            PlotModel.LegendOrientation = LegendOrientation.Horizontal;
            PlotModel.LegendPlacement   = LegendPlacement.Outside;
            PlotModel.LegendPosition    = LegendPosition.TopRight;
            PlotModel.LegendBackground  = OxyColor.FromAColor(200, OxyColors.White);
            PlotModel.LegendBorder      = OxyColors.Black;
            LinearAxis XAxis, YAxis;

            switch (domain)
            {
            case CanonicalDomain.HalfPlane:
                XAxis = new LinearAxis(AxisPosition.Bottom, -5, 5, "X")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "X", AbsoluteMaximum = 5, AbsoluteMinimum = -5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(XAxis);
                YAxis = new LinearAxis(AxisPosition.Left, -0.5, 5, "Y")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "Y", AbsoluteMaximum = 5, AbsoluteMinimum = -0.5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(YAxis);
                break;

            case CanonicalDomain.Zone:
                XAxis = new LinearAxis(AxisPosition.Bottom, -5, 5, "X")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "X", AbsoluteMaximum = 5, AbsoluteMinimum = -5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(XAxis);
                YAxis = new LinearAxis(AxisPosition.Left, -5, 5, "Y")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "Y", AbsoluteMaximum = 5, AbsoluteMinimum = -5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(YAxis);
                break;

            case CanonicalDomain.Circular:
#if !HELP_FOR_GROUP_LEADER
                XAxis = new LinearAxis(AxisPosition.Bottom, -5, 5, "X")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "X", AbsoluteMaximum = 5, AbsoluteMinimum = -5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(XAxis);
                YAxis = new LinearAxis(AxisPosition.Left, -5, 5, "Y")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "Y", AbsoluteMaximum = 5, AbsoluteMinimum = -5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(YAxis);
                break;
#else
                XAxis = new LinearAxis(AxisPosition.Bottom, -3, 5, "X")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "X", AbsoluteMaximum = 5, AbsoluteMinimum = -5, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(XAxis);
                YAxis = new LinearAxis(AxisPosition.Left, -0.1, 1, "Y")
                {
                    MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, Title = "Y", AbsoluteMaximum = 1, AbsoluteMinimum = -0.1, Font = "Times New Roman", FontSize = 15
                };
                PlotModel.Axes.Add(YAxis);
                break;
#endif
            }
        }
Beispiel #6
0
        private void UpdatePlot()
        {
            var pm = new PlotModel {
                Title = this.year.ToString(), Subtitle = "data from gapminder.org", LegendPosition = LegendPosition.RightBottom
            };
            var ss = new ScatterSeries
            {
                MarkerType            = MarkerType.Circle,
                MarkerFill            = OxyColors.Transparent,
                MarkerStroke          = OxyColors.Blue,
                MarkerStrokeThickness = 1,
                TrackerFormatString   = "{Tag}\n{1}:{2:0.0}\n{3}:{4:0.0}"
            };

            var piX     = typeof(Statistics).GetProperty("GdpPerCapitaPpp");
            var piY     = typeof(Statistics).GetProperty("LifeExpectancyAtBirth");
            var piSize  = typeof(Statistics).GetProperty("Population");
            var piColor = typeof(Statistics).GetProperty("GeographicRegion");

            foreach (var kvp in Countries)
            {
                var country = kvp.Value;
                var x       = country.FindValue(year, piX);
                var y       = country.FindValue(year, piY);
                var size    = country.FindValue(year, piSize);

                if (double.IsNaN(x) || double.IsNaN(y))
                {
                    continue;
                }
                ss.Points.Add(new ScatterPoint(x, y, double.NaN, double.NaN, country.Name));

                //double radius = 4;
                //if (!double.IsNaN(size))
                //    radius = Math.Sqrt(size)*0.1;
                //if (radius < 4) radius = 4;
                //if (radius > 40) radius = 40;
                //ss.MarkerSizes.Add(radius);
                //   Debug.WriteLine(countryName+": "+stats.Population);
            }
            pm.Series.Add(ss);
            if (SelectedCountry != null)
            {
                var ls = new LineSeries {
                    Title = SelectedCountry.Name, LineJoin = LineJoin.Bevel
                };

                foreach (var p in SelectedCountry.Statistics)
                {
                    if (double.IsNaN(p.GdpPerCapitaPpp) || double.IsNaN(p.LifeExpectancyAtBirth))
                    {
                        continue;
                    }
                    ls.Points.Add(new DataPoint(p.GdpPerCapitaPpp, p.LifeExpectancyAtBirth));
                }

                pm.Series.Add(ls);
                var    ss2 = new ScatterSeries();
                double x   = SelectedCountry.FindValue(year, piX);
                double y   = SelectedCountry.FindValue(year, piY);
                ss2.Points.Add(new ScatterPoint(x, y, 10));
                ss2.MarkerFill = OxyColor.FromAColor(120, OxyColors.Red);
                ss2.MarkerType = MarkerType.Circle;
                pm.Series.Add(ss2);
            }

            pm.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left, Minimum = 19, Maximum = 87, Title = "Life expectancy (years)"
            });
            pm.Axes.Add(new LogarithmicAxis {
                Position = AxisPosition.Bottom, Title = "Income per person (GDP/capita, PPP$ inflation-adjusted)", Minimum = 200, Maximum = 90000
            });
            PlotModel = pm;
        }
Beispiel #7
0
        public static PlotModel RectangleAnnotationVerticals()
        {
            var model = new PlotModel {
                Title = "RectangleAnnotation - vertical bands"
            };

            model.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom, Minimum = 0, Maximum = 10
            });
            model.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left, Minimum = 87, Maximum = 97, MajorStep = 1, MinorStep = 1
            });
            model.Annotations.Add(new RectangleAnnotation {
                MinimumX = 2.5, MaximumX = 2.8, TextRotation = 90, Text = "Red", Fill = OxyColor.FromAColor(99, OxyColors.Red)
            });
            model.Annotations.Add(new RectangleAnnotation {
                MinimumX = 2.8, MaximumX = 6.1, TextRotation = 90, Text = "Orange", Fill = OxyColor.FromAColor(99, OxyColors.Orange)
            });
            model.Annotations.Add(new RectangleAnnotation {
                MinimumX = 6.1, MaximumX = 7.6, TextRotation = 90, Text = "Yellow", Fill = OxyColor.FromAColor(99, OxyColors.Yellow)
            });
            model.Annotations.Add(new RectangleAnnotation {
                MinimumX = 7.6, MaximumX = 9.7, TextRotation = 270, Text = "Green", Fill = OxyColor.FromAColor(99, OxyColors.Green)
            });
            LineSeries series1;

            model.Series.Add(series1 = new LineSeries {
                Color = OxyColors.Black, StrokeThickness = 6.0, LineJoin = LineJoin.Round
            });
            series1.Points.Add(new DataPoint(0.5, 90.7));
            series1.Points.Add(new DataPoint(1.5, 91.2));
            series1.Points.Add(new DataPoint(2.5, 91));
            series1.Points.Add(new DataPoint(3.5, 89.5));
            series1.Points.Add(new DataPoint(4.5, 92.5));
            series1.Points.Add(new DataPoint(5.5, 93.1));
            series1.Points.Add(new DataPoint(6.5, 94.5));
            series1.Points.Add(new DataPoint(7.5, 95.5));
            series1.Points.Add(new DataPoint(8.5, 95.7));
            series1.Points.Add(new DataPoint(9.5, 96.0));
            return(model);
        }
        public static PlotModel AbsoluteYmin2()
        {
            var plot = new PlotModel("Y: AbsoluteMinimum = 0", "AutoAdjustPlotMargins = false")
            {
                PlotType = PlotType.Cartesian, AutoAdjustPlotMargins = false
            };
            var c = OxyColors.DarkBlue;

            plot.Axes.Add(new LinearAxis(AxisPosition.Bottom, "X-axis")
            {
                MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Axes.Add(new LinearAxis(AxisPosition.Left, "Y-axis")
            {
                AbsoluteMinimum = 0, Minimum = 0, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Series.Add(CreateTestSeries());
            return(plot);
        }
        public static PlotModel AbsoluteYminXmin()
        {
            var plot = new PlotModel {
                Title = "X: AbsoluteMinimum = -10, Y: AbsoluteMinimum = 0", PlotType = PlotType.Cartesian
            };

            var c = OxyColors.DarkBlue;

            plot.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom, Title = "X-axis", AbsoluteMinimum = -10, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left, Title = "Y-axis", AbsoluteMinimum = 0, Minimum = 0, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Series.Add(CreateTestSeries());
            return(plot);
        }
        public static PlotModel EllipseAnnotation()
        {
            var model = new PlotModel {
                Title = "EllipseAnnotation"
            };

            model.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom
            });
            model.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left
            });
            model.Annotations.Add(new EllipseAnnotation {
                X = 20, Y = 60, Width = 20, Height = 15, Text = "EllipseAnnotation", TextRotation = 10, Fill = OxyColor.FromAColor(99, OxyColors.Green), Stroke = OxyColors.Black, StrokeThickness = 2
            });

            model.Annotations.Add(new EllipseAnnotation {
                X = 20, Y = 20, Width = 20, Height = 20, Fill = OxyColor.FromAColor(99, OxyColors.Green), Stroke = OxyColors.Black, StrokeThickness = 2
            });
            model.Annotations.Add(new EllipseAnnotation {
                X = 30, Y = 20, Width = 20, Height = 20, Fill = OxyColor.FromAColor(99, OxyColors.Red), Stroke = OxyColors.Black, StrokeThickness = 2
            });
            model.Annotations.Add(new EllipseAnnotation {
                X = 25, Y = 30, Width = 20, Height = 20, Fill = OxyColor.FromAColor(99, OxyColors.Blue), Stroke = OxyColors.Black, StrokeThickness = 2
            });
            return(model);
        }
        /// <summary>
        /// Create the Distance Made Good Plot.
        /// </summary>
        /// <returns>Plot Model for Distance Made Good.</returns>
        private PlotModel CreateDistanceMadeGoodPlot()
        {
            PlotModel temp = new PlotModel();

            temp.IsLegendVisible = true;

            //temp.AutoAdjustPlotMargins = false;
            //temp.PlotMargins = new OxyThickness(0, 0, 0, 0);
            //temp.Padding = new OxyThickness(0,10,00,0);

            temp.Background          = OxyColors.Black;
            temp.TextColor           = OxyColors.White;
            temp.PlotAreaBorderColor = OxyColors.White;

            temp.Title = "Distance Made Good";

            // Setup the axis
            var c = OxyColors.White;

            temp.Axes.Add(new LinearAxis
            {
                Position = AxisPosition.Left,
                //Minimum = 0,
                //StartPosition = 1,                                              // This will invert the axis to start at the top with minimum value
                //EndPosition = 0
                TicklineColor      = OxyColors.White,
                MajorGridlineStyle = LineStyle.Solid,
                MinorGridlineStyle = LineStyle.Solid,
                MajorGridlineColor = OxyColor.FromAColor(40, c),
                MinorGridlineColor = OxyColor.FromAColor(20, c),
                //IntervalLength = 5,
                MinimumPadding = 0.1,                                               // Pad the top and bottom of the plot so min/max lines can be seen
                MaximumPadding = 0.1,                                               // Pad the top and bottom of the plot so min/max lines can be seen
                Unit           = "m"
            });
            temp.Axes.Add(new LinearAxis
            {
                Position = AxisPosition.Bottom,
                //MajorStep = 1
                //Minimum = 0,
                //Maximum = _maxDataSets,
                TicklineColor      = OxyColors.White,
                MajorGridlineStyle = LineStyle.Solid,
                MinorGridlineStyle = LineStyle.Solid,
                MajorGridlineColor = OxyColor.FromAColor(40, c),
                MinorGridlineColor = OxyColor.FromAColor(20, c),
                //IntervalLength = 5,
                TickStyle = OxyPlot.Axes.TickStyle.None,
                //IsAxisVisible = false,
                Unit = "m"
            });

            temp.Series.Add(new LineSeries()
            {
                Color = OxyColors.Chartreuse, StrokeThickness = 1, Title = "GPS"
            });
            temp.Series.Add(new LineSeries()
            {
                Color = OxyColors.DeepPink, StrokeThickness = 1, Title = "BT ENU"
            });

            return(temp);
        }
        public IEnumerable <Series> GetConstraintsSeries(bool skipIrrelevant = false, bool trimConstraints = true, double additionalMarginSize = 0.4)
        {
            foreach (var constraint in Solution.Constraints)
            {
                var constraintColor = constraint.IsMarkedRedundant
                    ? OxyColor.FromAColor(30, Color)
                    : Color;

                if (Math.Abs(constraint[YIndex]) > double.Epsilon)
                {
                    var minX   = MinX;
                    var maxX   = MaxX;
                    var deltaX = 0.0;

                    var leftY  = ConstraintFunctionValue(constraint, minX);
                    var rightY = ConstraintFunctionValue(constraint, maxX);

                    if (skipIrrelevant && (leftY > MaxY || leftY < MinY) && (rightY > MaxY || rightY < MinY))
                    {
                        continue;
                    }

                    if (trimConstraints)
                    {
                        while (leftY > MaxY || leftY < MinY)
                        {
                            deltaX = (maxX - minX) / 10;
                            minX  += deltaX;

                            if (deltaX < 0.1)
                            {
                                break;
                            }

                            leftY = ConstraintFunctionValue(constraint, minX);
                        }

                        minX  -= deltaX;
                        deltaX = 0;

                        while (rightY > MaxY || rightY < MinY)
                        {
                            deltaX = (maxX - minX) / 10;
                            maxX  -= deltaX;

                            if (deltaX < 0.1)
                            {
                                break;
                            }

                            rightY = ConstraintFunctionValue(constraint, maxX);
                        }

                        maxX += deltaX;
                    }

                    var plotMargin     = (maxX - minX) * additionalMarginSize;
                    var constraintLine =
                        new FunctionSeries(
                            x => (-constraint[XIndex] * x + constraint.AbsoluteTerm) / constraint[YIndex],
                            minX - plotMargin, maxX + plotMargin, 2)
                    {
                        Color = constraintColor
                    };

                    yield return(constraintLine);
                }
                else if (Math.Abs(constraint[XIndex]) > double.Epsilon)
                {
                    var lineSeriers = new LineSeries()
                    {
                        Color = constraintColor
                    };

                    lineSeriers.Points.AddRange(new []
                    {
                        new DataPoint(constraint.AbsoluteTerm, MinY),
                        new DataPoint(constraint.AbsoluteTerm, MaxY)
                    });

                    yield return(lineSeriers);
                }
            }
        }
Beispiel #13
0
        public GraphicViewModel(Controller con, string title)
        {
            this.Con   = con;
            this.Title = title;

            Series = new ObservableCollection <string>();

            MyModel                     = new PlotModel();
            MyModel.PlotType            = PlotType.XY;
            MyModel.LegendTitle         = "Legend";
            MyModel.LegendOrientation   = LegendOrientation.Horizontal;
            MyModel.LegendPlacement     = LegendPlacement.Outside;
            MyModel.LegendPosition      = LegendPosition.TopLeft;
            MyModel.LegendBackground    = OxyColor.FromAColor(200, OxyColors.White);
            MyModel.LegendBorder        = OxyColors.Black;
            MyModel.LegendPadding       = 0;
            MyModel.LegendItemSpacing   = 0;
            MyModel.LegendSymbolLength  = 20;
            MyModel.LegendTitleFontSize = 0;
            MyModel.LegendSymbolMargin  = 0;


            LinearAxis valueAxis = new LinearAxis {
                Title = "Value Axis", Position = AxisPosition.Left
            };
            DateTimeAxis dateAxis = new DateTimeAxis
            {
                Position     = AxisPosition.Bottom,
                StringFormat = "dd.MM.yyyy.",
                Title        = "Date Axis",
                //IntervalLength = 75,
                //MinorIntervalType = DateTimeIntervalType.Days,
                //IntervalType = DateTimeIntervalType.Days,
                MajorGridlineStyle = LineStyle.Solid,
                MinorGridlineStyle = LineStyle.None
            };

            MyModel.Axes.Add(valueAxis);
            MyModel.Axes.Add(dateAxis);


            /*for (int i = 0; i < colors.Length; i++)
             * {
             *  addSeries(""+i);
             *
             * }
             *
             * LineSeries series1 = (LineSeries) MyModel.Series[0];
             * series1.Points.Add(new DataPoint(0, 0));
             * series1.Points.Add(new DataPoint(10, 18));
             * series1.Points.Add(new DataPoint(20, 12));
             * series1.Points.Add(new DataPoint(30, 8));
             * series1.Points.Add(new DataPoint(40, 15));*/


            indexOfColor = 0;

            //MessageBox.Show("" + MyModel.Series.Count, "Uspesno odradjeno");

            /*this.MyModel = new PlotModel { Title = "Example 1" };
             * this.MyModel.Series.Add(new FunctionSeries(Math.Cos, 0, 10, 0.1, "cos(x)"));*/
        }
        private void SetUpModel()
        {
            PlotModel = new PlotModel();
            int hiddenLayers = Global.Instance.Settings.Layers.Length - 2;

            PlotModel.Title         = "Populacja: " + Global.Instance.Settings.PopulationSize + "; Kryterium stopu: " + Global.Instance.Settings.MaxErr + "; Walidacja krzyżowa: " + ((Global.Instance.Settings.IsCrossValidation) ? "Tak" : "Nie") + ";\nMutacja: " + Global.Instance.Settings.MutationRate + "; Elitaryzm: " + Global.Instance.Settings.ElitismPerc + "; Warstwy ukryte: " + hiddenLayers;
            PlotModel.TitleFontSize = 14;


            PlotModel.LegendTitle       = "Legenda";
            PlotModel.LegendOrientation = LegendOrientation.Horizontal;
            PlotModel.LegendPosition    = LegendPosition.TopRight;
            PlotModel.LegendBackground  = OxyColor.FromAColor(200, OxyColors.White);
            PlotModel.LegendBorder      = OxyColors.Black;
            // AxisPosition.Bottom, "Date", "dd/MM/yy HH:mm"
            //var dateAxis = new DateTimeAxis() { MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot, IntervalLength = 80 };
            //dateAxis.Title = "Rok";

            var genAxis = new LinearAxis()
            {
                Position = AxisPosition.Bottom, Title = "Generacja [numer]", MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot
            };



            var errAxis = new LinearAxis()
            {
                Position = AxisPosition.Left, Title = "Błąd", MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Dot
            };



            //foreach (var item in  Global.Instance.Stats.IndividualRecords)
            //{
            //    var lineSeries = new LineSeries
            //    {
            //        StrokeThickness = 2,
            //        MarkerSize = 1,
            //        Color = OxyColor.FromArgb(255, 255, 0, 0),
            //        LineStyle = LineStyle.Solid,
            //        CanTrackerInterpolatePoints = true,
            //        Points = new List<DataPoint>()
            //        LineJoin = LineJoin.Round,
            //        MarkerType = MarkerType.Plus,
            //        MarkerStroke = OxyColor.FromArgb(255, 0, 255, 0),

            //    };

            //    //collection.ForEach(x => lineSeries.Points.Add(new DataPoint(LinearAxis.ToDouble(item), LinearAxis.ToDouble(25))));
            //

            //    plotModel.Series.Add(lineSeries);
            //}

            var lineSeriesLearning = new LineSeries()
            {
                Color     = OxyColors.Red,
                LineStyle = LineStyle.Solid,
                CanTrackerInterpolatePoints = true,
                LineJoin = LineJoin.Round,
                Title    = "Dane uczące",
                //InterpolationAlgorithm = InterpolationAlgorithms.ChordalCatmullRomSpline,
            };

            var lineSeriesValidation = new LineSeries()
            {
                Color     = OxyColors.Green,
                LineStyle = LineStyle.Solid,
                CanTrackerInterpolatePoints = true,
                LineJoin = LineJoin.Round,
                Title    = "Dane walidacyjne",
                //InterpolationAlgorithm = InterpolationAlgorithms.ChordalCatmullRomSpline,
            };

            foreach (var item in Global.Instance.Stats.IndividualRecords)
            {
                lineSeriesLearning.Points.Add(new DataPoint(item.X, item.Y));
                lineSeriesValidation.Points.Add(new DataPoint(item.X, item.Z));
            }



            plotModel.Series.Add(lineSeriesLearning);
            plotModel.Series.Add(lineSeriesValidation);

            //dateAxis.StringFormat = "dd/MM/yy HH:mm";
            PlotModel.Axes.Add(genAxis);
            PlotModel.Axes.Add(errAxis);


            string fileName = Global.Instance.Settings.MaxErr + "_" + Global.Instance.Settings.PopulationSize;

            OxyPlot.Wpf.PngExporter.Export(PlotModel, "graphs/" + fileName + ".png", 600, 400, OxyColors.White);
        }
Beispiel #15
0
        /// <summary>
        /// Renders by an image sized from the available plot area.
        /// </summary>
        /// <param name="rc">The rc.</param>
        /// <param name="model">The model.</param>
        public void RenderDynamic(IRenderContext rc, PlotModel model)
        {
            int m = this.Data.GetLength(0);
            int n = this.Data.GetLength(1);

            // get the available plot area
            var dest   = model.PlotArea;
            int width  = (int)dest.Width;
            int height = (int)dest.Height;

            if (width == 0 || height == 0)
            {
                return;
            }

            if (this.pixels == null || this.pixels.GetLength(0) != height || this.pixels.GetLength(1) != width)
            {
                this.pixels = new OxyColor[width, height];
            }

            var p = this.pixels;

            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    // transform from screen to magnitude/angle
                    var    sp = new ScreenPoint(dest.Left + x, dest.Top + y);
                    var    xy = this.InverseTransform(sp);
                    double angle;
                    double magnitude;
                    if (this.PlotModel.PlotType != PlotType.Polar)
                    {
                        angle     = Math.Atan2(xy.Y, xy.X) / Math.PI * 180;
                        magnitude = Math.Sqrt((xy.X * xy.X) + (xy.Y * xy.Y));
                    }
                    else
                    {
                        angle     = xy.Y / Math.PI * 180;
                        magnitude = xy.X;
                        if (angle < 0)
                        {
                            angle += 360;
                        }
                    }

                    // transform to indices in the Data array
                    var ii = (angle - this.Angle0) / (this.Angle1 - this.Angle0) * m;
                    var jj = (magnitude - this.Magnitude0) / (this.Magnitude1 - this.Magnitude0) * n;
                    if (ii >= 0 && ii < m && jj >= 0 && jj < n)
                    {
                        // get the (interpolated) value
                        var value = this.GetValue(ii, jj);

                        // use the color axis to get the color
                        p[x, y] = OxyColor.FromAColor(160, this.ColorAxis.GetColor(value));
                    }
                    else
                    {
                        // outside the range of the Data array
                        p[x, y] = OxyColors.Transparent;
                    }
                }
            }

            // Create the PNG image
            this.image = OxyImage.Create(p, ImageFormat.Png);

            // Render the image
            var clip = this.GetClippingRect();

            rc.DrawClippedImage(clip, this.image, dest.Left, dest.Top, dest.Width, dest.Height, 1, false);
        }
Beispiel #16
0
        public static PlotModel AbsoluteYmin2()
        {
            var plot = new PlotModel
            {
                Title       = "Y: AbsoluteMinimum = 0",
                Subtitle    = "AutoAdjustPlotMargins = false",
                PlotType    = PlotType.Cartesian,
                PlotMargins = new OxyThickness(60, 4, 4, 40)
            };
            var c = OxyColors.DarkBlue;

            plot.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom, Title = "X-axis", MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left, Title = "Y-axis", AbsoluteMinimum = 0, Minimum = 0, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Series.Add(CreateTestSeries());
            return(plot);
        }
Beispiel #17
0
        /// <summary>
        /// Renders by scaling a fixed image.
        /// </summary>
        /// <param name="rc">The render context.</param>
        /// <param name="model">The model.</param>
        public void RenderFixed(IRenderContext rc, PlotModel model)
        {
            if (image == null)
            {
                int m = this.Data.GetLength(0);
                int n = this.Data.GetLength(1);

                int width  = this.ImageSize;
                int height = this.ImageSize;
                if (this.pixels == null || this.pixels.GetLength(0) != height || this.pixels.GetLength(1) != width)
                {
                    this.pixels = new OxyColor[width, height];
                }

                var p = this.pixels;
                for (int yi = 0; yi < height; yi++)
                {
                    for (int xi = 0; xi < width; xi++)
                    {
                        double x = (xi - width * 0.5) / (width * 0.5) * this.Magnitude1;
                        double y = -(yi - height * 0.5) / (height * 0.5) * this.Magnitude1;

                        double angle     = Math.Atan2(y, x) / Math.PI * 180;
                        double magnitude = Math.Sqrt(x * x + y * y);

                        if (angle < 0)
                        {
                            angle += 360;
                        }

                        // transform to indices in the Data array
                        var ii = (angle - this.Angle0) / (this.Angle1 - this.Angle0) * m;
                        var jj = (magnitude - this.Magnitude0) / (this.Magnitude1 - this.Magnitude0) * n;
                        if (ii >= 0 && ii < m && jj >= 0 && jj < n)
                        {
                            // get the (interpolated) value
                            var value = this.GetValue(ii, jj);

                            // use the color axis to get the color
                            p[xi, yi] = OxyColor.FromAColor(160, this.ColorAxis.GetColor(value));
                        }
                        else
                        {
                            // outside the range of the Data array
                            p[xi, yi] = OxyColors.Transparent;
                        }
                    }
                }

                // Create the PNG image
                this.image = OxyImage.Create(p, ImageFormat.Png);
            }

            OxyRect dest;

            if (this.PlotModel.PlotType != PlotType.Polar)
            {
                var topleft     = this.Transform(-this.Magnitude1, this.Magnitude1);
                var bottomright = this.Transform(this.Magnitude1, -this.Magnitude1);
                dest = new OxyRect(topleft.X, topleft.Y, bottomright.X - topleft.X, bottomright.Y - topleft.Y);
            }
            else
            {
                var top    = this.Transform(this.Magnitude1, 90);
                var bottom = this.Transform(this.Magnitude1, 270);
                var left   = this.Transform(this.Magnitude1, 180);
                var right  = this.Transform(this.Magnitude1, 0);
                dest = new OxyRect(left.X, top.Y, right.X - left.X, bottom.Y - top.Y);
            }

            // Render the image
            var clip = this.GetClippingRect();

            rc.DrawClippedImage(clip, this.image, dest.Left, dest.Top, dest.Width, dest.Height, 1, false);
        }
Beispiel #18
0
        private PlotModel InitializePlotModel(bool dateXAxis)
        {
            PlotModel plotModel = new PlotModel();

            plotModel.LegendOrientation = LegendOrientation.Horizontal;
            plotModel.LegendPlacement   = LegendPlacement.Inside;
            plotModel.LegendPosition    = LegendPosition.TopLeft;
            plotModel.LegendBackground  = OxyColor.FromAColor(200, OxyColors.White);

            if (!dateXAxis)
            {
                LinearAxis offsetAxis = new LinearAxis()
                {
                    MajorGridlineStyle = LineStyle.Dot,
                    MinorGridlineStyle = LineStyle.None,
                    Position           = AxisPosition.Bottom,
                    Title           = "Offset minutes",
                    AbsoluteMinimum = 0,
                    MinorTickSize   = 0
                };
                plotModel.Axes.Add(offsetAxis);
            }
            else
            {
                LinearAxis offsetAxis = new DateTimeAxis()
                {
                    MajorGridlineStyle = LineStyle.Dot,
                    MinorGridlineStyle = LineStyle.None,
                    Position           = AxisPosition.Bottom,
                    Title             = "Time",
                    StringFormat      = "HH:mm",
                    MinorIntervalType = DateTimeIntervalType.Minutes,
                    IntervalType      = DateTimeIntervalType.Minutes,
                };
                plotModel.Axes.Add(offsetAxis);
            }
            LinearAxis valueAxis1 = new LinearAxis()
            {
                MajorGridlineStyle = LineStyle.Dot,
                MinorGridlineStyle = LineStyle.None,
                Position           = AxisPosition.Left,
                StringFormat       = "N0",
                IsZoomEnabled      = false,
                IsPanEnabled       = false,
                AbsoluteMinimum    = 0,
                MaximumPadding     = 0.2,
                MinorTickSize      = 0
            };

            plotModel.Axes.Add(valueAxis1);

            plotModel.PlotMargins = new OxyThickness(70, 0, 0, 30);
            plotModel.Series.Clear();

            foreach (var ax in plotModel.Axes)
            {
                ax.AxisChanged += (sender, e) => SynchronizeCharts(plotModel, sender, e);
            }

            return(plotModel);
        }
        public static PlotModel AbsoluteYminYmaxXminXmax()
        {
            var plot = new PlotModel("Y: AbsoluteMinimum = 0, AbsoluteMaximum = 2, X: AbsoluteMinimum = -10, AbsoluteMaximum = 10")
            {
                PlotType = PlotType.Cartesian
            };

            var c = OxyColors.DarkBlue;

            plot.Axes.Add(new LinearAxis(AxisPosition.Bottom, "X-axis")
            {
                AbsoluteMinimum = -10, AbsoluteMaximum = 10, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Axes.Add(new LinearAxis(AxisPosition.Left, "Y-axis")
            {
                AbsoluteMinimum = 0, Minimum = 0, AbsoluteMaximum = 2, MajorGridlineStyle = LineStyle.Solid, MinorGridlineStyle = LineStyle.Solid, MajorGridlineColor = OxyColor.FromAColor(40, c), MinorGridlineColor = OxyColor.FromAColor(20, c)
            });
            plot.Series.Add(CreateTestSeries());

            return(plot);
        }
Beispiel #20
0
        public static PlotModel RectangleAnnotation()
        {
            var model = new PlotModel {
                Title = "RectangleAnnotation"
            };

            model.Axes.Add(new LinearAxis {
                Position = AxisPosition.Bottom
            });
            model.Axes.Add(new LinearAxis {
                Position = AxisPosition.Left
            });
            model.Annotations.Add(new RectangleAnnotation {
                MinimumX = 20, MaximumX = 70, MinimumY = 10, MaximumY = 40, TextRotation = 10, Text = "RectangleAnnotation", Fill = OxyColor.FromAColor(99, OxyColors.Blue), Stroke = OxyColors.Black, StrokeThickness = 2
            });
            return(model);
        }