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); }
/// <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); } }
/// <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 } }
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; }
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); } } }
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); }
/// <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); }
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); }
/// <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); }
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); }
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); }