-
Notifications
You must be signed in to change notification settings - Fork 11
/
ErrorBarsChartViewController.cs
113 lines (97 loc) · 4.26 KB
/
ErrorBarsChartViewController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System;
using SciChart.Examples.Demo.Data;
using SciChart.Examples.Demo.Fragments.Base;
using SciChart.iOS.Charting;
using Xamarin.Examples.Demo.iOS.Resources.Layout;
using Xamarin.Examples.Demo.iOS.Views.Base;
using Xamarin.Examples.Demo.Utils;
namespace Xamarin.Examples.Demo.iOS.Views.Examples
{
[ExampleDefinition("ErrorBars Chart", description: "Demonstrates Error Bars showing point uncertainty", icon: ExampleIcon.ErrorBars)]
public class ErrorBarsChartViewController : ExampleBaseViewController
{
public override Type ExampleViewType => typeof(SingleChartViewLayout);
public SCIChartSurface Surface => ((SingleChartViewLayout)View).SciChartSurface;
protected override void InitExample()
{
var xAxis = new SCINumericAxis();
var yAxis = new SCINumericAxis();
var fourierSeries = DataManager.Instance.GetFourierSeries(1.0, 0.1, 5.0, 5.15);
var dataSeries0 = new HlDataSeries<double, double>();
var dataSeries1 = new HlDataSeries<double, double>();
FillDataSeries(dataSeries0, fourierSeries, 1.0);
FillDataSeries(dataSeries1, fourierSeries, 1.3);
const uint color = 0xFFC6E6FF;
var strokeStyle = new SCISolidPenStyle(0xFFC6E6FF.ToColor(), 1f);
var errorBars0 = new SCIFastErrorBarsRenderableSeries
{
DataSeries = dataSeries0,
StrokeStyle = strokeStyle,
ErrorDirection = SCIErrorBarDirection.Vertical,
ErrorType = SCIErrorBarType.Absolute
};
errorBars0.AddAnimation(new SCIScaleRenderableSeriesAnimation(3, SCIAnimationCurve.EaseOutElastic));
var lineSeries = new SCIFastLineRenderableSeries
{
DataSeries = dataSeries0,
StrokeStyle = strokeStyle,
PointMarker = new SCIEllipsePointMarker
{
FillStyle = new SCISolidBrushStyle(color),
Width = 5,
Height = 5
}
};
lineSeries.AddAnimation(new SCIScaleRenderableSeriesAnimation(3, SCIAnimationCurve.EaseOutElastic));
var errorBars1 = new SCIFastErrorBarsRenderableSeries
{
DataSeries = dataSeries1,
StrokeStyle = strokeStyle,
DataPointWidth = 0.7f,
ErrorDirection = SCIErrorBarDirection.Vertical,
ErrorType = SCIErrorBarType.Absolute
};
errorBars1.AddAnimation(new SCIScaleRenderableSeriesAnimation(3, SCIAnimationCurve.EaseOutElastic));
var scatterSeries = new SCIXyScatterRenderableSeries
{
DataSeries = dataSeries1,
PointMarker = new SCIEllipsePointMarker
{
FillStyle = new SCISolidBrushStyle(ColorUtil.Transparent),
StrokeStyle = strokeStyle,
Width = 7,
Height = 7
}
};
scatterSeries.AddAnimation(new SCIScaleRenderableSeriesAnimation(3, SCIAnimationCurve.EaseOutElastic));
using (Surface.SuspendUpdates())
{
Surface.XAxes.Add(xAxis);
Surface.YAxes.Add(yAxis);
Surface.RenderableSeries = new SCIRenderableSeriesCollection
{
errorBars0,
lineSeries,
errorBars1,
scatterSeries
};
Surface.ChartModifiers = new SCIChartModifierCollection
{
new SCIZoomPanModifier(),
new SCIPinchZoomModifier(),
new SCIZoomExtentsModifier()
};
}
}
private static void FillDataSeries(HlDataSeries<double, double> dataSeries, DoubleSeries sourceData, double scale)
{
var random = new Random(42);
var xData = sourceData.XData;
var yData = sourceData.YData;
for (var i = 0; i < sourceData.Count; i++)
{
dataSeries.Append(xData[i], yData[i] + scale, random.NextDouble() * 0.2, random.NextDouble() * 0.2);
}
}
}
}