private void MixedCharts_OnLoaded(object sender, RoutedEventArgs e) { var leftDataSeries0 = new XyDataSeries <double, double>(); var leftDataSeries1 = new XyDataSeries <double, double>(); var rightDataSeries0 = new XyDataSeries <DateTime, double>(); var rightDataSeries1 = new XyDataSeries <DateTime, double>(); var random = new FasterRandom(); for (int i = 0; i < 20; i++) { leftDataSeries0.Append(i, random.Next(10)); leftDataSeries1.Append(i, random.Next(10)); rightDataSeries0.Append(DateTime.Now.AddHours(i), random.Next(10)); rightDataSeries1.Append(DateTime.Now.AddHours(i), random.Next(10)); } sciChart.RenderableSeries[0].DataSeries = leftDataSeries0; sciChart.RenderableSeries[1].DataSeries = leftDataSeries1; sciChart.RenderableSeries[2].DataSeries = rightDataSeries0; sciChart.RenderableSeries[3].DataSeries = rightDataSeries1; sciChart.ZoomExtents(); }
//time\tprice\tvolume\tbidorask public HistogramBarDemoProjectViewModel() { _random = new FasterRandom(); _timerNewDataUpdate = new Timer(1); _timerNewDataUpdate.AutoReset = true; _timerNewDataUpdate.Elapsed += OnNewData; _viewportManager = new HistogramBarViewportManager(); _dataSeries0 = new OhlcDataSeries <DateTime, double>(); _dataSeries1 = new OhlcDataSeries <DateTime, double>(); _filterDataSeries = new XyDataSeries <DateTime, double>(); _movingAverage = new MovingAverage(5); YAutoRange = true; AlowToChangeVisibleRangeToMax = true; HorizontalBarSpacing = 5; HistogramBarMode = HistogramMode.MarketProfile; MaxHistoBarCandles = 40; TickSize = 0.5; LoadRandomData(30, 250); _viewportManager.ZoomExtents(); }
private void VerticalXAxis_OnLoaded(object sender, RoutedEventArgs e) { var leftDataSeries0 = new XyDataSeries <double, double>(); var leftDataSeries1 = new XyDataSeries <double, double>(); var rightDataSeries0 = new XyDataSeries <double, double>(); var rightDataSeries1 = new XyDataSeries <double, double>(); var random = new FasterRandom(); for (int i = 0; i < 20; i++) { leftDataSeries0.Append(i, random.Next(10)); leftDataSeries1.Append(i, random.Next(10)); rightDataSeries0.Append(i, random.Next(10)); rightDataSeries1.Append(i, random.Next(10)); } sciChartLeft.RenderableSeries[0].DataSeries = leftDataSeries0; sciChartLeft.RenderableSeries[1].DataSeries = leftDataSeries1; sciChartRight.RenderableSeries[0].DataSeries = rightDataSeries0; sciChartRight.RenderableSeries[1].DataSeries = rightDataSeries1; }
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { // Create our data in another thread to stop the UI from being stalled. // It's not appending to SciChart Dataseries that is the problem, its Calling Rand.Next() two million times which is pretty slow :) TimedMethod.Invoke(() => { var dataSeries = new XyDataSeries <double, double>() { AcceptsUnsortedData = true }; var rand = new FasterRandom(); // Allow 1M points in WPF/DirectX. In Silverlight or software rendering, 100k points is enough to stress the renderer int count = FeaturesHelper.Instance.SupportsHardwareAcceleration ? (int)1E6 : (int)1E5; // Append some data for (int i = 0; i < count; i++) { dataSeries.Append(rand.NextDouble(), rand.NextDouble()); } // Bind to scichart Action bindData = () => { BindData(dataSeries); }; Dispatcher.BeginInvoke(bindData); }).After(200).OnThread(TimedMethodThread.Background).Go(); }
public CreateAWaterfall3DChart() { InitializeComponent(); _random = new FasterRandom(); _transform = new FFT2(); Loaded += OnLoaded; }
public IList <double> GenerateYData(int pointCount) { var retval = new List <double>(); var random = new FasterRandom(); for (var index = 0; index < pointCount; index++) { retval.Add(random.Next(10)); } return(retval); }
private IDataSeries CreateSeries() { var rnd = new FasterRandom(); int w = 24, h = 7; var data = new double[h, w]; for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { data[y, x] = Math.Pow(rnd.NextDouble(), 0.15) * x / (w - 1) * y / (h - 1) * 100; } } return(new UniformHeatmapDataSeries <int, int, double>(data, 0, 1, 0, 1)); }
public ManipulateSeries3DMvvmViewModel() { _random = new FasterRandom(); _transform = new FFT2(); _columnSeries = new ColumnRenderableSeries3DViewModel { ColumnShape = typeof(CylinderPointMarker3D), DataPointWidthX = 0.5, Opacity = 1.0, DataSeries = GetColumnDataSeries() }; _impulseSeries = new ImpulseRenderableSeries3DViewModel { PointMarker = new EllipsePointMarker3D { Fill = Colors.White, Size = 4, Opacity = 1 }, Opacity = 1.0, DataSeries = GetImpulseDataSeries() }; _pointLineSeries = new PointLineRenderableSeries3DViewModel { IsAntialiased = true, PointMarker = new EllipsePointMarker3D { Fill = Colors.LimeGreen, Size = 2.0f, Opacity = 1 }, DataSeries = GetPointLineDataSeries() }; _surfaceMeshSeries = new SurfaceMeshRenderableSeries3DViewModel { StyleKey = "SurfaceMeshStyle", DrawMeshAs = DrawMeshAs.SolidWireFrame, StrokeThickness = 2, DrawSkirt = false, Opacity = 1, DataSeries = GetSurfaceMeshDataSeries() }; _waterfallSeries = new WaterfallRenderableSeries3DViewModel { StyleKey = "WaterfallStyle", Stroke = Colors.Blue, Opacity = 0.8, StrokeThickness = 1, SliceThickness = 0, DataSeries = GetWaterfallDataSeries() }; _scatterSeries = new ScatterRenderableSeries3DViewModel { PointMarker = new EllipsePointMarker3D { Fill = Colors.LimeGreen, Size = 2.0f, Opacity = 1 }, DataSeries = GetScatterDataSeries() }; _mountainSeries = new MountainRenderableSeries3DViewModel { DataSeries = GetColumnDataSeries() }; RenderableSeries = new ObservableCollection <IRenderableSeries3DViewModel>(); SeriesTypes = new ObservableCollection <string> { "Column Series", "Impulse Series", "Mountain Series", "PointLine Series", "SurfaceMesh Series", // "Waterfall Series", "Scatter Series" }; RenderableSeries.Add(_waterfallSeries); }
public ScatterSeriesTernaryChartExampleView() { InitializeComponent(); _random = new FasterRandom(); // scatters series var scatterDataSeries1 = new XyzDataSeries <double> { AcceptsUnsortedData = true, SeriesName = "Substance A" }; var scatterDataSeries2 = new XyzDataSeries <double> { AcceptsUnsortedData = true, SeriesName = "Substance B" }; var scatterDataSeries3 = new XyzDataSeries <double> { AcceptsUnsortedData = true, SeriesName = "Substance C" }; // Air series for (int i = 0; i < 75; i++) { var x = _random.Next(0, 50); var z = _random.Next(20, 40); var y = 100 - (x + z); scatterDataSeries1.Append(x, y, z); } // Earth series for (int i = 0; i < 75; i++) { var x = _random.Next(0, 40); var z = _random.Next(0, 20); var y = 100 - (x + z); scatterDataSeries2.Append(x, y, z); } // Fire series for (int i = 0; i < 75; i++) { var x = _random.Next(20, 40); var y = _random.Next(0, 25); var z = 100 - (x + y); scatterDataSeries3.Append(x, y, z); } scatterSeries1.DataSeries = scatterDataSeries1; scatterSeries2.DataSeries = scatterDataSeries2; scatterSeries3.DataSeries = scatterDataSeries3; }
private void FillSeries(HlcDataSeries <double, double> hlcDataSeries, DoubleSeries sourceData, double scale) { var xData = sourceData.XData; var yData = sourceData.YData.Select(x => x * scale).ToArray(); // Generate some random error data. Errors must be absolute values, // e.g. if a series has a Y-value of 5.0, and YError of =/-10% then you must enter YErrorHigh=5.5, YErrorLow=4.5 into the HlcDataSeries var random = new FasterRandom(); var yErrorHigh = yData.Select(y => y + random.NextDouble() * 0.2); var yErrorLow = yData.Select(y => y - random.NextDouble() * 0.2); // HlcDataSeries requires X, Y, High, Low. // For Error bars the High, Low becomes the High Low error, // while X,Y is the location of the error hlcDataSeries.Append(xData, yData, yErrorHigh, yErrorLow); }
private IEnumerable <BoxPoint> GetBoxPlotData() { var dates = Enumerable.Range(0, PointsCount).Select(i => i).ToArray(); var medianValues = new RandomWalkGenerator().GetRandomWalkSeries(PointsCount).YData; var random = new FasterRandom(); for (int i = 0; i < PointsCount; i++) { double med = medianValues[i]; double min = med - random.NextDouble(); double max = med + random.NextDouble(); double lower = (med - min) * random.NextDouble() + min; double upper = (max - med) * random.NextDouble() + med; yield return(new BoxPoint(dates[i], min, lower, med, upper, max)); } }
private static void OnDataSeriesDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var sciChartSurface = d as SciChartSurface; if (sciChartSurface == null) { return; } if (e.NewValue == null) { sciChartSurface.RenderableSeries.Clear(); return; } using (sciChartSurface.SuspendUpdates()) { sciChartSurface.RenderableSeries.Clear(); var random = new FasterRandom(); var itr = (IEnumerable <IDataSeries>)e.NewValue; var renderSeries = new List <IRenderableSeries>(); foreach (var dataSeries in itr) { if (dataSeries == null) { continue; } var rgb = new byte[3]; random.NextBytes(rgb); var renderableSeries = new FastLineRenderableSeries() { AntiAliasing = false, Stroke = Color.FromArgb(255, rgb[0], rgb[1], rgb[2]), DataSeries = dataSeries, }; renderSeries.Add(renderableSeries); } sciChartSurface.RenderableSeries = new ObservableCollection <IRenderableSeries>(renderSeries); } }
private void Initialize() { RenderableSeriesViewModels = new ObservableCollection <IRenderableSeriesViewModel>(); var random = new FasterRandom(); var generator = new RandomWalkGenerator(); for (int i = 0; i < SeriesCount; i++) { var dataSeries = new XyDataSeries <double, double>(); var someData = generator.GetRandomWalkSeries(PointCount); generator.Reset(); dataSeries.Append(someData.XData, someData.YData); var rgb = new byte[3]; random.NextBytes(rgb); RenderableSeriesViewModels.Add(new LineRenderableSeriesViewModel { DataSeries = dataSeries, AntiAliasing = false, Stroke = Color.FromArgb(255, rgb[0], rgb[1], rgb[2]), }); } }
public RandomWalkGenerator(double bias = 0.01) { _bias = bias; _random = new FasterRandom(); }
public TenorCurves3DChart() { InitializeComponent(); _random = new FasterRandom(); int xSize = 25; int zSize = 25; var meshDataSeries = new UniformGridDataSeries3D <double, double, DateTime>(xSize, zSize); var lineDataSeries = new XyDataSeries <double>(); var mountainDataSeries = new XyDataSeries <double, double>(); meshDataSeries.StartZ = new DateTime(2010, 1, 1); meshDataSeries.StepZ = new TimeSpan(1, 0, 0, 0).ToDateTime(); double step; for (int x = 0; x < xSize; x++) { switch (x) { case 5: case 10: step = 0.309; break; case 4: case 9: step = 0.303; break; case 6: case 11: step = 0.303; break; case 23: step = 0.291; break; case 22: step = 0.294; break; case 24: step = 0.295; break; default: step = 0.3; break; } for (int z = 0; z < zSize; z++) { var y = (z != 0) ? Math.Pow((double)z + _random.NextDouble(), step) : Math.Pow((double)z + 1, 0.3); meshDataSeries[z, x] = y; } } double average; for (int x = 0; x < xSize; x++) { average = 0; for (int z = 0; z < zSize; z++) { average += meshDataSeries[x, z]; } var y = average / 25; lineDataSeries.Append(x, y); mountainDataSeries.Append(x, meshDataSeries[12, x]); } mountainRenderSeries.DataSeries = mountainDataSeries; LineRenderableSeries.DataSeries = lineDataSeries; surfaceMeshRenderableSeries.Maximum = (double)meshDataSeries.YRange.Max; surfaceMeshRenderableSeries.Minimum = (double)meshDataSeries.YRange.Min; surfaceMeshRenderableSeries.DataSeries = meshDataSeries; }
private void AddSeriesButton_OnClick(object sender, RoutedEventArgs e) { if (sciChart.RenderableSeries.Count >= MaxSeriesAmount) { return; } var renderSerias = new ScatterRenderableSeries3D(); var xyzDataSeries3D = new XyzDataSeries3D <double>() { SeriesName = "Series " + ++_currentSeries }; int dataPointsCount = 15; var random = new Random(0); for (int i = 0; i < dataPointsCount; i++) { double x = DataManager.Instance.GetGaussianRandomNumber(5, 1.5); double y = DataManager.Instance.GetGaussianRandomNumber(5, 1.5); double z = DataManager.Instance.GetGaussianRandomNumber(5, 1.5); // Scale is a multiplier used to increase/decrease ScatterRenderableSeries3D.ScatterPointSize float scale = (float)((random.NextDouble() + 0.5) * 3.0); // Color is applied to PointMetadata3D and overrides the default ScatterRenderableSeries.Stroke property Color?randomColor = Color.FromArgb(0xFF, (byte)random.Next(50, 255), (byte)random.Next(50, 255), (byte)random.Next(50, 255)); // To declare scale and colour, add a VertextData class as the w (fourth) parameter. // The PointMetadata3D class also has other properties defining the behaviour of the XYZ point xyzDataSeries3D.Append(x, y, z, new PointMetadata3D(randomColor, scale)); } var randomPicker = new FasterRandom(); int randValue = randomPicker.Next(0, 6); switch (randValue) { case 0: renderSerias.PointMarker = new CubePointMarker3D(); break; case 1: renderSerias.PointMarker = new EllipsePointMarker3D(); break; case 2: renderSerias.PointMarker = new PyramidPointMarker3D(); break; case 3: renderSerias.PointMarker = new QuadPointMarker3D(); break; case 4: renderSerias.PointMarker = new SpherePointMarker3D(); break; case 5: renderSerias.PointMarker = new TrianglePointMarker3D(); break; } renderSerias.DataSeries = xyzDataSeries3D; sciChart.RenderableSeries.Add(renderSerias); var index = sciChart.RenderableSeries.IndexOf(renderSerias); xyzDataSeries3D.SeriesName = String.Format("Series #{0}", index); OnPropertyChanged("CanAddSeries"); OnPropertyChanged("CanRemoveSeries"); sciChart.ZoomExtents(); }
private void UsePointMarkers_OnLoaded(object sender, RoutedEventArgs e) { var dataSeries1 = new XyDataSeries <double, double>() { SeriesName = "Ellipse Marker" }; var dataSeries2 = new XyDataSeries <double, double>() { SeriesName = "Square Marker" }; var dataSeries3 = new XyDataSeries <double, double>() { SeriesName = "Triangle Marker" }; var dataSeries4 = new XyDataSeries <double, double>() { SeriesName = "Cross Marker" }; var dataSeries5 = new XyDataSeries <double, double>() { SeriesName = "Sprite Marker" }; const int dataSize = 30; var rnd = new FasterRandom(); for (int i = 0; i < dataSize; i++) { dataSeries1.Append(i, rnd.NextDouble()); } for (int i = 0; i < dataSize; i++) { dataSeries2.Append(i, 1 + rnd.NextDouble()); } for (int i = 0; i < dataSize; i++) { dataSeries3.Append(i, 1.8 + rnd.NextDouble()); } for (int i = 0; i < dataSize; i++) { dataSeries4.Append(i, 2.5 + rnd.NextDouble()); } for (int i = 0; i < dataSize; i++) { dataSeries5.Append(i, 3.5 + rnd.NextDouble()); } // insert a break into the line - we do this to test double.NaN for the point marker types dataSeries1.Update(dataSeries1.XValues[15], double.NaN); dataSeries2.Update(dataSeries1.XValues[15], double.NaN); dataSeries3.Update(dataSeries1.XValues[15], double.NaN); dataSeries4.Update(dataSeries1.XValues[15], double.NaN); dataSeries5.Update(dataSeries1.XValues[15], double.NaN); using (this.sciChart.SuspendUpdates()) { this.lineSeries1.DataSeries = dataSeries1; this.lineSeries2.DataSeries = dataSeries2; this.lineSeries3.DataSeries = dataSeries3; this.lineSeries4.DataSeries = dataSeries4; this.lineSeries5.DataSeries = dataSeries5; } this.sciChart.ZoomExtents(); }
public ErrorBarSeriesTernaryChartExampleView() { InitializeComponent(); _random = new FasterRandom(); cursorModButton.IsChecked = false; tooltipModButton.IsChecked = false; // scatters series var scatterDataSeries1 = new XyzDataSeries <double> { AcceptsUnsortedData = true, SeriesName = "Residue" }; var scatterDataSeries2 = new XyzDataSeries <double> { AcceptsUnsortedData = true, SeriesName = "Dolomite" }; var scatterDataSeries3 = new XyzDataSeries <double> { AcceptsUnsortedData = true, SeriesName = "Calcite" }; // Residue series for (int i = 0; i < 25; i++) { var x = _random.Next(0, 40); var z = _random.Next(40, 60); var y = 100 - (x + z); scatterDataSeries1.Append(x, y, z); } // Dolomite series for (int i = 0; i < 25; i++) { var x = _random.Next(0, 40); var z = _random.Next(10, 30); var y = 100 - (x + z); scatterDataSeries2.Append(x, y, z); } // Calcite series for (int i = 0; i < 25; i++) { var z = _random.Next(70, 90); var x = _random.Next(0, 100 - z); var y = 100 - (x + z); scatterDataSeries3.Append(x, y, z); } scatterSeries1.DataSeries = scatterDataSeries1; scatterSeries2.DataSeries = scatterDataSeries2; scatterSeries3.DataSeries = scatterDataSeries3; // errorbars series var errorBarDataSeries1 = (XyzDataSeries <double, double, double>)scatterDataSeries1.Clone(); var errorBarDataSeries2 = (XyzDataSeries <double, double, double>)scatterDataSeries2.Clone(); var errorBarDataSeries3 = (XyzDataSeries <double, double, double>)scatterDataSeries3.Clone(); errorBarDataSeries1.SeriesName = "ResidueError"; errorBarDataSeries2.SeriesName = "DolomiteError"; errorBarDataSeries3.SeriesName = "CalciteError"; // EllipseError series errorBarsSeries1.DataSeries = errorBarDataSeries1; // TriangleError series errorBarsSeries2.DataSeries = errorBarDataSeries2; // SquareError series errorBarsSeries3.DataSeries = errorBarDataSeries3; }
public RandomWalkGenerator(int seed) { _random = new FasterRandom(seed); }