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); }
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); }
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); }
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); } }
public void LogarithmicAxis() { var s1 = new Axes.LogarithmicAxis(); var s2 = new LogarithmicAxis(); OxyAssert.PropertiesAreEqual(s1, s2); }
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); }
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; }
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); }
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); }
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); }
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); }
private LogarithmicAxis CreateNewLogAxis(string title, AxisPosition axpos) { var newAxis = new LogarithmicAxis { Position = axpos, Title = title }; if (axpos == AxisPosition.Right) { newAxis.Key = _rightAxisKey; } return(newAxis); }
/// <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); }
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); }
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); }
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; }
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); }
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); }
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; }
public void LogarithmicAxis() { var s1 = new OxyPlot.Axes.LogarithmicAxis(); var s2 = new LogarithmicAxis(); OxyAssert.PropertiesAreEqual(s1, s2); }
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); }
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); } }
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); }
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; }; }
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); }
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); } }
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; }
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); }
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; }
/// <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; } } }
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); }
/// <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); }
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; }
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) ) ); }
/// <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); }
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; }
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); } }