public MainViewModel() { var ds0 = new XyDataSeries<double, double>(); var someData = new RandomWalkGenerator().GetRandomWalkSeries(200); // RandomWalkGenerator is found in the examples source code ds0.Append(someData.XData, someData.YData); // With SeriesSource API you do not need a DataSet. This is created automatically to match // the type of DataSeries<Tx,Ty>. All DataSeries must be the same type however // Create a list of ChartSeriesViewModel which unify dataseries and render series // This way you can add/remove your series and change the render series type easily // without worrying about DataSeriesIndex as per SciChart v1.3 _chartSeries = new ObservableCollection<IChartSeriesViewModel>(); _chartSeries.Add(new ChartSeriesViewModel(ds0, new FastLineRenderableSeries())); // Now create the labels _chartLabels = new[] { new LabelViewModel(5, -2.5, "Label0", "Label0 Tooltip!"), new LabelViewModel(20, -2, "Label1", "Label1 Tooltip!"), new LabelViewModel(35, 3, "Label2", "Label2 Tooltip!"), new LabelViewModel(50, 1.5, "Label3", "Label3 Tooltip!"), new LabelViewModel(65, -0.5, "Label4", "Label4 Tooltip!"), }; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var depthAndCurves = value as ObservableCollection<DepthCurveInfo>; var lstToBeUsed = depthAndCurves.Except(depthAndCurves.Where(u => u.Curve <= -999 && u.Curve >= (decimal)-999.99)).ToList(); var dataSeries = new XyDataSeries<double, double>(); dataSeries.AcceptsUnsortedData = true; lstToBeUsed.ForEach(u => dataSeries.Append((double)u.Curve, (double)u.Depth)); return lstToBeUsed; }
public void AddLithologiesToTrack(TrackToShow track) { var renderableSeries = track.CurveRenderableSeries.Where(u => u.GetType() == typeof(FastLineRenderableSeries)).Select(v => v as FastLineRenderableSeries); FastLineRenderableSeries actualLithologySeries = null; actualLithologySeries = renderableSeries.SingleOrDefault(u => u.Name == "Lithology" && u.XAxisId == "Lithology"); if (actualLithologySeries == null) { LithologyManager.Instance.AddLithologyAxisInChart(track); actualLithologySeries = renderableSeries.SingleOrDefault(u => u.Name == "Lithology" && u.XAxisId == "Lithology"); } var lst = track.TrackObject.Lithologies; actualLithologySeries.IsVisible = true; var grouped = lst.GroupBy(u => u.LithologyName).ToList(); var seriesCollection = new ObservableCollection<FastLineRenderableSeries>(); var trackObject = track.TrackObject; var curveToShowObject = track.Curves.SingleOrDefault(u => u.RefChart == trackObject.RefChart && u.RefTrack == trackObject.ID && u.RefDataset == "Lithology"); foreach (var obj in grouped) { var dataSeries = new XyDataSeries<double, double>(); var fullDataSeries = new XyDataSeries<double, double>(); string imageName = obj.Key; FastLineRenderableSeries normalLithologySeries = GetNormalLithologySeries(dataSeries, imageName); FastLineRenderableSeries fullLithologySeries = GetFullLithologySeries(fullDataSeries, imageName, track); ApplyBindingToNormalLithology(actualLithologySeries, normalLithologySeries); ApplyBindingToFullLithology(actualLithologySeries, fullLithologySeries); seriesCollection.Add(normalLithologySeries); seriesCollection.Add(fullLithologySeries); foreach (var item in obj) { decimal initialDepth = item.InitialDepth; decimal finalDepth = item.FinalDepth; for (decimal i = initialDepth; i <= finalDepth; i++) { dataSeries.Append(9.5, double.Parse(i.ToString())); fullDataSeries.Append(5, double.Parse(i.ToString())); } } if (curveToShowObject != null) actualLithologySeries.IsVisible = curveToShowObject.IsSeriesVisible; } foreach (var series in seriesCollection) track.CurveRenderableSeries.Add(series); }
// Business logic /// <summary> /// Add data for a symbol to the chart /// </summary> /// <param name="quoteList">Retrieved quotes</param> /// <param name="seriesName">Name for the series (symbol + moving average length)</param> private void AddSeries(SortedList<DateTime, double> quoteList, string seriesName) { // Create a new data series var series = new XyDataSeries<DateTime, double>(); series.Append(quoteList.Keys, quoteList.Values); series.SeriesName = seriesName; stockChart.DataSet.Add(series); // Display the data via RenderableSeries var renderSeries = new FastMountainRenderableSeries(); stockChart.RenderableSeries.Add(renderSeries); stockChart.DataSet.InvalidateParentSurface(RangeMode.ZoomToFit); stockChart.ZoomExtents(); }
protected override void InitExampleInternal() { Surface = new SCIChartSurface(_exampleViewLayout.SciChartSurfaceView); StyleHelper.SetSurfaceDefaultStyle(Surface); var dampedSinewave = DataManager.Instance.GetDampedSinewave(1.0, 0.02, 150, 5); var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(dampedSinewave.XData, dampedSinewave.YData); var axisStyle = StyleHelper.GetDefaultAxisStyle(); var xAxis = new SCINumericAxis { IsXAxis = true, GrowBy = new SCIDoubleRange(0.1, 0.1), Style = axisStyle }; var yAxis = new SCINumericAxis { GrowBy = new SCIDoubleRange(0.1, 0.1), Style = axisStyle }; var renderSeries = new SCIXyScatterRenderableSeries { DataSeries = dataSeries, Style = { PointMarker = new SCIEllipsePointMarker { FillBrush = new SCIBrushSolid(UIColor.FromRGB(70, 130, 180)), BorderPen = new SCIPenSolid(UIColor.FromRGB(176, 196, 222),2f), Width = 15, Height = 15 } } }; Surface.AttachAxis(xAxis, true); Surface.AttachAxis(yAxis, false); Surface.AttachRenderableSeries(renderSeries); Surface.ChartModifier = new SCIModifierGroup(new ISCIChartModifierProtocol[] { new SCIZoomPanModifier(), new SCIPinchZoomModifier(), new SCIZoomExtentsModifier() }); Surface.InvalidateElement(); }
public StackedBarChartExampleView() { InitializeComponent(); sciChart.Rendered += (o, args) => { if (!_firstTimeRendered) { _firstTimeRendered = true; sciChart.ZoomExtents(); } }; var yValues1 = new[] { 0.0, 0.1, 0.2, 0.4, 0.8, 1.1, 1.5, 2.4, 4.6, 8.1, 11.7, 14.4, 16.0, 13.7, 10.1, 6.4, 3.5, 2.5, 5.4, 6.4, 7.1, 8.0, 9.0 }; var yValues2 = new[] { 2.0, 10.1, 10.2, 10.4, 10.8, 1.1, 11.5, 3.4, 4.6, 0.1, 1.7, 14.4, 16.0, 13.7, 10.1, 6.4, 3.5, 2.5, 1.4, 0.4, 10.1, 0.0, 0.0 }; var yValues3 = new[] { 20.0, 4.1, 4.2, 10.4, 10.8, 1.1, 11.5, 3.4, 4.6, 5.1, 5.7, 14.4, 16.0, 13.7, 10.1, 6.4, 3.5, 2.5, 1.4, 10.4, 8.1, 10.0, 15.0 }; var dataSeries1 = new XyDataSeries <double, double> { SeriesName = "data1" }; var dataSeries2 = new XyDataSeries <double, double> { SeriesName = "data2" }; var dataSeries3 = new XyDataSeries <double, double> { SeriesName = "data3" }; for (int i = 0; i < yValues1.Length; i++) { dataSeries1.Append(i, yValues1[i]); } for (int i = 0; i < yValues2.Length; i++) { dataSeries2.Append(i, yValues2[i]); } for (int i = 0; i < yValues3.Length; i++) { dataSeries3.Append(i, yValues3[i]); } using (sciChart.SuspendUpdates()) { columnSeries1.DataSeries = dataSeries1; columnSeries2.DataSeries = dataSeries2; columnSeries3.DataSeries = dataSeries3; } }
protected override void InitExample() { var xAxis = new NumericAxis(Activity) { GrowBy = new DoubleRange(0.1, 0.1) }; var yAxis = new NumericAxis(Activity) { GrowBy = new DoubleRange(0.1, 0.1) }; var ds1Points = DataManager.Instance.GetDampedSinewave(1.0, 0.05, 50, 5); var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(ds1Points.XData, ds1Points.YData); var rSeries = new FastImpulseRenderableSeries { DataSeries = dataSeries, StrokeStyle = new SolidPenStyle(0xFF0066FF, 2f.ToDip(Activity)), PointMarker = new EllipsePointMarker { Width = 10.ToDip(Activity), Height = 10.ToDip(Activity), StrokeStyle = new SolidPenStyle(0xFF0066FF, 2f.ToDip(Activity)), FillStyle = new SolidBrushStyle(0xFF0066FF) } }; using (Surface.SuspendUpdates()) { Surface.XAxes.Add(xAxis); Surface.YAxes.Add(yAxis); Surface.RenderableSeries.Add(rSeries); Surface.ChartModifiers = new ChartModifierCollection { new ZoomPanModifier(), new PinchZoomModifier(), new ZoomExtentsModifier() }; new WaveAnimatorBuilder(rSeries) { Interpolator = new DecelerateInterpolator(), Duration = 3000, StartDelay = 350 }.Start(); } }
public ManipulateSeriesMvvmViewModel() { _renderableSeriesViewModels = new ObservableCollection <IRenderableSeriesViewModel>(); _addCommand = new ActionCommand(() => { RenderableSeriesViewModels.Add(ViewModelsFactory.New(SelectedSeriesType.Type, 0)); ZoomExtents(); ClearCommand.RaiseCanExecuteChanged(); }, () => SelectedSeriesType != null); _removeCommand = new ActionCommand(() => { RenderableSeriesViewModels.RemoveWhere(s => s.IsSelected); ClearCommand.RaiseCanExecuteChanged(); }, () => RenderableSeriesViewModels.Any(s => s.IsSelected)); _clearCommand = new ActionCommand(() => { RenderableSeriesViewModels.Clear(); ClearCommand.RaiseCanExecuteChanged(); }, () => RenderableSeriesViewModels.Count > 0); _selectionChangedCommand = new ActionCommand(() => { var rSeriesVm = RenderableSeriesViewModels.FirstOrDefault(s => s.IsSelected); if (rSeriesVm != null) { SelectedSeriesType = SeriesTypes.FirstOrDefault(x => x.Type == rSeriesVm.GetType()); } RemoveCommand.RaiseCanExecuteChanged(); }); var data = DataManager.Instance.GetSinewave(1.0, 0.5, 100, 5); var lineDataSeries = new XyDataSeries <double, double>(); lineDataSeries.Append(data.XData.Select(d => d * 5), data.YData); FillSeriesTypes(); SelectedSeriesType = SeriesTypes[3]; _addCommand.Execute(null); AddCommand.RaiseCanExecuteChanged(); RemoveCommand.RaiseCanExecuteChanged(); }
private void StackedColumnChartExampleView_OnLoaded(object sender, RoutedEventArgs e) { var porkData = new double[] { 10, 13, 7, 16, 4, 6, 20, 14, 16, 10, 24, 11 }; var vealData = new double[] { 12, 17, 21, 15, 19, 18, 13, 21, 22, 20, 5, 10 }; var tomatoesData = new double[] { 7, 30, 27, 24, 21, 15, 17, 26, 22, 28, 21, 22 }; var cucumberData = new double[] { 16, 10, 9, 8, 22, 14, 12, 27, 25, 23, 17, 17 }; var pepperData = new double[] { 7, 24, 21, 11, 19, 17, 14, 27, 26, 22, 28, 16 }; var dataSeries1 = new XyDataSeries <double, double> { SeriesName = "Pork" }; var dataSeries2 = new XyDataSeries <double, double> { SeriesName = "Veal" }; var dataSeries3 = new XyDataSeries <double, double> { SeriesName = "Tomato" }; var dataSeries4 = new XyDataSeries <double, double> { SeriesName = "Cucumber" }; var dataSeries5 = new XyDataSeries <double, double> { SeriesName = "Pepper" }; const int data = 1992; for (int i = 0; i < porkData.Length; i++) { dataSeries1.Append(data + i, porkData[i]); dataSeries2.Append(data + i, vealData[i]); dataSeries3.Append(data + i, tomatoesData[i]); dataSeries4.Append(data + i, cucumberData[i]); dataSeries5.Append(data + i, pepperData[i]); } using (SciChart.SuspendUpdates()) { SciChart.RenderableSeries[0].DataSeries = dataSeries1; SciChart.RenderableSeries[1].DataSeries = dataSeries2; SciChart.RenderableSeries[2].DataSeries = dataSeries3; SciChart.RenderableSeries[3].DataSeries = dataSeries4; SciChart.RenderableSeries[4].DataSeries = dataSeries5; } SciChart.ZoomExtents(); }
private void AddNewCandle(Candle candle, double?indicatorValue) { using (ohlcSeries.SuspendUpdates()) using (sarSeries.SuspendUpdates()) { ohlcSeries.Append(candle.Time, (double)candle.Open, (double)candle.High, (double)candle.Low, (double)candle.Close); if (indicatorValue != null) { sarSeries.Append(candle.Time, indicatorValue.Value); } candlesCount++; StockChart.XAxis.VisibleRange = new IndexRange(candlesCount - 50, candlesCount); } }
private void PointMarkersSelectionExampleView_OnLoaded(object sender, RoutedEventArgs e) { // Create a DataSeries of type X=double, Y=double var dataSeries1 = new XyDataSeries <double, double> { SeriesName = "Green" }; var dataSeries2 = new XyDataSeries <double, double> { SeriesName = "Blue" }; var dataSeries3 = new XyDataSeries <double, double> { SeriesName = "Yellow" }; // Attach DataSeries to RenderableSeries lineRenderSeries1.DataSeries = dataSeries1; lineRenderSeries2.DataSeries = dataSeries2; lineRenderSeries3.DataSeries = dataSeries3; // Generate data var count = 200; var data1 = DataManager.Instance.GetSinewave(100, 55, count); var data3 = DataManager.Instance.GetSinewave(50, 20, count); // Append data to series using (sciChart.SuspendUpdates()) { dataSeries1.Append(data1.XData, data1.YData, data1.XData.Select((d) => new MyMetadata { IsSelected = false })); dataSeries3.Append(data3.XData, data3.YData, data3.XData.Select((d) => new MyMetadata { IsSelected = false })); for (int i = 0; i < count; i += 4) { dataSeries2.Append(data1.XData[i], i++, new MyMetadata { IsSelected = false }); } } // Zoom out to the extents of data sciChart.ZoomExtents(); }
// Business logic /// <summary> /// Add data for a symbol to the chart /// </summary> /// <param name="quoteList">Retrieved quotes</param> /// <param name="seriesName">Name for the series (symbol + moving average length)</param> private void AddSeries(SortedList <DateTime, double> quoteList, string seriesName) { // Create a new data series var series = new XyDataSeries <DateTime, double>(); series.Append(quoteList.Keys, quoteList.Values); series.SeriesName = seriesName; stockChart.DataSet.Add(series); // Display the data via RenderableSeries var renderSeries = new FastMountainRenderableSeries(); stockChart.RenderableSeries.Add(renderSeries); stockChart.DataSet.InvalidateParentSurface(RangeMode.ZoomToFit); stockChart.ZoomExtents(); }
private void ShiftedAxes_OnLoaded(object sender, RoutedEventArgs e) { using (sciChart.SuspendUpdates()) { var dataSeries = new XyDataSeries <double, double> { AcceptsUnsortedData = true }; lineRenderSeries.DataSeries = dataSeries; var data = DataManager.Instance.GetButterflyCurve(20000); dataSeries.Append(data.XData, data.YData); } // To provide correct appearance of chart in Silverlight // we use Dispatcher to delay ZoomExtents call on chart Dispatcher.BeginInvoke(new Action(() => sciChart.ZoomExtents())); }
public XyDataSeries <double, double> GetRobotLidarPoints() { var dataSeries = new XyDataSeries <double, double>(); if (lidarMap == null) { return(dataSeries); } var listX = lidarMap.Select(e => e.X); var listY = lidarMap.Select(e => e.Y); //dataSeries.Clear(); dataSeries.AcceptsUnsortedData = true; dataSeries.Append(listX, listY); return(dataSeries); }
public RsiPaneViewModel(CreateMultiPaneStockChartsViewModel parentViewModel, PriceSeries prices) : base(parentViewModel) { var rsiSeries = new XyDataSeries <DateTime, double>() { SeriesName = "RSI" }; rsiSeries.Append(prices.TimeData, prices.Rsi(14)); ChartSeriesViewModels.Add(new LineRenderableSeriesViewModel { DataSeries = rsiSeries }); YAxisTextFormatting = "0.0"; Height = 100; }
protected override void InitExampleInternal() { Surface = new SCIChartSurface(_exampleViewLayout.SciChartSurfaceView); StyleHelper.SetSurfaceDefaultStyle(Surface); var priceData = DataManager.Instance.GetPriceDataIndu(); var dataSeries = new XyDataSeries <DateTime, double>(); dataSeries.DataDistributionCalculator = new SCIUserDefinedDistributionCalculator(); dataSeries.Append(priceData.TimeData, priceData.CloseData); var axisStyle = StyleHelper.GetDefaultAxisStyle(); var xAxis = new SCIDateTimeAxis { IsXAxis = true, GrowBy = new SCIDoubleRange(0.1, 0.1), Style = axisStyle, AxisId = "xAxis" }; var yAxis = new SCINumericAxis { GrowBy = new SCIDoubleRange(0.1, 0.1), Style = axisStyle, AxisId = "yAxis" }; var renderSeries = new SCIFastMountainRenderableSeries { DataSeries = dataSeries, XAxisId = xAxis.AxisId, YAxisId = yAxis.AxisId, Style = { AreaBrush = new SCIBrushLinearGradient(0xAAFF8D42, 0x88090E11, SCILinearGradientDirection.Vertical), BorderPen = new SCIPenSolid(0xaaffc9a8, 0.7f) } }; Surface.AttachAxis(xAxis, true); Surface.AttachAxis(yAxis, false); Surface.AttachRenderableSeries(renderSeries); Surface.ChartModifier = new SCIModifierGroup(new ISCIChartModifierProtocol[] { new SCIZoomPanModifier(), new SCIPinchZoomModifier(), new SCIZoomExtentsModifier() }); Surface.InvalidateElement(); }
protected override void InitExample() { var xAxis = new SCINumericAxis { GrowBy = new SCIDoubleRange(0.1, 0.1) }; var yAxis = new SCINumericAxis { GrowBy = new SCIDoubleRange(0.1, 0.1) }; var ds1Points = DataManager.Instance.GetDampedSinewave(1.0, 0.05, 50, 5); var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(ds1Points.XData, ds1Points.YData); var renderableSeries = new SCIFastImpulseRenderableSeries { DataSeries = dataSeries, StrokeStyle = new SCISolidPenStyle(0xFF0066FF, 2f), PointMarker = new SCIEllipsePointMarker { Width = 7, Height = 7, StrokeStyle = new SCISolidPenStyle(0xFF0066FF, 2f), FillStyle = new SCISolidBrushStyle(0xFF0066FF), } }; var animation = new SCIWaveRenderableSeriesAnimation(3, SCIAnimationCurve.EaseOut); animation.StartAfterDelay(0.3f); renderableSeries.AddAnimation(animation); using (Surface.SuspendUpdates()) { Surface.XAxes.Add(xAxis); Surface.YAxes.Add(yAxis); Surface.RenderableSeries.Add(renderableSeries); Surface.ChartModifiers = new SCIChartModifierCollection { new SCIZoomPanModifier(), new SCIPinchZoomModifier(), new SCIZoomExtentsModifier() }; } }
protected override void InitExample() { var xAxis = new NumericAxis(Activity); var yAxis = new NumericAxis(Activity); var yValues1 = new[] { 4.0, 7, 5.2, 9.4, 3.8, 5.1, 7.5, 12.4, 14.6, 8.1, 11.7, 14.4, 16.0, 3.7, 5.1, 6.4, 3.5, 2.5, 12.4, 16.4, 7.1, 8.0, 9.0 }; var yValues2 = new[] { 15.0, 10.1, 10.2, 10.4, 10.8, 1.1, 11.5, 3.4, 4.6, 0.1, 1.7, 14.4, 6.0, 13.7, 10.1, 8.4, 8.5, 12.5, 1.4, 0.4, 10.1, 5.0, 1.0 }; var ds1 = new XyDataSeries <double, double> { SeriesName = "data 1" }; var ds2 = new XyDataSeries <double, double> { SeriesName = "data 2" }; for (var i = 0; i < yValues1.Length; i++) { ds1.Append(i, yValues1[i]); } for (var i = 0; i < yValues2.Length; i++) { ds2.Append(i, yValues2[i]); } var series1 = GetRenderableSeries(ds1, Color.Argb(0xDD, 0xDB, 0xE0, 0xE1), Color.Argb(0x88, 0xB6, 0xC1, 0xC3)); var series2 = GetRenderableSeries(ds2, Color.Argb(0xDD, 0xDA, 0xCB, 0xCCA), Color.Argb(0x88, 0x43, 0x9A, 0xAF)); var seriesCollection = new VerticallyStackedMountainsCollection(); seriesCollection.Add(series1); seriesCollection.Add(series2); using (Surface.SuspendUpdates()) { Surface.XAxes.Add(xAxis); Surface.YAxes.Add(yAxis); Surface.RenderableSeries.Add(seriesCollection); Surface.ChartModifiers = new ChartModifierCollection { new CursorModifier(), new ZoomExtentsModifier(), }; } }
private void UpdateFFTDataSeries(XYDataSeries <int, int> dataSeries) { var xArray = new int[dataSeries.YValues.Length]; for (int i = 0; i < dataSeries.YValues.Length; i++) { xArray[i] = i; } if (fftDataSeries.Count == 0) { fftDataSeries.Append(xArray, dataSeries.YValues); } else { fftDataSeries.UpdateRangeYAt(0, dataSeries.YValues); } }
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { var scatterData = new XyDataSeries <double, double>(); var lineData = new XyDataSeries <double, double>(); // NEW CODE HERE // Ensure that DataSeries are named for the legend scatterData.SeriesName = "Cos(x)"; lineData.SeriesName = "Sin(x)"; // END NEW CODE for (int i = 0; i < 1000; i++) { lineData.Append(i, Math.Sin(i * 0.1)); scatterData.Append(i, Math.Cos(i * 0.1)); } LineSeries.DataSeries = lineData; ScatterSeries.DataSeries = scatterData; }
public RsiPaneModel(Context context, PriceSeries prices) : base(context, RSI, "0.0", false) { var rsiSeries = new XyDataSeries <DateTime, double> { SeriesName = "RSI" }; var xData = prices.TimeData; var yData = prices.Rsi(14); rsiSeries.Append(xData, yData); AddRenderableSeries(new FastLineRenderableSeries { DataSeries = rsiSeries, YAxisId = RSI }); Annotations.Add(new AxisMarkerAnnotation(context) { Y1 = (Java.Lang.IComparable)rsiSeries.YValues.Get(rsiSeries.Count - 1), YAxisId = RSI }); }
protected override void InitExample() { var xAxis = new SCINumericAxis(); var yAxis = new SCINumericAxis(); var yValues1 = new[] { 4.0, 7, 5.2, 9.4, 3.8, 5.1, 7.5, 12.4, 14.6, 8.1, 11.7, 14.4, 16.0, 3.7, 5.1, 6.4, 3.5, 2.5, 12.4, 16.4, 7.1, 8.0, 9.0 }; var yValues2 = new[] { 15.0, 10.1, 10.2, 10.4, 10.8, 1.1, 11.5, 3.4, 4.6, 0.1, 1.7, 14.4, 6.0, 13.7, 10.1, 8.4, 8.5, 12.5, 1.4, 0.4, 10.1, 5.0, 1.0 }; var ds1 = new XyDataSeries <double, double> { SeriesName = "data 1" }; var ds2 = new XyDataSeries <double, double> { SeriesName = "data 2" }; for (var i = 0; i < yValues1.Length; i++) { ds1.Append(i, yValues1[i]); } for (var i = 0; i < yValues2.Length; i++) { ds2.Append(i, yValues2[i]); } var series1 = GetRenderableSeries(ds1, 0xDDDBE0E1, 0x88B6C1C3); var series2 = GetRenderableSeries(ds2, 0xDDACBCCA, 0x88439AAF); var seriesCollection = new SCIVerticallyStackedMountainsCollection(); seriesCollection.Add(series1); seriesCollection.Add(series2); using (Surface.SuspendUpdates()) { Surface.XAxes.Add(xAxis); Surface.YAxes.Add(yAxis); Surface.RenderableSeries.Add(seriesCollection); Surface.ChartModifiers = new SCIChartModifierCollection { new SCICursorModifier(), new SCIZoomExtentsModifier() }; } }
protected override void InitExample() { var ds1Points = DataManager.Instance.GetDampedSinewave(1.0, 0.05, 50, 5); var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(ds1Points.XData, ds1Points.YData); var xAxis = new NumericAxis(Activity) { GrowBy = new DoubleRange(0.1, 0.1) }; var yAxis = new NumericAxis(Activity) { GrowBy = new DoubleRange(0.1, 0.1) }; var renderableSeries = new FastImpulseRenderableSeries { DataSeries = dataSeries, StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Rgb(0x00, 0x66, 0xFF)).WithThickness(1f, ComplexUnitType.Dip).Build(), PointMarker = new EllipsePointMarker { Width = 10, Height = 10, StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Rgb(0x00, 0x66, 0xFF)).WithThickness(0.7f, ComplexUnitType.Dip).Build(), FillStyle = new SolidBrushStyle(Color.Rgb(0x00, 0x66, 0xFF)) } }; using (Surface.SuspendUpdates()) { Surface.XAxes.Add(xAxis); Surface.YAxes.Add(yAxis); Surface.RenderableSeries.Add(renderableSeries); Surface.ChartModifiers = new ChartModifierCollection { new ZoomPanModifier(), new PinchZoomModifier(), new ZoomExtentsModifier() }; } }
private void OnLoaded(object sender, RoutedEventArgs e) { Task.Factory.StartNew(() => { // Creates 8 dataseries with data on a background thread var dataSeries = new List <IDataSeries>(); for (int i = 0; i < 8; i++) { var ds = new XyDataSeries <double, double>(); dataSeries.Add(ds); var someData = DataManager.Instance.GetAcousticChannel(i); ds.Append(someData.XData, someData.YData); } // Creates 8 renderable series on the UI thread Dispatcher.BeginInvoke(new Action(() => CreateRenderableSeries(dataSeries))); }); }
public EEGChannelViewModel(int size, Color color) { _size = size; Stroke = color; // Add an empty First In First Out series. When the data reaches capacity (int size) then old samples // will be pushed out of the series and new appended to the end. This gives the appearance of // a scrolling chart window ChannelDataSeries = new XyDataSeries <double, double>() { FifoCapacity = _size }; // Pre-fill with NaN up to size. This stops the stretching effect when Fifo series are filled with AutoRange for (int i = 0; i < _size; i++) { ChannelDataSeries.Append(i, double.NaN); } }
private void OnTick(object sender, ElapsedEventArgs e) { lock (_timer) { var y1 = 3.0 * Math.Sin(2 * Math.PI * 1.4 * _t) + _random.NextDouble() * 0.5; var y2 = 2.0 * Math.Cos(2 * Math.PI * 0.8 * _t) + _random.NextDouble() * 0.5; var y3 = 1.0 * Math.Sin(2 * Math.PI * 2.2 * _t) + _random.NextDouble() * 0.5; _ds1.Append(_t, y1); _ds2.Append(_t, y2); _ds3.Append(_t, y3); _t += OneOverTimeInteval; if (_t > VisibleRangeMax) { _xVisibleRange.SetMinMax(_xVisibleRange.Min + OneOverTimeInteval, _xVisibleRange.Max + OneOverTimeInteval); } } }
public RsiPaneModel(PriceSeries prices) : base(RSI, "%.1f", false) { var rsiSeries = new XyDataSeries <DateTime, double> { SeriesName = "RSI" }; var xData = prices.TimeData; var yData = prices.Rsi(14); rsiSeries.Append(xData, yData); AddRenderableSeries(new SCIFastLineRenderableSeries { DataSeries = rsiSeries, YAxisId = RSI, StrokeStyle = new SCISolidPenStyle(0xFFC6E6FF, 1f) }); Annotations.Add(new SCIAxisMarkerAnnotation { Position = rsiSeries.YValues.ValueAt(rsiSeries.Count - 1).ToComparable(), YAxisId = RSI }); }
public XyDataSeries <double, double> GetRobotLidarProcessedPoints() { var dataSeries = new XyDataSeries <double, double>(); if (lidarMap == null) { return(dataSeries); } var listX = lidarProcessedMap.Select(e => e.X); var listY = lidarProcessedMap.Select(e => e.Y); if (listX.Count() == listY.Count()) { dataSeries.AcceptsUnsortedData = true; dataSeries.Append(listX, listY); } return(dataSeries); }
/// <summary> /// Every X milliseconds we create a new DataSeries and append new data to it. /// Then, DataSeries are re-assigned to RenderableSeries. /// </summary> private void TimerOnElapsed(object sender, EventArgs e) { var newDataSeries = new XyDataSeries <double, double>(); // Create a noisy sinewave and cache // All this code is about the generation of data to create a nice randomized sinewave with // varying phase and amplitude var randomAmplitude = Constrain(_lastAmplitude + ((_random.NextDouble()) - 0.50) / 2, -2.0, 2.0); const double phase = 0.0; var noisySinewave = DataManager.Instance.GetNoisySinewave(randomAmplitude, phase, 1000, 0.25); _lastAmplitude = randomAmplitude; // Append to a new dataseries newDataSeries.Append(noisySinewave.XData, noisySinewave.YData); lineSeries.DataSeries = newDataSeries; }
private void InitializeRenderableSeries() { var renderableSeries = new LineRenderableSeriesViewModel { Stroke = Colors.Blue, StrokeThickness = 2, PointMarker = new EllipsePointMarker() }; var dataSeries = new XyDataSeries <double>(); for (int i = 0; i < 11; ++i) { dataSeries.Append(i, i - 3); } renderableSeries.DataSeries = dataSeries; RenderableSeries.Add(renderableSeries); }
public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); if (_timer == null) { _timer = NSTimer.CreateRepeatingScheduledTimer(0.01, (timer) => { _i++; _lineDataSeries.Append(_i, Math.Sin(_i * 0.1 + _phase)); _scatterDataSeries.Append(_i, Math.Cos(_i * 0.1 + _phase)); _phase += 0.01; _surface.ZoomExtents(); }); } }
private static ChartSeriesViewModel GenerateSeries(DateTime startDateTime, double koeff, string seriesName) { var dataSeries = new XyDataSeries <DateTime, double> { SeriesName = seriesName }; var dt2 = startDateTime; for (int i = 0; i < 10000; i++) { dataSeries.Append(dt2, Math.Sin(2 * Math.PI * i / 1000 + koeff)); dt2 += TimeSpan.FromMilliseconds(20); } var series = new FastLineRenderableSeries { DataSeries = dataSeries }; return(new Abt.Controls.SciChart.ChartSeriesViewModel(dataSeries, series)); }
protected override void InitExample() { using (Surface.SuspendUpdates()) { var dampedSinewave = DataManager.Instance.GetDampedSinewave(1.0, 0.02, 150, 5); var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(dampedSinewave.XData, dampedSinewave.YData); var xAxis = new NumericAxis(Activity) { GrowBy = new DoubleRange(0.1, 0.1) }; var yAxis = new NumericAxis(Activity) { GrowBy = new DoubleRange(0.1, 0.1) }; var renderableSeries = new XyScatterRenderableSeries { DataSeries = dataSeries, PointMarker = new EllipsePointMarker { StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(255, 176, 196, 222)).WithThickness(2, ComplexUnitType.Dip).Build(), FillStyle = new SolidBrushStyle(Color.Argb(255, 70, 130, 180)), Width = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 15, Activity.Resources.DisplayMetrics), Height = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 15, Activity.Resources.DisplayMetrics) } }; Surface.XAxes.Add(xAxis); Surface.YAxes.Add(yAxis); Surface.RenderableSeries.Add(renderableSeries); Surface.ChartModifiers = new ChartModifierCollection() { new ZoomPanModifier(), new PinchZoomModifier(), new ZoomExtentsModifier(), }; } }
public SeriesBindingViewModel() { var data = DataManager.Instance.GetSinewave(1.0, 0.5, PointsCount * 10, 5); var lineDataSeries = new XyDataSeries <double, double>(); lineDataSeries.Append(data.XData.Select(d => d * 5), data.YData); IEnumerable <BoxPoint> boxData = GetBoxPlotData().ToArray(); var boxDataSeries = new BoxPlotDataSeries <double, double>(); boxDataSeries.Append(boxData.Select(x => x.XValue), boxData.Select(x => x.Median), boxData.Select(x => x.Minimum), boxData.Select(x => x.LowerQuartile), boxData.Select(x => x.UpperQuartile), boxData.Select(x => x.Maximum)); EllipsePointMarker epm = new EllipsePointMarker { Width = 9, Height = 9, Fill = Colors.Transparent, Stroke = Colors.White, StrokeThickness = 2 }; RenderableSeriesViewModels = new ObservableCollection <IRenderableSeriesViewModel>() { new LineRenderableSeriesViewModel { DataSeries = lineDataSeries, StyleKey = "LineSeriesStyle" }, new XyScatterRenderableSeriesViewModel { DataSeries = lineDataSeries, PointMarker = epm }, new BoxPlotRenderableSeriesViewModel { DataSeries = boxDataSeries } }; }
/// <summary> /// To analyze. /// </summary> protected override void OnAnalyze() { var chart = Chart; var grid = Grid; var chartSeries = new XyDataSeries<double, double>(); ThreadSafeObservableCollection<GridRow> gridSeries = null; chart.GuiSync(() => { // clear prev values chart.RenderableSeries.Clear(); grid.Columns.Clear(); chart.RenderableSeries.Add(new FastColumnRenderableSeries { ResamplingMode = ResamplingMode.None, DataPointWidth = 1, SeriesColor = Colors.Chocolate, DataSeries = chartSeries }); chart.XAxis = new NumericAxis { AxisTitle = LocalizedStrings.Price }; chart.YAxis = new NumericAxis { AxisTitle = LocalizedStrings.Volume, GrowBy = new DoubleRange(0, 0.1) }; grid.AddTextColumn("Price", LocalizedStrings.Price).Width = 150; var volumeColumn = grid.AddTextColumn("Volume", LocalizedStrings.Volume); volumeColumn.Width = 100; var gridSource = new ObservableCollectionEx<GridRow>(); grid.ItemsSource = gridSource; gridSeries = new ThreadSafeObservableCollection<GridRow>(gridSource); grid.SetSort(volumeColumn, ListSortDirection.Descending); }); // get candle storage var storage = StorateRegistry.GetCandleStorage(typeof(TimeFrameCandle), Security, TimeFrame, format: StorageFormat); // get available dates for the specified period var dates = storage.GetDates(From, To).ToArray(); var rows = new Dictionary<decimal, GridRow>(); foreach (var loadDate in dates) { // check if stopped if (ProcessState != ProcessStates.Started) break; // load candles var candles = storage.Load(loadDate); // groupping candles by candle's middle price var groupedCandles = candles.GroupBy(c => c.LowPrice + c.GetLength() / 2); foreach (var group in groupedCandles.OrderBy(g => g.Key)) { // check if stopped if (ProcessState != ProcessStates.Started) break; var price = group.Key; // calc total volume for the specified time frame var sumVol = group.Sum(c => c.TotalVolume); var row = rows.TryGetValue(price); if (row == null) { // new price level rows.Add(price, row = new GridRow { Price = price, Volume = sumVol }); // draw on chart chartSeries.Append((double)price, (double)sumVol); // draw on table gridSeries.Add(row); } else { // update existing price level row.Volume += sumVol; // update chart chartSeries.Update((double)price, (double)row.Volume); } } chart.GuiAsync(() => { // update grid sorting grid.RefreshSort(); // scale chart chart.ZoomExtents(); }); } // notify the script stopped Stop(); }
public void AddLithologyObject(LithologyInfo lithology, ChartToShow chartToShow = null, IEnumerable<Chart> charts = null) { if (chartToShow == null) chartToShow = IoC.Kernel.Get<IGlobalDataModel>().MainViewModel.Charts.SingleOrDefault(u => u.ChartObject.ID == lithology.RefChart); if (chartToShow == null) return; var trackToShowObject = chartToShow.Tracks.SingleOrDefault(u => u.TrackObject.ID == lithology.RefTrack); if (trackToShowObject == null) return; if (trackToShowObject.TrackObject == null) throw new Exception("Track not found against track to show object while adding lithology"); //while loading project track object would already have lithologies in it, so we dont have to re-add it in the object if (!trackToShowObject.TrackObject.Lithologies.Any(u => u.ID == lithology.ID)) trackToShowObject.TrackObject.Lithologies.Add(lithology); FastLineRenderableSeries actualLithologySeries = null; //track to show object has renderable series for lithologies //get the proper renderable series and add an annotation to it if (!trackToShowObject.CurveRenderableSeries.Any(u => (u as FastLineRenderableSeries).Name == "Lithology")) { AddLithologyAxisInChart(trackToShowObject, charts); } var normalDataSeries = new XyDataSeries<double, double>(); var fullDataSeries = new XyDataSeries<double, double>(); var renderableSeries = trackToShowObject.CurveRenderableSeries.Where(u => u.GetType() == typeof(FastLineRenderableSeries)).Select(v => v as FastLineRenderableSeries); actualLithologySeries = renderableSeries.SingleOrDefault(u => u.Name == "Lithology" && u.XAxisId == "Lithology"); FastLineRenderableSeries normalLithologySeries = null; FastLineRenderableSeries fullLithologySeries = null; var subSeries = renderableSeries.Where(u => u.Tag != null && u.Tag.ToString() == lithology.LithologyName); if (!subSeries.Any()) { normalLithologySeries = GetNormalLithologySeries(normalDataSeries, lithology.LithologyName); fullLithologySeries = GetFullLithologySeries(fullDataSeries, lithology.LithologyName, trackToShowObject); trackToShowObject.CurveRenderableSeries.Add(normalLithologySeries); trackToShowObject.CurveRenderableSeries.Add(fullLithologySeries); ApplyBindingToNormalLithology(actualLithologySeries, normalLithologySeries); ApplyBindingToFullLithology(actualLithologySeries, fullLithologySeries); } else { foreach (var series in subSeries) { if (series.PointMarker.Width == 50) { normalLithologySeries = series; normalDataSeries = normalLithologySeries.DataSeries as XyDataSeries<double, double>; } else { fullLithologySeries = series; fullDataSeries = fullLithologySeries.DataSeries as XyDataSeries<double, double>; } } } var startingPoint = int.Parse(lithology.InitialDepth.ToString()); var endingPoint = int.Parse(lithology.FinalDepth.ToString()); for (decimal i = startingPoint; i <= endingPoint; i++) { normalDataSeries.Append(9.5, double.Parse(i.ToString())); fullDataSeries.Append(5, double.Parse(i.ToString())); } }
public ChartViewModel() { this.SetDefaults(); if (IsInDesignMode) { // Code runs in Blend --> create design time data. _marketDataService = new MarketDataService(new DateTime(2015, 08, 11), 1, 5000); } else { // Code runs "for real" _marketDataService = new MarketDataService(new DateTime(2015, 08, 11), 1, 1000); } var ds0 = new OhlcDataSeries<DateTime, double>(); _seriesViewModels.Add(new ChartSeriesViewModel(ds0, new FastOhlcRenderableSeries() { Name = "Series1", XAxisId = "dateTimeXAxis", YAxisId = "Y1" })); // Append 500 historical bars to data series var prices = _marketDataService.GetHistoricalData(500); ds0.Append( prices.Select(x => x.DateTime), prices.Select(x => x.Open), prices.Select(x => x.High), prices.Select(x => x.Low), prices.Select(x => x.Close)); //Create price/volume distribution double minPrice = prices.Select(x => x.Low).Min(); double maxPrice = prices.Select(x => x.High).Max(); int numBins = 5; double interval = (maxPrice - minPrice) / numBins; var bins = new Tuple<double, double>[numBins]; double binLower = minPrice; for (int i = 0; i < numBins; i++) { bins[i] = new Tuple<double, double>(binLower, binLower + interval); binLower += interval; } var dsVolByPrice = new XyDataSeries<double, double>(); _seriesViewModels.Add(new ChartSeriesViewModel(dsVolByPrice, new FastColumnRenderableSeries() { Name = "PriceByVol", XAxisId = "verticalXAxis", YAxisId = "Y2" })); var dblVolume = new List<double>(); for (int i = 0; i < numBins; i++) dblVolume.Add(10 - i); dsVolByPrice.Append(bins.Select(x => x.Item1), dblVolume); _marketDataService.SubscribePriceUpdate(OnNewPrice); _xVisibleRange = new IndexRange(0, 1000); SelectedChartType = ChartType.FastOhlc; //this.DeleteCommand = new RelayCommand(DeleteCommandExecuted); }
/// <summary> /// To analyze. /// </summary> protected override void OnAnalyze() { var chart = Chart; var grid = Grid; var chartSeries = new XyDataSeries<double, double>(); ThreadSafeObservableCollection<GridRow> gridSeries = null; chart.GuiSync(() => { // очищаем данные с предыдущего запуска скрипта chart.RenderableSeries.Clear(); grid.Columns.Clear(); chart.RenderableSeries.Add(new FastColumnRenderableSeries { ResamplingMode = ResamplingMode.None, DataPointWidth = 1, SeriesColor = Colors.Chocolate, DataSeries = chartSeries }); chart.XAxis = new NumericAxis { AxisTitle = LocalizedStrings.Price }; chart.YAxis = new NumericAxis { AxisTitle = LocalizedStrings.Volume, GrowBy = new DoubleRange(0, 0.1) }; grid.AddTextColumn("Price", LocalizedStrings.Price).Width = 150; var volumeColumn = grid.AddTextColumn("Volume", LocalizedStrings.Volume); volumeColumn.Width = 100; var gridSource = new ObservableCollectionEx<GridRow>(); grid.ItemsSource = gridSource; gridSeries = new ThreadSafeObservableCollection<GridRow>(gridSource); grid.SetSort(volumeColumn, ListSortDirection.Descending); }); // получаем хранилище свечек var storage = StorateRegistry.GetCandleStorage(typeof(TimeFrameCandle), Security, TimeFrame, format: StorageFormat); // получаем набор доступных дат за указанный период var dates = storage.GetDates(From, To).ToArray(); var rows = new Dictionary<decimal, GridRow>(); foreach (var loadDate in dates) { // проверяем флаг остановки if (ProcessState != ProcessStates.Started) break; // загружаем свечки var candles = storage.Load(loadDate); // группируем свечки по цене (середина свечи) var groupedCandles = candles.GroupBy(c => c.LowPrice + c.GetLength() / 2); foreach (var group in groupedCandles.OrderBy(g => g.Key)) { // проверяем флаг остановки if (ProcessState != ProcessStates.Started) break; var price = group.Key; // получаем суммарный объем в пределах ценового уровня за день var sumVol = group.Sum(c => c.TotalVolume); var row = rows.TryGetValue(price); if (row == null) { // пришел новый уровень - добавляем новую запись rows.Add(price, row = new GridRow { Price = price, Volume = sumVol }); // выводим на график chartSeries.Append((double)price, (double)sumVol); // выводит в таблицу gridSeries.Add(row); } else { // увеличиваем суммарный объем row.Volume += sumVol; // обновляем график chartSeries.Update((double)price, (double)row.Volume); } } chart.GuiAsync(() => { // обновление сортировки в таблице grid.RefreshSort(); // автомасштабирование графика chart.ZoomExtents(); }); } // оповещаем программу об окончании выполнения скрипта base.Stop(); }