private void PlotUnitKills(PlotModel m) { if (EmpiresUnitKills == null) { return; } AddXDatesAxis(m); LinearAxis citiesY = new LinearAxis(); citiesY.Title = Labels.KilledUnits; citiesY.Key = "units_kills"; citiesY.Position = AxisPosition.Right; m.Axes.Add(citiesY); long lastKills = -1; double killsValue = 0; foreach (var empire in EmpiresUnitKills.OrderBy(x => x.Key.UnitsKillsRank)) { lastKills = -1; killsValue = 0; OxyPlot.Series.StairStepSeries s = new OxyPlot.Series.StairStepSeries(); s.XAxisKey = "x"; s.YAxisKey = "units_kills"; s.VerticalStrokeThickness = 0.2; s.MarkerType = MarkerType.None; s.Title = string.Format("{0} ({1})", empire.Key.PlayerName, empire.Key.AlianceName); foreach (var hr in empire.Value.OrderBy(x => x.CreateDT.Value)) { if (DiffKillsScore) { if (lastKills < 0) { //pierwszy wynik, zaczynam od zera lastKills = hr.Score; killsValue = 0; } else { killsValue = hr.Score - lastKills; lastKills = hr.Score; } } else { killsValue = hr.Score; } s.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, killsValue)); } m.Series.Add(s); } }
private void PlotOffRep(PlotModel m) { if (OffReputations == null) { return; } //miasta LinearAxis yAxis = new LinearAxis(); yAxis.Title = Labels.OffReputation; yAxis.Key = "off_rep"; yAxis.Position = AxisPosition.Right; yAxis.MajorGridlineStyle = LineStyle.None; yAxis.MinorGridlineStyle = LineStyle.None; m.Axes.Add(yAxis); foreach (var empire in OffReputations.OrderBy(x => x.Key.OffReputation)) { var s = new OxyPlot.Series.StairStepSeries(); s.XAxisKey = "x"; s.YAxisKey = "off_rep"; s.LineStyle = LineStyle.Dash; //s.VerticalStrokeThickness = 0.2; s.MarkerType = MarkerType.Diamond; s.Title = string.Format("A: {0} ({1})", empire.Key.PlayerName, empire.Key.AlianceName); DateTime?lastTime = null; long lastScore = 0; foreach (var hr in empire.Value.OrderBy(x => x.CreateDT.Value)) { s.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, hr.Score)); lastScore = hr.Score; lastTime = hr.CreateDT; } //sztucznie dodaję pomiar, żeb widać było poziomą kreskę if (lastTime.HasValue) { s.Points.Add(DateTimeAxis.CreateDataPoint(lastTime.Value.AddHours(1), lastScore)); } m.Series.Add(s); } }
private void PlotCities(PlotModel m) { if (Empires == null) { return; } AddXDatesAxis(m); //miasta LinearAxis citiesY = new LinearAxis(); citiesY.Title = Labels.Cities; citiesY.Key = "cities"; citiesY.Position = AxisPosition.Right; citiesY.MajorGridlineStyle = LineStyle.None; citiesY.MinorGridlineStyle = LineStyle.None; m.Axes.Add(citiesY); foreach (var empire in Empires.OrderBy(x => x.Key.CitiesNo)) { OxyPlot.Series.StairStepSeries citiesSerie = new OxyPlot.Series.StairStepSeries(); citiesSerie.XAxisKey = "x"; citiesSerie.YAxisKey = "cities"; citiesSerie.VerticalStrokeThickness = 0.2; citiesSerie.MarkerType = MarkerType.None; citiesSerie.Title = string.Format("{0} ({1})", empire.Key.PlayerName, empire.Key.AlianceName); foreach (var hr in empire.Value.OrderBy(x => x.CreateDT.Value)) { citiesSerie.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, hr.CitiesNo)); } m.Series.Add(citiesSerie); } }
private Series ConvertSeries(ChartSeriesViewModel series) { Series newSeries = null; var valueSeries = series.GetScaleForProperty(series.ValueMemberPath); var labelSeries = series.GetScaleForProperty(series.LabelMemberPath); switch (series.SeriesType) { case (ChartSeriesType.Column): { newSeries = new ColumnSeries { ValueField = series.ValueMemberPath, ItemsSource = series.DataSource.Data, FillColor = valueSeries.Color.ToOxyColor(), StrokeColor = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case (ChartSeriesType.Line): { newSeries = new LineSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, MarkerType = MarkerType.Circle, Color = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case (ChartSeriesType.Spline): { newSeries = new LineSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, MarkerType = MarkerType.Circle, Color = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), Smooth = true, YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case (ChartSeriesType.Area): { newSeries = new AreaSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, Color = valueSeries.Color.ToOxyColor(), Fill = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case (ChartSeriesType.SplineArea): { newSeries = new AreaSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, Color = valueSeries.Color.ToOxyColor(), Fill = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), Smooth = true, YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case (ChartSeriesType.Bubble): { newSeries = new ScatterSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, DataFieldSize = series.RadiusMemberPath, MarkerFill = valueSeries.Color.ToOxyColor(), MarkerType = MarkerType.Circle, YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case (ChartSeriesType.StepLine): { newSeries = new StairStepSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, Color = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } default: { return(null); } } newSeries.Title = series.Name; return(newSeries); }
/// <summary> /// Initializes a new instance of the <see cref="StairStepSeries"/> class. /// </summary> public StairStepSeries() { InternalSeries = new OxyPlot.Series.StairStepSeries(); }
private Series ConvertSeries(ChartSeriesViewModel series) { Series newSeries = null; var valueSeries = series.GetScaleForProperty(series.ValueMemberPath); var labelSeries = series.GetScaleForProperty(series.LabelMemberPath); switch (series.SeriesType) { case( ChartSeriesType.Column): { newSeries = new ColumnSeries { ValueField = series.ValueMemberPath, ItemsSource = series.DataSource.Data, FillColor = valueSeries.Color.ToOxyColor(), StrokeColor = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case( ChartSeriesType.Line ): { newSeries = new LineSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, MarkerType = MarkerType.Circle, Color = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case( ChartSeriesType.Spline): { newSeries = new LineSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, MarkerType = MarkerType.Circle, Color = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), Smooth = true, YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case(ChartSeriesType.Area): { newSeries = new AreaSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, Color = valueSeries.Color.ToOxyColor(), Fill = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case( ChartSeriesType.SplineArea): { newSeries = new AreaSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, Color = valueSeries.Color.ToOxyColor(), Fill = valueSeries.Color.ToOxyColor(), MarkerFill = valueSeries.Color.ToOxyColor(), Smooth = true, YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case(ChartSeriesType.Bubble): { newSeries = new ScatterSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, DataFieldSize = series.RadiusMemberPath, MarkerFill = valueSeries.Color.ToOxyColor(), MarkerType = MarkerType.Circle, YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } case( ChartSeriesType.StepLine): { newSeries = new StairStepSeries { ItemsSource = series.DataSource.Data, DataFieldX = series.XMemberPath, DataFieldY = series.YMemberPath, Color = valueSeries.Color.ToOxyColor(), YAxisKey = valueSeries.Name, XAxisKey = labelSeries.Name, }; break; } default: { return null; } } newSeries.Title = series.Name; return newSeries; }
private void RefreshPlot() { PlotModel m = new PlotModel(); m.Title = Labels.AlianceScoreAndCities; //oś X - z datami, w sumie zawsze :) DateTimeAxis xAxis = new DateTimeAxis(); xAxis.Position = AxisPosition.Bottom; xAxis.Key = "x"; xAxis.StringFormat = "yyyy-MM-dd "; xAxis.Angle = -45; xAxis.MajorGridlineStyle = LineStyle.Solid; xAxis.MinorGridlineStyle = LineStyle.Dot; m.Axes.Add(xAxis); //punktacja LinearAxis scoreY = new LinearAxis(); if (DiffScore) { scoreY.Title = Labels.ScoreSpeed; } else { scoreY.Title = Labels.Score; } scoreY.Key = "score"; scoreY.Position = AxisPosition.Left; scoreY.MajorGridlineStyle = LineStyle.Solid; scoreY.MinorGridlineStyle = LineStyle.Dot; if (ShowScore) { m.Axes.Add(scoreY); } //miasta LinearAxis citiesY = new LinearAxis(); citiesY.Title = Labels.Cities; citiesY.Key = "cities"; citiesY.Position = AxisPosition.Right; if (ShowCities) { m.Axes.Add(citiesY); } foreach (var aliance in Aliances.OrderBy(x => x.Key.Rank)) { long lastScore = -1; double scoreValue = 0; DateTime lastTime = DateTime.Now; double deltaTime = 0; OxyPlot.Series.LineSeries ls = new OxyPlot.Series.LineSeries(); ls.XAxisKey = "x"; ls.YAxisKey = "score"; ls.MarkerType = MarkerType.Diamond; ls.Title = aliance.Key.AlianceName; OxyPlot.Series.StairStepSeries citiesSerie = new OxyPlot.Series.StairStepSeries(); citiesSerie.XAxisKey = "x"; citiesSerie.YAxisKey = "cities"; citiesSerie.VerticalStrokeThickness = 0.2; citiesSerie.MarkerType = MarkerType.None; citiesSerie.Title = aliance.Key.AlianceName; foreach (var hr in aliance.Value.OrderBy(x => x.CreateDT.Value)) { if (DiffScore) { if (lastScore < 0) { //pierwszy wynik, zaczynam od zera lastScore = hr.Score; lastTime = hr.CreateDT.Value; scoreValue = 0; } else { deltaTime = (hr.CreateDT.Value - lastTime).TotalMinutes; //liczę przyrosty na minutę, jeżeli czas między pomiaram > 3h, inaczej nie ma to sensu - za wolno punkty przyrastają i będąg głupoty if (deltaTime > 180) { scoreValue = (hr.Score - lastScore) / deltaTime; lastScore = hr.Score; lastTime = hr.CreateDT.Value; } } } else { scoreValue = hr.Score; } if (((DiffScore && (deltaTime > 60)) || !DiffScore) && ShowScore) { ls.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, scoreValue)); } if (ShowCities) { citiesSerie.Points.Add(DateTimeAxis.CreateDataPoint(hr.CreateDT.Value, hr.CitiesNo)); } } if (ShowScore) { m.Series.Add(ls); } if (ShowCities) { m.Series.Add(citiesSerie); } } PlotM = m; }