SciChart® the market leader in Fast WPF Charts, WPF 3D Charts, and iOS Chart & Android Chart Components

0 votes
0 answers
13 views

this is crash log just scroll left kline . please tell me how to deal with . (lldb) bt

thread

1 , queue = ‘com.apple.main-thread’, stop reason = EXCBADACCESS (code=1, address=0x0) frame

0 : 0x000000011290beb0 SciChart-[p_SCI_29RJjaaEk0 prs_rB:A:B:D:] + 772 frame 1: 0x000000011290b9f8 SciChart-[pSCI29RJjaaEk0 oexecuteMode:XColumn:YColumn:PointRange:VisibleRange:ViewPortWidth:LastPointSeries:isCategory:] + 684 frame

2 : 0x0000000112962c24 SciChart-[SCIXyDataSeries toPointSeriesWithResamplingMode:SCIIndexRange:ViewportWidth:IsCategoryAxis:VisibleRange:Resampler:] + 332 frame 3: 0x0000000112924420 SciChart+[pSCI29ASj923jdOIJIO29 scrrSWXA52f:A:B:C:D:E:F:] + 792 frame

4 : 0x0000000112923f48 SciChart-[p_SCI_29ASj923jdOIJIO29 scr_prDws:A:] + 1160 frame 5: 0x0000000112922b34 SciChart-[pSCI29ASj923jdOIJIO29 scrrL32e23:] + 212 frame

6 : 0x00000001128c5680 SciChart-[SCIChartSurface onRenderSurfaceDraw] + 220 frame 7: 0x000000011293e39c SciChart-[SCIRenderSurfaceBase onRenderTimeElapsed] + 240 frame

8 : 0x0000000112951240 SciChart-[SCIOpenGLRenderSurface onRenderTimeElapsed] + 192 frame 9: 0x0000000114964254 GPUToolsCore-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 176 frame

10 : 0x0000000187453710 QuartzCoreCA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 672 frame 11: 0x0000000187507c5c QuartzCoredisplaytimercallback(CFMachPort, void, long, void*) + 240 frame

12 : 0x00000001834b4290 CoreFoundation__CFMachPortPerform + 188 frame 13: 0x00000001834cf000 CoreFoundationCFRUNLOOPISCALLINGOUTTOASOURCE1PERFORMFUNCTION_ + 56 frame

14 : 0x00000001834ce704 CoreFoundation__CFRunLoopDoSource1 + 440 frame 15: 0x00000001834cc1d8 CoreFoundation__CFRunLoopRun + 2196 frame

16 : 0x00000001833ebe58 CoreFoundationCFRunLoopRunSpecific + 436 frame 17: 0x0000000185298f84 GraphicsServicesGSEventRunModal + 100 frame

18 : 0x000000018ca6b67c UIKit`UIApplicationMain + 236

frame

19 : 0x00000001034ce07c FXChatmain at AppDelegate.swift:15:20 frame 20: 0x0000000182f0856c libdyld.dylibstart + 4

0 votes
0 answers
18 views

When I yAxis.setVisibleRange(0.d,10.d) then add a series, it triggers AutoRange to resize the graph.

If the VisibleRange is ANYTHING other than 0,10 (even 0,10.001) then it doesn’t resize the graph.

during my search, I found that setting Axis.AutoRange to .NEVER will stop the issue from happening.

https://support.scichart.com/index.php?/Knowledgebase/Article/View/17203/31

I still wanted to post this here because this is a notable bug that others will come across, and I wanted to show what solution I found.

0 votes
0 answers
16 views

I want to hide the axis and the place occupied by the axis on xammarin.iOS, i’am using below code to do the same, the problem here is it does hide the axis but it is not removing the place occupied by axis,

Axis.IsVisible = false;

is it the right way to hide the axis and remove the place occupied by it, or am I missing something here.

0 votes
0 answers
18 views

Currently, we are creating something like Point Cloud which is updated in real time in the project (40ms cycle) using 3D ScatterSeries.
However, in Dataseries, trying to set the color of individual pointers using PointMetadata3D’s VertexColor is too slow.
If we update only the coordinates without changing the color, we get the speed we want. I do not understand that changing the color value will seriously slow the process.
I want to know if there is a way to handle this phenomenon quickly.

0 votes
0 answers
24 views

Hi.
I’m in process optimizing my app.
I’m using Objective-c.

I’d found some memory leaking issues and successfully fixed some of that.

A first issue was about ‘renderableSeries’ under ‘SCIChartSurfaceView’.
If you set class of UIView as ‘SCIChartSurfaceView’ in interface builder and make outlet without setting ‘strong’ or ‘weak’ in .m file,
It never get released automatically and will stay retained on memory.
For me, it caused about 90MB of memory leaking.
But I could solve this issue manually by putting -(void)clear; method of renderableSeries in viewWillDisappear method.

Another issue is about ‘SCIDateTimeDeltaCalculator’ and ‘SCINumericDeltaCalculator’.
It causes about 50MB of memory leaking.
But problem is, I couldn’t find neither where it’s been called nor how I release this manually.

I will be waiting for your answer.

Thanks.

+)
(lldb) po SciChartVersionNumber
0x3ff0000000000000

(lldb) po SciChartVersionString
0x474f525029232840

I wanted to know what version I’m using.. but i couldn’t know… what version am i using..?

0 votes
0 answers
37 views

I try to use scichart for monitor two unrelated signal in one FastLineRenderableSeries,but it renders slow when points length increase,in demo and document,the XyDataSeries is an X ordered sequence to guarantee render fps,but my XyDataSeries is an unordered sequence,
do there any suggestion for this situation?

  • zj w asked 4 days ago
0 votes
0 answers
19 views

We have lots of Point Markers in our series that overlap, so we’re trying to find a way to Cluster them in Android and iOS. I can see that there is an SCIPointMarkerClusterizer. Can you give us some pointers on how we can achieve point marker clustering and/or spacing?

0 votes
11 views

How to set the background, font color and font size of the text label on the map;

Source as this:

PenStyle penStyle = new SolidPenStyle(getColor(R.color.baselineColor), false, 1, new float[]{7, 3, 3});
for (int i = 0; i < baseValues.size(); i++) {
baseLines.add(sciChartBuilder.newHorizontalLineAnnotation()
.withY1(baseValues.get(i))
.withStroke(penStyle)
.withAnnotationLabel()
.withHorizontalGravity(Gravity.FILL_HORIZONTAL)
.build());
}

0 votes
29 views

I have implemented a user control with a SciChartSurface as well as a SciChartLegend for time signals and an other user control with SciChartSurface for spectral bins (for reusability purpose). In another user control, I use these two user controls together and want to synchronize the Y-axis sizes on the left. In this use case the VerticalChartGroup has no effect. How can I synchronize the Y-axis sizes?

  • Tobias asked 4 days ago
  • last active 4 days ago
0 votes
43 views

I want to display a line series chart with 3500 series. But the application hangs 20-30 seconds because SciChart is doing something in the UI thread. I’ve read your article “https://www.scichart.com/performance-improvements-scichart-wpf-v5-1/” and set the extension property s:PerformanceHelper.EnableExtremeDrawingManager=”True” and s:PerformanceHelper.EnableExtremeResamplers=”True”. But there is no improvement!
You can reproduce this issue using your example “WaterfallChartDemo” and increase the series count from 50 to 3500.

Why s:PerformanceHelper.EnableExtremeDrawingManager=”True” and s:PerformanceHelper.EnableExtremeResamplers=”True” has no effect?

  • Tobias asked 4 days ago
  • last active 3 days ago
0 votes
26 views

One of our SciChart licenses in the past was used by an employee who is no longer with the company, so we are not able to have that employee deactivate his license using the Licensing Wizard on his old machine anymore. Is there a way to free this license up so it can be transferred to another employee when work resumes on the project?

Thanks!

0 votes
0 answers
41 views

Hello,

I am creating a chart which should add a series with its respective X and Y axes on a button click.

I am adding axes as follows:

private void AddYAxis(List<double> yValues)
    {
        var yAxis = new NumericAxis()
        {
            AxisAlignment = AxisAlignment.Left,
            AxisTitle = "Number of Samples (per Series)",
            Id = "first"
        };
        sciChart.YAxes.Add(yAxis);
    }

private void AddXAxis(List<DateTime> xValues)
    {
        var xAxis = new DateTimeAxis()
        {
            TextFormatting = "YYYY-MM-DD HH:mm:ss",
            AxisAlignment = AxisAlignment.Bottom,
            AxisTitle = "Bottom Axis",
            Id = "first"
        };
        sciChart.XAxes.Add(xAxis);
    }

Then, I am adding the renderable series:

 private void AddSeriesClick(List<DateTime> xValues, List<double> yValues)
    {
        var dataSeries = new XyDataSeries<DateTime, double>();
        dataSeries.Append(xValues, yValues);

        var renderSeries = new FastLineRenderableSeries
        {
            Stroke = Color.FromArgb(0xFF, 0x40, 0x83, 0xB7),
            DataSeries = dataSeries,
            StrokeThickness = 2,
        };
        renderSeries.XAxis = sciChart.XAxes.GetAxisById("first");
        renderSeries.YAxis = sciChart.YAxes.GetAxisById("first");
        sciChart.RenderableSeries.Add(renderSeries);
        sciChart.ZoomExtents();
    }

But, I am only able to see the Axis titles and nothing else is rendered in the chart.

Following exception is thrown:

SciChartSurface didn’t render, because an exception was thrown:
Message: AxisCollection.GetAxisById(‘DefaultAxisId’) returned no axis with ID=DefaultAxisId. Please check you have added an axis with this Id to the AxisCollection

Stack Trace: at SciChart.Charting.Model.AxisCollection.GetAxisById(String axisId, Boolean assertAxisExists)
at A.IJ.DB(AxisCollection D, IRenderableSeries I, RenderPassInfo J, IPointResamplerFactory M, IDataSeries& O, IndexRange& S, IPointSeries& T, Int32& AB)
at A.IJ.S(ISciChartSurface D, Size I)
at A.IJ.RenderLoop(IRenderContext2D renderContext)
at SciChart.Charting.Visuals.SciChartSurface.DoDrawingLoop()

The program ‘[17304] SciChart_MultipleXAxis.exe’ has exited with code 0 (0x0).

Can you kindly look into it.

0 votes
0 answers
39 views

Hi,

I am creating a live chart chromatogram with x-axis as time and y-axis as frequency.

Also, I need to show a chart with the last 5 min of data on the y-axis. for that purpose, we have used “FIFOCapacity” property of DataSeries which hold data for last 5 min which is work perfectly, because there is only single value of y with repect to time.

eg,
x=>1 2 3 4 5 6
y=>3 5 6 3 3 2

With FIFOcapacity=5 in the above example when 6 come to collection 1 is get removed which is expected

FIFO chart is not working when multiple y value is present for a single x value.

eg,
x=>1 2 2 2 3 3 3 4 5 6
y=>3 5 6 3 3 2 5 5 6 1

With FIFOcapacity=5 in the above example when x value 3 come into the collection 1 is get removed from the collection which not expected. (only when 6 (x value) get into collection then 1 get removed is expected)

Could please suggest me any solution if available. Please let me know if there is any information required.

Note: basically I need FIFOCapacity with condition check attributes. I need to clear collection if there is no need of that values because the collection can contain any number of values.

0 votes
0 answers
21 views

Hello,

I am using SCI line chart for Android and iOS. How I can I add Multiple scales on the same graph for different lines?

Please do the needful.

0 votes
28 views

Dear SciChart Team:

Undo and redo functions are incorrect in my application. It didn’t go back to the previous step. My original curve is shown in the attached figure in Figure 1, then I use zoom in to display part of the curve as shown in Figure 2. After that, use undo to return to the previous step from the partial curve(Figure 3). The final result is shown in Figure 4, which is obviously different from Figure 1.

I call “SciChartSurface.ZoomHistoryManager.Undo()” to achieve this function. After execution, the position of the angle of view and the scale of the canvas are not correct. How do I get back to the previous step correctly?

I have two other questions I would like to ask:
1. How do I get the current range of perspective(max/min of X axis and max/min of Y axis) after many drags and zooms?
2. How do I make the scale of the X axis equal to the scale of the Y axis and zoom in/out it at the same scale?

0 votes
26 views

I want to remove the place occupied by the axis when the axis is invisible. currently when the axis is invisible it hides the axis, but the place occupied by the axis remains there. It should work as android visibility set to Gone.

0 votes
0 answers
50 views

I want a transparent background of SCI Chart so that view below the chart are visible. I have tried various solutions but it is still turning out to be black. Below is my code for the same. Can anyone please help me out ? I am setting SCIChartSurface backgroundColor property to achieve it but it doesnt seem to work.

func initColumnChart() {

    let xAxis = SCINumericAxis()
    let yAxis = SCINumericAxis()
    //self.surface.xAxes.add(xAxis)
    //self.surface.yAxes.add(yAxis)
    self.surface.backgroundColor = UIColor.clear
    self.surface.isOpaque = false
    self.surface.renderableSeriesAreaFill = SCISolidBrushStyle(color: UIColor.clear)
    self.surface.renderableSeriesAreaBorder = SCISolidPenStyle(color: UIColor.clear, withThickness: 0)


    let xAxisGridBandBrush = SCISolidBrushStyle(color: UIColor.clear)
    xAxis.style.gridBandBrush = xAxisGridBandBrush

    xAxis.visibleRange = SCIDoubleRange(min: SCIGeneric(-0.6), max: SCIGeneric(8.0))
    xAxis.style.majorTickBrush = SCISolidPenStyle(color: UIColor.white, withThickness: 1)
    xAxis.style.majorTickSize = 5
    xAxis.autoTicks = false
    xAxis.majorDelta = SCIGeneric(1.0)
    xAxis.minorDelta = SCIGeneric(1.0)
    xAxis.labelProvider = UsageXLabelProvider()
    xAxis.style.labelStyle.color = UIColor.white
    xAxis.style.labelStyle.fontName = "Helvetica"
    xAxis.style.labelStyle.fontSize = 14
    xAxis.style.drawLabels = true
    xAxis.style.drawMajorGridLines = false
    xAxis.style.drawMinorGridLines = false
    xAxis.style.drawMajorTicks = true
    xAxis.style.drawMinorTicks = false
    xAxis.tickProvider = YAxisTickProvider(minorTicks: [], majorTicks: [0,1,2,3,4,5,6])



    let yAxisGridBandBrush = SCISolidBrushStyle(color: UIColor.clear)
    yAxis.style.gridBandBrush = yAxisGridBandBrush

    yAxis.style.labelStyle.color = UIColor.white
    yAxis.style.labelStyle.fontName = "Helvetica"
    yAxis.style.labelStyle.fontSize = 14
    yAxis.style.drawLabels = true
    yAxis.visibleRange = SCIDoubleRange(min: SCIGeneric(-1.0), max: SCIGeneric(65))
    yAxis.autoTicks = false
    yAxis.majorDelta = SCIGeneric(1.0)
    yAxis.minorDelta = SCIGeneric(0.2)
    yAxis.style.majorGridLineBrush = SCISolidPenStyle(color: UIColor.white, withThickness: 0.5, andStrokeDash: [5.0,6.0])
    // Style the Minor Gridlines on the YAxis (vertical lines)
    yAxis.style.minorGridLineBrush = SCISolidPenStyle(color: UIColor.white, withThickness: 0.5, andStrokeDash: [5.0, 6.0])
    yAxis.style.drawMajorGridLines = true
    yAxis.style.drawMinorGridLines = true
    yAxis.style.drawMajorTicks = false
    yAxis.style.drawMinorTicks = false
    yAxis.axisAlignment = .left
    //yAxis.labelProvider = DailyFlowrateLabelProvider()
    yAxis.tickProvider = YAxisTickProvider(minorTicks: [0,8,16,24,31,40,48,56], majorTicks: [0,31,62])

    let dataSeries = SCIXyDataSeries(xType: .float, yType: .float)
    dataSeries.appendRangeX([0,1,2,3,4,5,6], y: [52,40,15,48,25,36,20])

    let rSeries = SCIFastColumnRenderableSeries()
    rSeries.dataSeries = dataSeries
    rSeries.paletteProvider = BarsColorPalette()

    SCIUpdateSuspender.usingWithSuspendable(surface) {
        self.surface.xAxes.add(xAxis)
        self.surface.yAxes.add(yAxis)
        self.surface.renderableSeries.add(rSeries)
        //self.surface.chartModifiers = SCIChartModifierCollection(childModifiers: [SCIPinchZoomModifier(), SCIZoomExtentsModifier(), SCIRolloverModifier()])

        //rSeries.addAnimation(SCIWaveRenderableSeriesAnimation(duration: 3, curveAnimation: .easeOut))
    }
}
0 votes
0 answers
16 views

I couldnt find IPointMarkerPaletteProvider Interface in SciChart iOS framework. I want to change the color of the point markers of line series on tapping the markers. With IPointMarkerPaletteProvider it would have been easier.

SCIPaletteProvider is there but how do I provide the colors to each markers through that. Is there any other way to go about it ?

0 votes
35 views

I have placed a VerticalLineAnnotation on chart surface along with AxisMarkerAnnotation on X-Axis. The X1 of axis marker is bound to the vertical line annotation’s X1 so that they can move together.

I have set IsEditable=”True” and DragDirections=”XDirection” for both – the line annotation & its axis marker so that user can drag the line on chart horizontally by holding the mouse on either the vertical line or its axis marker.

The drag operation works fine when user holds the vertical line with mouse and drags it. The mouse pointer and annotation move together happily.

However, the problem occurs when user holds on the axis marker and tries to drag. In this case, the mouse pointer remains way behind and the annotation moves ahead very fast. There is no sync between mouse pointer position and line annotation which becomes very bad experience for user. Is there any way to address this issue?

0 votes
0 answers
18 views

I couldnt find IPointMarkerPaletteProvider Interface in SciChart iOS framework. I want to change the color of the point markers of line series on tapping the markers. With IPointMarkerPaletteProvider it would have been easier.

SCIPaletteProvider is there but how do I provide the colors to each markers through that. Is there any other way to go about it ?

0 votes
44 views

Hello,

i have a question concerning a chart with stacked y-axes. As you can see in the first picture (stacked.png) i have a chart with three y-axes and each axis is stacked. What i like to do is to combine for example two axes (e.g. Ch0 and Ch1) and stack those two axes over another axis (Ch2).

However the axes (Ch0 and Ch1) are overlaid as you can see in my picture (overlaid.png). Instead i would like to have the same view for Ch0 and Ch1 like in the not stacked picture (not_stacked.png).

The surface should look like this:

Ch0 Ch1
Ch2

How can i achieve this?

Best regards
Alexander

0 votes
0 answers
22 views

I am using latest version of SciChart through Pods. I am using trial key for now.

I have made all the views under the chart clear. And have tried the code below but the background appears to be shades of black.

     let yAxis = SCINumericAxis()
     let xAxis = SCINumericAxis()
     self.surface.xAxes.add(xAxis)
     self.surface.yAxes.add(yAxis)

     self.surface.backgroundColor = UIColor.clear
     self.surface.isOpaque = false
     self.surface.renderableSeriesAreaFill = SCISolidBrushStyle(color: UIColor.clear)
     self.surface.renderableSeriesAreaBorder = SCISolidPenStyle(color: UIColor.clear, withThickness: 0)
0 votes
35 views

Has anyone ever encountered this problem?
Could you give me a help? How to solve this problem?
The app didn’t run in the method of ‘getStrokeColors()’, when I debugged.

public class BubbleChartFragment extends ExampleBaseFragment {
    ...

    {
    ...
    FastBubbleRenderableSeries mRSeries = sciChartBuilder.newBubbleSeries()
                    .withDataSeries(dataSeries)
                    .withZScaleFactor(zScaleFactor / 10f)
                    .withBubbleBrushStyle(new SolidBrushStyle(0xffff0000))
                    .withAutoZRange(false)
                    .withStrokeStyle(0xff00ff00, 20f)
                    .withPaletteProvider(new StrokePaletteProvider())
                    .build();
    }

    private class StrokePaletteProvider extends PaletteProviderBase<FastBubbleRenderableSeries> implements IStrokePaletteProvider {
            private final IntegerValues colors = new IntegerValues();
            private final int[] desiredColors = new int[]{0xFF00FF00, 0xFF0000FF};

            protected StrokePaletteProvider() {
                super(FastBubbleRenderableSeries.class);
            }

            @Override
            public void update() {
                final BubbleRenderPassData currentRenderPassData = (BubbleRenderPassData) renderableSeries.getCurrentRenderPassData();

                final int size = currentRenderPassData.pointsCount();
                colors.setSize(size);

                final int[] colorsArray = colors.getItemsArray();
                final int[] indices = currentRenderPassData.indices.getItemsArray();
                for (int i = 0; i < size; i++) {
                    final int index = indices[i];
                    colorsArray[i] = desiredColors[index % 2];
                }

            }

            @Override
            public IntegerValues getStrokeColors() {
                return colors;
            }
        }
    }
  • SiYuan Ou asked 1 week ago
  • last active 1 week ago
0 votes
35 views

How can I apply my style and template to my axes if I created the axes as NumericAxisViewModel in code and bound them to my SciChartSurface in my xaml view?

Regards,
Roland

0 votes
39 views

Hello,
Is it possible to plot multiple scatter series in a chart?. When i tried so, only one series was visible.Kindly let me know.
i am using WPF 2D version
Thanks
Deepak

  • deepak b asked 2 weeks ago
  • last active 6 days ago
0 votes
55 views

Companion question of https://www.scichart.com/questions/wpf/fastlinerenderableseries-handling-of-double-nan-values-where-isdigitallinetrue

We have the same issue/desire with respect to NaNs: we would like to have a similar behaviour, i.e. always render at least one point when there is a NaN. So if we have a sequence p1, NaN, p2, NaN, p3, NaN, …. the chart is not empty (like it is with LineDrawMode.Gaps) or a continuous line (like LineDrawMode.ClosedLines) but a series of points. It could be another mode like LineDrawMode.NonClosedLines or similar.

Or

Is it possible to do it by ourselves? With a CustomRenderableSeries maybe?

0 votes
0 answers
54 views

Hi,

As part of our evaluation of SciChart a very important point for us is responsiveness, as I mentioned in another post

A point that is causing concerns is that we need to update the UI in a reliable, synchronous, non-deferred way, even if this means blocking the user input. So for us the only method that works is to user RenderPriority.Immediate.

Unfortunately it seems that for complex data were the rendering starts to struggle SciChart just skips updates to the view. We tried to manually force the update using code, but we have the same problem described here (i.e. RenderPriority.Manual does not work).

So, how can we be sure that the UI gets updated every single time we update a DataSeries, regardless of load, user input, whatever?

0 votes
0 answers
61 views

hello, i have a problem, my TestAnnotation class X Y is null when creating.

code:

public class TestAnnotationViewModel : CompositeAnnotationViewModel
{
    public override Type ViewType
    {
        get { return typeof(TestAnnotation); }
    }
}

public class TestAnnotation : CompositeAnnotation
{
    public TestAnnotation() : base()
    {
        DefaultStyleKey = typeof(CompositeAnnotation);
    }

    public override void Update(ICoordinateCalculator<double> xCoordCalc, ICoordinateCalculator<double> yCoordCalc)
    {
        base.Update(xCoordCalc, yCoordCalc);

        //i want to do some thing, but X1 Y1 X2 Y2 is null, and i get exception.
        //this code from Composite Annotations Examples
        if (Y1.CompareTo(Y2) > 0) // <===exception
        {
            MeasureText.VerticalAnchorPoint = VerticalAnchorPoint.Top;
            MeasureText.Margin = new Thickness(0, 5, 0, 0);
        }
        else
        {
            MeasureText.VerticalAnchorPoint = VerticalAnchorPoint.Bottom;
            MeasureText.Margin = new Thickness(0, -5, 0, 0);
        }
    }
}

version v5.3.0.11954

0 votes
0 answers
65 views

Hi,

I’m trying to follow the instructions here: https://www.scichart.com/documentation/v5.x/Tutorial%2007%20-%20Adding%20Annotations.html
to create a subclass of CustomAnnotation. I have copied the attributes given in the example (VerticalAnchorPoint=”Bottom” HorizontalAnchorPoint=”Center”) but I still get the error “An attribute name is missing” on anything I put after the attributes. Are there other attributes that may be required for CustomAnnotation, not given in this example?

Thanks,
Rachel

0 votes
0 answers
68 views

My group is evaluating SciChart for high performance realtime charting. We are testing line renderer with XyDataSeries.
We were able to get good performance, but we need to squeeze more and our scenario is a bit different from how XyDataSeries is used.

To make a long story short, we cannot append, because our application has 2 strict requirements:

  • every data refresh we need to ditch the whole dataset and replace it
    with a new (usually larger) one (no append)
  • we need to display each refresh immediately, even if it means delaying user input (so Immediate. Or Manual with a refresh after
    every step).

which means put in XyDataSeries a new set of points at every step. This means either do:

var dataSeries = new XyDataSeries<double, float>(samples.Length)
dataSeries.Append(domain, samples);
m_renderableSeries.DataSeries = dataSeries;

or :

dataSeries.Clear();
dataSeries.Append(m_domain, samples);

(btw, the first one is slightly faster, 190ms vs 240ms to draw 10 million points)

Which is obviously working against how XyDataSeries is implemented.
A faster way would be to just do

var dataSeries = new ReadOnlyXyDataSeries(domain, samples);
m_renderableSeries.DataSeries = dataSeries;

Where ReadOnlyXyDataSeries just takes the samples array and without any copy makes it available to the renderer.
So I implemented ReadOnlyXyDataSeries as a IXyDataSeries<double, float>.

To my surprise however this performs much worse (900ms to draw 10
million points), while it should perform better (it is really just a
XyDataSeries without copy)

UPDATE: This is not true: I was setting IsSortedAscending = false on sorted data. Once I put it to true, preformances are back to exactly the same performance as XyDataSeries . Which is good but not stellar.

(hack time) I know there is room for performances, because I made the following (hacky, brutal, very bad) thing:

var internalList = (ISciList<float>)dataSeries.YValues;
Array.Copy(samples, internalList.ItemsArray, samples.Length);

instead of the Clear/Append pair, and it is much faster (30ms are shaved off). No copy should be even faster.

Obviously I am missing something. So, what am I missing? How should I implement a custom IXyDataSeries in a fast way? Is there another way?

0 votes
0 answers
53 views

I downloaded the Scichart example package from Github and tried to build some of the apps. But I got many errors related to the Animation library in RenderableSeries namesapce.

On the lines “using SciChart.Charting.Visuals.RenderableSeries.Animations;”, Visual Studio will give an error saying “The type or namespace named “Animiations” does not exist in the namespace SciChart.Charting.Visuals.RenderableSeries (are you missing an assembly reference?)”, although I already added all the refeerences needed for SciChart. What am I missing? I have the full version of Scichart for WPF.

Thank you

Kevin

0 votes
0 answers
54 views

Hi,

I would like to know if there’s a way to show a list of Annotations for which the coordinates are stored in lists in my c# code. I can bind the items in the lists like this:

s:SciChartSurface.Annotations …>
s:CustomAnnotation X1=”{Binding XList[0]}” Y1=”{Binding YList[0]}” …/>
s:CustomAnnotation X1=”{Binding XList[1]}” Y1=”{Binding YList[1]}” …/>
s:CustomAnnotation X1=”{Binding XList[2]}” Y1=”{Binding YList[2]}” …/>
s:CustomAnnotation X1=”{Binding XList[3]}” Y1=”{Binding YList[3]}” …/>
/s:SciChartSurface.Annotations …>

Is there a way to do this with something like ItemsControl?

Thanks,
Rachel

0 votes
71 views

Hello,

in the attached solution i tried to extend the chart in your MVVM-Tutorial an overview control as it is shown here: https://www.scichart.com/example/wpf-chart-example-scroll-chart-using-overview-control/
However i get multiple binding exceptions that i not really understand.

I would be very thankful if you could help me out.

Best regards
Alexander

1 vote
72 views

How to create the order book depth chart with SciChart?

enter image description here

0 votes
0 answers
55 views

Hello,

i have a custom DateTimeAxisViewModel and want to set major and minor ticks by user input. If the user sets valid values i use following code:

AutoTicks = false;
MajorDelta = TimeSpan.FromSeconds(USERINPUT);
MinorDelta = TimeSpan.FromSeconds(USERINPUT);

Everything works fine. If the user sets an invalid input i want to automatically calculate major and/or minor ticks. My idea was to use the DateTimeTickProvider and call GetMajorTicks()/GetMinorTicks() and then use the result to set the delta like in the code example above.
However GetMajorTicks()/GetMinorTicks() need IAxisParams as input. I couldn’t find IAxisParams as a member of my DateTimeAxisViewModel so i tried this:

public class CustomAxisParams : IAxisParams
{
    public IRange GetMaximumRange()
    {
        throw new NotImplementedException();
    }

    public IRange VisibleRange { get; set; }
    public IRange<double> GrowBy { get; set; }
    public IComparable MinorDelta { get; set; }
    public IComparable MajorDelta { get; set; }

    public AxisParams(IRange visibleRange, IRange<double> growBy, IComparable minorDelta, IComparable majorDelta)
    {
        VisibleRange = visibleRange;
        GrowBy = growBy;
        MinorDelta = minorDelta;
        MajorDelta = majorDelta;
    }
}

public class CustomDateTimeAxisViewModel : DateTimeAxisViewModel
{
    private TimeSpan GetAutoMajorDelta()
    {
        var dateTimeTickProvider = new DateTimeTickProvider();
        var axisParams = new AxisParams(VisibleRange, GrowBy, MinorDelta, MajorDelta);
        var majorTicks = dateTimeTickProvider.GetMajorTicks(axisParams);

        if (majorTicks.Count < 2)
        {
            return TimeSpan.Zero;
        }

        // return diff between majorTicks[0] and majorTicks[1]
    }
}

This does not work because GetMajorTicks() returns always an empty list. How can i achieve the desired behaviour?

Thanks for your help.
Alexander

0 votes
48 views

Can Annotation in editing state set the editing style, or the background of editing state?

0 votes
53 views

I’ve read the TooltipModifier article but I don’t believe the method discussed in this article will work for me. The renderable series of my chart is set in within my ViewModel; therefore the described method of setting the TooltipModifier using the following syntax will not work for me since my series are not defined in the XAML.

<s:SomeSeriesType s:TooltipModifier.TooltipTemplate="{StaticResource XyTooltipTemplate}" />

Instead I am using the following.

<s:SciChartSurface RenderableSeries="{s:SeriesBinding SeriesInMyModel}" />

What can I do to overcome this problem?

0 votes
0 answers
58 views

Hi there,

I have a DateTimeAxis, when I add an Annotation, OnAnnotationCreated is called, and the NewAnnotationViewModel within the AnnotationCreationMVVMArgs contains an X1 value that is an int instead of the DateTime it’s supposed to be.

As you can see in all of the attached images, X1 should logically be a DateTime, but it’s not.

The XAxisID on the NewAnnotationViewModel is correct.

0 votes
0 answers
44 views

I am using SciChart to create mountain chart. Now I want to change whole dataset when some button is clicked. So I am updating the dataset and calling invalidateElement on ScichartSurface. It is not animating while redrawing itself. First time it is animating.

@objc func changeDataValue() {
    if isFirstDataSet {
        for i in 0 ..< yValues3.count {
        ds1.update(at: Int32(i), x: SCIGeneric(i), y: SCIGeneric(yValues3[i]))
        ds2.update(at: Int32(i), x: SCIGeneric(i), y: SCIGeneric(yValues4[i]))
        }
    } else {
        for i in 0 ..< yValues1.count {
            ds1.update(at: Int32(i), x: SCIGeneric(i), y: SCIGeneric(yValues1[i]))
            ds2.update(at: Int32(i), x: SCIGeneric(i), y: SCIGeneric(yValues2[i]))
        }
    }
    isFirstDataSet = !isFirstDataSet
    sciChartSurface.invalidateElement()

    sciChartSurface.zoomExtents()

}

Code to add ScichartSurface is

  private func configureChartSurface() {
    sciChartSurface = SCIChartSurface(frame: view.bounds)
    sciChartSurface.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    sciChartSurface.translatesAutoresizingMaskIntoConstraints = true
    view.addSubview(sciChartSurface)

    for i in 0..<yValues1.count {
        ds1.appendX(SCIGeneric(i), y: SCIGeneric(yValues1[i]))
        ds2.appendX(SCIGeneric(i), y: SCIGeneric(yValues2[i]))
    }

    let rSeries1 = SCIStackedMountainRenderableSeries()
    rSeries1.dataSeries = ds1
    rSeries1.strokeStyle = SCISolidPenStyle(colorCode: 0xFFffffff, withThickness: 1)
    rSeries1.areaStyle = SCILinearGradientBrushStyle(colorCodeStart: 0xDDDBE0E1, finish: 0x88B6C1C3, direction: .vertical)

    let rSeries2 = SCIStackedMountainRenderableSeries()
    rSeries2.dataSeries = ds2
    rSeries2.strokeStyle = SCISolidPenStyle(colorCode: 0xFFffffff, withThickness: 1)
    rSeries2.areaStyle = SCILinearGradientBrushStyle(colorCodeStart: 0xDDACBCCA, finish: 0x88439AAF, direction: .vertical)

    seriesCollection.add(rSeries1)
    seriesCollection.add(rSeries2)
    self.sciChartSurface.xAxes.add(SCINumericAxis())
    self.sciChartSurface.yAxes.add(SCINumericAxis())
    self.sciChartSurface.renderableSeries.add(self.seriesCollection)
    self.sciChartSurface.chartModifiers = SCIChartModifierCollection(childModifiers: [SCITooltipModifier()])
     self.seriesCollection.addAnimation(SCIWaveRenderableSeriesAnimation(duration: 3, curveAnimation: .easeOut))
    }
0 votes
65 views

i have a scichart that is rendering some analog values with a scrollbar in the Y-axis. The problem is the scrollbar needs to reset so that the selected range can be changed when the values change to a different scale or offset. However, the scrollbar remembers the selected range and sticks to it. The Y axis is set to AutoRange =”Always” but that does not help either.

  <s:SciChartSurface x:Name="sciChart">
                <s:SciChartSurface.RenderableSeries>
                    <s:FastLineRenderableSeries Stroke="{ets:ETStyleRef ResourceKey=RenderableSeriesColor}" StrokeThickness="2" DataSeries="{Binding DataSeries}" />
                </s:SciChartSurface.RenderableSeries>
                <!--Annotation-->
                <s:SciChartSurface.Annotations>
                    <s:TextAnnotation FontWeight="Bold" Margin="2" Text="{Binding Label}" Padding="10,0,0,0"/>
                </s:SciChartSurface.Annotations>
                <!--X Axis-->
                <s:SciChartSurface.XAxis>
                    <s:TimeSpanAxis GrowBy="0.0, 0.1" AxisAlignment="Bottom" VisibleRange="{Binding DateRange, Mode=TwoWay}" Visibility="{Binding XAxisVisible, Converter={StaticResource boolVisibilityConverter}}" DrawMajorGridLines="True" DrawMinorGridLines="True" DrawMajorTicks="True" DrawMinorTicks="True" DrawLabels="True"/>
                </s:SciChartSurface.XAxis>
                <s:SciChartSurface.YAxis>
                    <s:NumericAxis DrawMinorGridLines="True" DrawMinorTicks="True" AutoRange="Always" TextFormatting="0.#######" AxisAlignment="Left">
                        <s:NumericAxis.GrowBy>
                            <s:DoubleRange Max="0.1" Min="0.1" />
                        </s:NumericAxis.GrowBy>
                        <s:NumericAxis.Scrollbar>
                            <s:SciChartScrollbar x:Name="chartScrollbar" Width="16" />
                        </s:NumericAxis.Scrollbar>
                    </s:NumericAxis>
                </s:SciChartSurface.YAxis>
                <s:SciChartSurface.ChartModifier>
                    <s:ModifierGroup>
                        <common:RubberBandXyZoomModifierEx ReceiveHandledEvents="True" IsEnabled="True" ZoomExtentsY="True" IsAnimated="False" />
                        <s:ZoomPanModifier ReceiveHandledEvents="True" IsEnabled="True" ExecuteOn="MouseRightButton" XyDirection="XDirection" ZoomExtentsY="True" />
                        <s:MouseWheelZoomModifier ActionType="Zoom" Tag="FirstYAxis" ReceiveHandledEvents="True" XyDirection="YDirection"/>
                        <s:YAxisDragModifier Tag="FirstYAxis" ReceiveHandledEvents="True" />
                        <s:ZoomExtentsModifier IsAnimated="False" XyDirection="YDirection" ReceiveHandledEvents="True" />
                    </s:ModifierGroup>
                </s:SciChartSurface.ChartModifier>
            </s:SciChartSurface>
  • SPS asked 3 weeks ago
  • last active 2 weeks ago
0 votes
0 answers
51 views

An empty chart is displayed if a custom axis id is configured for Heatmap series. Only “DefaultAxisId” seems to be supported.
Please suppport custom axis id with Heatmap series (with MVVM) to achieve the same behavior as other series types.

0 votes
92 views

When I enter PathAnnotation in the xaml, I get the error “The type ‘s:PathAnnotation’ was not found.” I do have the following Annotation types available:
– AxisMarkerAnnotation
– BoxAnnotation
– CustomAnnotation
– HorizontalLineAnnotation
– LineAnnotation
– LineArrowAnnotation
– SeriesValueAxisMarkerAnnotation
– TextAnnotation
– VerticalLineAnnotation

I want to be able to make a star shape annotation, and PathAnnotation seemed to be the only way to do this. Please let me know if there’s another way to do this.

Thanks,
Rachel

0 votes
0 answers
81 views

Using MVVM I am trying to force my 2nd Y axis to a specific min and max value. I’m setting the AutoRange to never and the VisibleRange to a DoubleRange(min, max) in my ViewModel in a function named ‘SetAxes(min, max)’.

The behavior seems to be that it works the first time I add a measurement to my chart. On subsequent updates to the chart (when I tell the chart via a method in my model to change it’s axes) it doesn’t update. Here is what I have…

        public void SetAxes(double min, double max)
        {
            RightAxisAutoRange = AutoRange.Never;
            RightAxisVisibleRange = new DoubleRange(min, max);
        }

        // 2nd axis range
        private IRange _rightAxisVisibleRange;
        private AutoRange _rightAxisAutoRange;
        public IRange RightAxisVisibleRange 
        { 
            get { return _rightAxisVisibleRange; }  
            set { SetProperty(ref _rightAxisVisibleRange, value); } 
        }
        public AutoRange RightAxisAutoRange  
        { 
           get { return _rightAxisAutoRange; } 
           set { SetProperty(ref _rightAxisAutoRange, value); } 
       }

       <!-- 2nd Y Axis -->
            <s:NumericAxis AxisTitle="{Binding Path=RightAxisTitle}" 
                           Id="YAxis2"
                           AxisAlignment="Right"
                           Visibility="{Binding Path=RightAxisVisibility}"                               
                           FontFamily="Arial"
                           VisibleRange="{Binding Path=RightAxisVisibleRange}"  
                           AutoRange="{Binding Path=RightAxisAutoRange}"
                           GrowBy="0.1, 0.1" 
                           Style="{DynamicResource ResourceKey=RatioAxisStyle}"
                           s:CursorModifier.AxisLabelContainerStyle="{StaticResource CursorModAxisLabelStyle}"
                           s:CursorModifier.AxisLabelTemplate="{StaticResource CursorModAxisLabelTemplate}" />

Don’t get hung up on the “SetProperty” function in my setters. That’s just an internal mechanism I use in a base class which implements INotifyPropertyChanged.

What I’ve noticed is that the moment I decide to zoom the right Y axis refuses to ever go back to it’s original range. I suppose a way to turn off 2nd Y axis zooming would resolve my problem?

0 votes
118 views

Hello,

how can i implement a vertically stacked y axis chart like in your example (WPF Chart Vertically Stacked YAxis) with MVVM and a varying number of y axes. Your example has a fixed number of y axes and the needed YAxesPanel is directly implemented in your xaml code. What is the best way to achieve the same result with a varying number of y axis?

Best regards
Alexander

0 votes
79 views

Dear SciChart Team:

My application interface is shown in the attached file. There are four Y-axis and one X-axis. One curve corresponds to one Y-axis. I use the dragging of two HorizontalLineAnnotations and Y1 subtraction to calculate Diminish, but this can only get HorizontalLineAnnotation. Dominish with the Y axis specifying YAxisId, if I want to get Diminish for all Y axes at once, what is the recommended method?

  • Johnny Yeh asked 3 weeks ago
  • last active 3 weeks ago
0 votes
84 views

To avoid arrays in LOH the UniformHeatmapDataSeries should use IList[] or Span instead of TZ[,].

  • Tobias asked 3 weeks ago
  • last active 3 weeks ago
0 votes
84 views

Hi:

My name is Harold Ramírez and I have a question I would like you to answer because I don’t find any doucmentation about it online.

I have a WPF application with several charts, some of them in 3D. These 3D charts have the X axis in horizontal, Y in vertical and the Z in depth. I want only to keep the labels on the X and Y axis, on the left and bottom of the chart.

The only documentation I have found is this page: https://www.scichart.com/documentation/v5.x/webframe.html#Showing%20Axis%20Labels%20on%20one%20side%20of%20the%203D%20Chart.html, and only shows how to make it in XAML, but I need it to do it programatically in C#.

Thank you for your time.

Harold.

0 votes
78 views

I need to synchronize the charts with external data. I’m using RenderSurface.ActualWidth and RenderSurface.ActualHeight to do it. But initial values (after chart creation) are larger than real. It becomes correct only after the window resizing. This behaviour is demonstrated in the attached project and video files.

Is it possible to make it right from the start or make a force resize?

0 votes
78 views

Hi,

I’m trying to write an app which dynamically hides/shows (Visible/Gone) scichart surface without losing the data rendering. I’ve been trying to drive this via android visiblity and observable fields (MVVM design). An example of how our surfaces look is as follows:

<com.scichart.charting.visuals.SciChartSurface
android:id=”@+id/temperature_chart”
android:layout_width=”match_parent”
android:layout_height=”0dp”
android:layout_weight=”.99″
android:visibility=”@{graphViewModel.displayChartTemp ? View.VISIBLE : View.GONE}”
android:paddingTop=”@dimen/potrero_gap”
android:paddingBottom=”@dimen/potrero_gap”
scichart:verticalGroup=”@{graphViewModel.sharedVG}”
scichart:renderableSeries=”@{graphViewModel.tempRenderableSeries}”
scichart:xAxes=”@{graphViewModel.xTempAxes}”
scichart:yAxes=”@{graphViewModel.yTempAxes}”/>

and in the view model:

declaration:
var displayChartTemp = ObservableBoolean()

and to set the visibility….
displayChartTemp.set(true)
displayChartTemp.set(false)

I saw that historically, one solution was to
rsiChart.setRenderSurface(null);
rsiChart.setRenderSurface(new RenderSurfaceGL(getActivity()));

but I was wondering if there would be a good way to do this with MVVM architecture, and drive it similarly with observables?

Thanks,
-Andy

0 votes
77 views

Hi

I’m using SciChart to display digital signals, which by nature are 0 or 1.
I’m binding all data and axes from a viewmodel, following the example “WPF Chart Vertically Stacked YAxis” I tried to achive the same wiht a dynamic grid as AxesTemplate.

[...] RightAxesPanelTemplate="{DynamicResource BinaryYAxesTemplate}" [...]


    <ItemsPanelTemplate x:Key="BinaryYAxesTemplate">
        <Grid vmh:DynamicGridBuilder.RowCount="{Binding YAxesGridRows}" vmh:DynamicGridBuilder.StarRows="{Binding YAxesGridStarRows}" vmh:DynamicGridBuilder.ColumnCount="1" />
    </ItemsPanelTemplate>

Can you supply an example how stacked YAxes can be achieved?

Cheers

Martin

Showing 1 - 50 of 3k results