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

0 votes
0 answers


I was using android sdk 2.5 and i’m not getting any runtime errors and error logs. But after updating the project to sdk 3.0 i started getting errors (no code has been changed). During the runtime, chart’s xAxis shows wrong times and started writing 1970 under every vertical grid line. Also debug log says: “SciChartSurface has no XAxes. Please ensure SciChartSurface.XAxis is set, or SciChartSurface.XAxes has at least one axis”.

I’m just upgrade sdk 2.5 to 3.0, how can i fix errors?


0 votes
0 answers


Would it be possible to receive some information on how to take the legend outside of the chart surface area? We are having an issue when the user selects more axis’ to be shown in the chart. The chart then shrinks horizontally making the legend difficult to access for removing the axis’.

A quick how to with some code example would be highly appreciated. To further highlight, this is Xamarin.iOS project we are talking about.

Thank you and have a nice day.

Best Regards

0 votes
0 answers

I create a real time chart and want to add line annotation which help to user to understand chart wave form.
However I can’t add fix position of annotation. I change annotation every time chart is update but the annotation is not fixed in one position. The x value is datetime axis and the visible range is 5 second. Data is added around 100 data per second.

0 votes

SciChart Android
I only want to draw line chart which update real time. So, I don’t want label and grid. I remove the label and grid via scichart builder options but the chart remain little spacing for label. How to remove these spacing.
Android Version – 7.0
SciChart Version –

My Code –

XAxis = sciChartBuilder.newDateAxis()
                .withVisibleRange(current, graphEnd)

    YAxis = sciChartBuilder.newNumericAxis()
            .withVisibleRange(-MaxY , MaxY)

    ModifierGroup chartModifiers = sciChartBuilder.newModifierGroup()
0 votes
0 answers

I looked at this thread but it doesn’t help me.

I have problem where an item is still shown in the legend even though no series is currently displayed on the chart.

For example.

  1. The SciChart RenderableSeries dependency property of my chart surface is a property in my view model named “Measurements”, I.e. ObservableCollection of IRenderableSeries.
  2. An ObservableCollection of another class named “ExampleList” is also in my view model.
  3. In a data grid elsewhere in the application a user selects 3 rows. The “ExampleList” collection now has 3 items in it. Part of the setter for that property is to call “Measurements.Clear()” and then follow that with a “Measurement.Add(newseries)” 3 times.
  4. When a user selects an individual item in the data grid that contains no points that could be displayed on the chart I only call “Measurements.Clear()” and I don’t subsequently called “Measurements.Add()”

My issue is that the legend never clears and shows the last series that was selected before selecting this new item which shouldn’t even be in the chart. It’s behaving as if the chart were not cleared; although I have verified that I definitely am calling “Measurements.Clear()”

0 votes
0 answers

I want to change the colors of the individual columns of a UniformGridDataSeries3D by applying a PaletteProvider to the RenderableSeries. I’m trying to set the PaletteProvider of a ColumnRenderableSeries3DViewModel with UniformGridDataSeries3D as DataSeries to MyPaletteProvider (see bellow, currently only returning blue) but i get the following exception when the graph is rendering:

SciChart3DSurface didn’t render, because an exception was thrown:
Message: Index was outside the bounds of the array.

Stack Trace: at SciChart.Charting3D.RenderableSeries.ColumnUniformGridSceneEntityHelper.GetPoints3DData(ColumnRenderableSeries3D renderableSeries, IPointSeries3D pointSeries, IRenderPassInfo3D rpi, Point3DXyzData& data)
at SciChart.Charting3D.RenderableSeries.BaseRenderableSeriesSceneEntity3D`3.UpdateScene(IRenderPassInfo3D rpi)
at SciChart.Charting3D.Primitives.BaseSceneEntity1.Update()
at SciChart.Charting3D.Primitives.BaseSceneEntity1.Update(Single fDeltaTime)
at SciChart.Charting3D.Interop.SCRTSceneEntity.SwigDirectorUpdate(Single _fDeltaTime)
at SciChart.Charting3D.Interop.VXccelEngine3DPINVOKE.SCRTSceneEntity_UpdateSwigExplicitSCRTSceneEntity(HandleRef jarg1, Single jarg2)
at SciChart.Charting3D.Interop.SCRTSceneEntity.Update(Single _fDeltaTime)
at SciChart.Charting3D.Primitives.BaseSceneEntity1.Update(Single fDeltaTime)
at SciChart.Charting3D.Interop.SCRTSceneEntity.SwigDirectorUpdate(Single _fDeltaTime)
at SciChart.Charting3D.Interop.VXccelEngine3DPINVOKE.SCRTCallbacks_OnUpdate(HandleRef jarg1, Single jarg2)
at SciChart.Charting3D.Interop.SCRTCallbacks.OnUpdate(Single _fDeltaTime)
at SciChart.Charting3D.Viewport3D.DrawFrameInternal(ISceneDescriptor sceneDescriptor)
at SciChart.Charting3D.Viewport3D.FillSource(ISceneDescriptor sceneDescriptor)
at SciChart.Charting3D.Viewport3D.DrawFrame(IRenderPassInfo3D rpi)
at SciChart.Charting3D.SciChart3DRenderer.RenderLoop()
at SciChart.Charting3D.SciChart3DSurface.DoDrawingLoop()

public class MyPaletteProvider : IFillPaletteProvider3D
        public void OnAttach(IRenderableSeries3D renderSeries)


        public void OnDetached()


        public Color? OverrideFillColor(IRenderableSeries3D series, int index, IPointMetadata3D metadata)
            return Colors.Blue;
0 votes

I want to know how to set FastBandRenderableSeries withSeriesInfoProvider to null?

If i set null like sciChartBuilder.newBandSeries().withSeriesInfoProvider(null) i’m getting error on debug logs:

E/Exception: null
java.lang.NullPointerException: Attempt to invoke interface method ‘com.scichart.charting.visuals.renderableSeries.tooltips.ISeriesTooltip com.scichart.charting.visuals.renderableSeries.hitTest.ISeriesInfoProvider.getSeriesTooltip(java.lang.Class)’ on a null object reference
at com.scichart.charting.modifiers.behaviors.TooltipBehaviorBase.func(SourceFile:120)
at com.scichart.charting.modifiers.behaviors.TooltipBehaviorBase.func(SourceFile:35)
at com.scichart.core.observable.ProjectionCollection.onCollectionChanged(SourceFile:186)
at com.scichart.core.observable.ObservableCollection.a(SourceFile:302)
at com.scichart.core.observable.ObservableCollection.a(SourceFile:79)
at com.scichart.core.observable.ObservableCollection.add(SourceFile:93)
at java.util.Collections.addAll(
at com.ikon.prodigy.Fragments.FragmentUI.SciChartFragmentUI$1$
at com.scichart.core.framework.UpdateSuspender.using(SourceFile:122)
at com.ikon.prodigy.Fragments.FragmentUI.SciChartFragmentUI$
at android.os.Handler.handleCallback(
at android.os.Handler.dispatchMessage(
at android.os.Looper.loop(
at java.lang.reflect.Method.invoke(Native Method)

0 votes


I just enabled the new high precision ticks on LogarithmicNumericAxis feature.
The two screenshots show the same data once with high precision ticks disabled and once with high precision ticks enabled.

Is it possible to get the typical loagithmic scaling of the ticks like in the screenshot with high precision ticks disabled ?

Best regards

0 votes

Hello, I am trying to use the default DataPointSelectionModifier on a line chart with a DataSeries of type XyDataSeries<‘DateTime, double’> as in the example suite HERE . It seems to work fine out of the box if the DataSeries is of type XyDataSeries<‘double, double’>. Am I missing something as to why this modifier is not working with the former data type?

Relevent code is:


<sci:SciChartSurface x:Name="customChart"

            <sci:FastLineRenderableSeries Name="lineRenderableSeries"
                    <sci:EllipsePointMarker Fill="#138A43" />
                    <sci:EllipsePointMarker Fill="#C4ECA0"
                                            Height="12" />

        <!--  Create an X Axis with GrowBy  -->
            <sci:CategoryDateTimeAxis DrawMajorBands="True"
                                      GrowBy="0.1, 0.1"
                                      AxisAlignment="Bottom" />

        <!--  Create a Y Axis with GrowBy.-->
            <sci:NumericAxis DrawMajorBands="False"
                             GrowBy="0.5, 0.5"
                             TextFormatting="$0.00" />

        <!-- Setting IsEnabled enables or disables a modifier in the Toolbar -->

                <sci:DataPointSelectionModifier Name="PointMarkersSelectionModifier"
                                                SelectionStroke="#009E9C9C" />



private void OnDataSeriesChanged(DependencyPropertyChangedEventArgs e)
      var inputDataSeries = e.NewValue as XyDataSeries<DateTime, double>;

        var dataSeries = new XyDataSeries<DateTime, double>();

        dataSeries.Append(inputDataSeries.XValues, inputDataSeries.YValues, dataSeries.YValues.Select((x) => new MyMetadata { IsSelected = false }));

        lineRenderableSeries.DataSeries = dataSeries;



public class MyMetadata : IPointMetadata
    public event PropertyChangedEventHandler PropertyChanged;
    public bool IsSelected { get; set; }

With this implementation I am able to individually select datapoints and select multiple datapoints with ctrl/shift but am unable to drag select multiple datapoints.

If, as in the example suite, I change the default XAxis to:

                             GrowBy="0.1, 0.1"
                             CursorTextFormatting="0" />

and of course change all the relevant datatypes in CustomChart.xaml.cs from XyDataSeries<‘DateTime, double’> to XyDataSeries<‘double, double’> everything behaves as expected.

Am I missing something to make the DragSelection work out of the box with the former data type without having to make a custom modifier?

Thank you in advance for your help.

  • Leland asked 6 days ago
  • last active 5 days ago
0 votes
0 answers


I am trying to implement a custom ViewportManager for a SciChart3DSurface, but the overridden methods, such as OnCalculateNewXRange are not called after I assign the custom ViewportManager to a surface. The minimalistic version of my code is:

public class Test3DViewportManager : ViewportManager3DBase
    public Test3DViewportManager() : base()

    public override void OnParentSurfaceRendered(ISciChart3DSurface sciChartSurface)

    protected override IRange OnCalculateNewXRange(IAxis3D xAxis)
        return base.CalculateAutoRange(xAxis);

    protected override IRange OnCalculateNewYRange(IAxis3D yAxis, RenderPassInfo3D renderPassInfo)
        return base.CalculateAutoRange(yAxis);

    protected override IRange OnCalculateNewZRange(IAxis3D zAxis, RenderPassInfo3D renderPassInfo)
        return base.CalculateAutoRange(zAxis);

I tried to assign the custom manager is two different ways in code-behind, none of them work:

var VM= new Test3DViewportManager();
SciChart.ViewportManager = VM;  // way 1
VM.AttachSciChartSurface(SciChart); // way 2    

I would appreciate any suggestion, thanks in advance!

0 votes
0 answers

Dear Devs,

I found a very strange case.

I have a measure file.
It has some values (that I want to show in chart).
Once I load the file’s values into the chart, it shows it correctly.
After I load it again, it shows just a part of the line.

No matter how many times i repeat it, it went totally random, sometimes OK, sometimes not.
I debug the values, they are always the same.

Could you help me how to solve it?


0 votes

Sorry for the simple question and please point me to the correct place if I have missed this in the docs.

I am just trying to easily bind the DataSeries of a FastLineRenderableSeries as a custom UserControl.

In my MainView I have placed the custom control:

<customUserControls:CustomLineChart x:Name="CustomLineChart1"
                                                    Grid.Row="0" />

My CustomLineChart.xaml is:

    <sci:SciChartSurface x:Name="simpleLineChart">
            <sci:FastLineRenderableSeries x:Name="lineRenderSeries"
                                          StrokeThickness="2" >

        <!--  Create an X Axis with GrowBy  -->
            <sci:NumericAxis DrawMajorBands="True"
                             GrowBy="0.1, 0.1" />

        <!--  Create a Y Axis with GrowBy. Optional bands give a cool look and feel for minimal performance impact  -->
            <sci:NumericAxis DrawMajorBands="True"
                             GrowBy="0.5, 0.5" />



I am trying to figure out how to bind the UserControl lineRenderSeries.DataSeries property in my MainViewModel

So something like this in my MainView.cs:

public partial class MainView : Window
    public MainView(MainViewModel vm, IMainFactory mainFactory)
        DataContext = vm;

        CustomLineChart1.lineRenderSeries.DataSeries = vm.SomeXyDataSeries;

Which works if the SomeXyDataSeries is set prior to this object getting created and does not update because it is not bound

Or something like this in my MainView.xaml

<customUserControls:SimpleLineChart x:Name="CoreStrategyPLGraph"
                                                    DataSeries="{Binding SomeXyDataSeries}"/>

I have just been having an issue understanding how to properly set up this binding on the UserControl.

Any input/clarification on how to do this would be great!

Thank you,

  • Leland asked 7 days ago
  • last active 7 days ago
0 votes


I’m now using SCIChart WPF v5.4.0.12119 at Windows10.
I have paid SC-WPF-2D-PRO licence that is already activated, and using it.

Now I want to updated SCIChart version to v6.1.0.13075.
I downloaded v6.1 installer and installed it.

When I checked the SciChart Licensing Wizard it requires log in.
(I’m using PC at network with proxy server, old Licensing Wizard has proxy setting view, but new one don’t have it…so, I’m going to use offline style)

Do you need re-activateing licence from this wizard?
And for it, do you need deactivating current licence from web page?

0 votes


I tried to create a TickProvider for DateTimeaxis followed by .

My custom provider (CustomDateTimeTickProvider) exactly same that found in url above.

<s:SciChartSurface x:Name="sciChartrtr" 
      RenderableSeries="{s:SeriesBinding ChartSeries, UpdateSourceTrigger=PropertyChanged}">
             <vm:CustomTickProvider  x:Key="CustomTickProvider"/>

               <s:DateTimeAxis DrawMajorBands="True" TickProvider="{StaticResource CustomTickProvider}" AutoTicks="True"  TextFormatting="yyyy.MM.dd" AxisTitle="Idő"/>
                <s:NumericAxis AutoRange="Always" DrawMajorBands="True" AxisAlignment="Left" GrowBy="0.02, 0.02" AxisTitle="{Binding SecondYAxisTitle}"/>
           <!-- YAxis, RenderableSeries omitted for brevity -->

But my xaxis is empty. What do I wrong?
Thank you very much

0 votes


Sorry for my poor english 😐 I would like to achieve that showed on the attached sketch. I would like to align left side of columns to the tick and not the center.
And I would like to ask, is there any solution for different bar width? So the second bar on draw starts at 2019-08-01 18:00 and ends at 2019-08-02 00:00 but third bar is twice as width as second.
Thank you.

0 votes


I want to select the high value of the point that appears when I move my finger while holding the screen on the candlestick chart. I wrote the Custom RolloverModifier but the result has not changed. How can i change the default point position?

public class CustomRolloverModifier extends RolloverModifier
private final HitTestInfo hitTestInfo = new HitTestInfo();

SciChartFragmentUI sciChartFragmentUI;

public CustomRolloverModifier(SciChartFragmentUI sciChartFragmentUI)
    this.sciChartFragmentUI = sciChartFragmentUI;

protected void updateCurrentPoint(PointF currentPoint, ModifierTouchEventArgs args)
        getParentSurface().getRenderableSeries().get(0).hitTest(hitTestInfo, currentPoint.x, currentPoint.y, 0);

        double data = sciChartFragmentUI.ohlcDataSeries.getHighValues().get(hitTestInfo.dataSeriesIndex);

        ICoordinateCalculator coordCalc = sciChartFragmentUI.yAxis.getCurrentCoordinateCalculator();
        currentPoint.y = coordCalc.getCoordinate(data);

        super.updateCurrentPoint(currentPoint, args);
    catch (Exception ex)
        Log.e("updateCurrentPoint: ", ex.getMessage());



0 votes


When I open Scichart for the first time, the chart view looks black until it is displayed by drawing the chart.
Is it possible to make the background in a different color until the chart is displayed?


0 votes

I’m using XyDataSeries<Timespan, double> to plot to my chart.

I want to show elapsed time at chart X-Axis label like below

ex) If Timespan value is 1day 2hour 30min 40sec

Default label style: 02:30:40

Label style I want: 26:30:40

How can I set like that?

0 votes
0 answers

Hello everyone.
We are trying to migrate to V3 in our iOS project and we have many issues.
One of the most important is the implementation of vertically-draggable horizontal lines.
I have a nice working code for SCICharts V2 but I cannot find any similar example of how we can implement a custom modifier for moving an SCIHorizontalLineAnnotation vertically in V3.
We have done it already with the V2 but now that we have to migrate to V3 there is a huge missing part in your documentation.
Our code was using-overiding onPanGesture() in order to figure out if the modifier should handle the touching event, then we were using the touch point in order to find the closer horizontal lines and choose the closest one in order to change the vertical value depending on the touching-changing point.
The only similar example that I found in your documentation ( is using SCIGestureModifier which is not accesible by the V3.
I am trying to use your SCIChartModifierBase class but cannot find anywhere a similar example of what we need.
I already tried to understand how you want us to use the ” override func onEvent(_ args: SCIModifierEventArgs!) ” function of the
SCIChartModifierBase but still no luck, it is impossible to figure out without any kind of a similar example.
The reason of needing an example is that this task needs much more information like these:
1. How to decide if the modifier should handle the touch event and how it should be ignored or handled by the next modifier in the same group ?
2. How to handle the touch started, changed, cancelled events ?
3. How to say in realtime to other modifiers in the same group that we need to to handle the same event simultaneously with this custom modifier ?
4. How to say to the group of modifiers that after the first modifer is taken the touch event then the rest should not use it ?

I will paste here our current implementation that we have done for V2 and needs to be transformed to V3 in case you need more details.

An important part is how we add the modifiers on the chart and this is how we are doing it right now:
let zoom = SCIPinchZoomModifier()
zoom.direction = .xDirection
let group = SCIChartModifierCollection(collection: [CustomModifier(chart: self),
//group.handleGestureFirstOnly = true // Not existing in V3 anymore ! How should we do it in V3 ?
chart.chartModifiers = group

I believe that this code will be really useful for many people out there even for V2 or for migrating to V3.

Swift iOs code using SCICharts V2:

class Modifier: SCIGestureModifier {
private weak var control: ChartView?
private var editingProperty: ChartView.BindableProperty?
private var calculator: SCICoordinateCalculatorProtocol?

    init(chart: ChartView?) {
        self.control = chart

    override func onPanGesture(_ gesture: UIPanGestureRecognizer?, at view: UIView?) -> Bool {

        guard let chart = view as? SCIChartSurface,
            let gesture_ = gesture
            else { return super.onPanGesture(gesture, at: view) }

        let location = gesture_.location(in: chart)
        switch gesture_.state {
        case .began:
            control?.sendActions(for: .touchDown)
            editingProperty = testForDraggableLine(location: location, in: chart)
            calculator = yAxis().getCurrentCoordinateCalculator()
            if editingProperty != nil {
                // Annotations on SciChart don't have Zindex and we want current line to be on the top
                let draggableLines = control?.chart.annotations.array.compactMap { $0 as? DraggableLine }
                if let myLine = draggableLines?.first(where: { $0.bindingKeyValue == editingProperty }) {
                control?.isTouchingLine(isTouching: editingProperty != nil)
            return editingProperty != nil
        case .changed:
            if editingProperty != nil {
                handleDraggingLines(location: location, in: chart)
                return true
        case UIGestureRecognizer.State.ended:
            if editingProperty != nil {
                control?.sendActions(for: .editingDidEnd)
                editingProperty = nil
                _ = control?.adjustYRange(force: true)
                control?.sendActions(for: .valueChanged)
                return true
        case UIGestureRecognizer.State.cancelled:
            if editingProperty != nil {
                control?.sendActions(for: .editingDidEnd)
                editingProperty = nil
                _ = control?.adjustYRange(force: true)
                control?.sendActions(for: .valueChanged)
                return true

        return false

    private func handleDraggingLines(location: CGPoint, in chart: SCIChartSurface) {
        guard let renderSurface = chart.renderSurface,
            let yCalculator = self.calculator,
            let editingProperty = editingProperty else { return }

        let pointInChart = renderSurface.point(inChartFrame: location)
        let valueForYAxis = yCalculator.getDataValue(from: Double(pointInChart.y))
        control?.setValue(Decimal(valueForYAxis), forKey: editingProperty.rawValue)

    // SOS: Filter possible properties that can be returned. We want to always avoid return - and then - dragging the current price bid or ask !
    private func testForDraggableLine(location: CGPoint, in chart: SCIChartSurface) -> ChartView.BindableProperty? {
        let hitTestDistance: Double = 30 // Pixels !
        let nearItems = chart.annotations.array
            .compactMap { $0 as? DraggableLine }
            .filter { item in
                return item.bindingKeyValue != ChartView.BindableProperty.ask &&
                    item.bindingKeyValue != &&
                    !item.isHidden &&
                    item.yDistance(from: location) <= hitTestDistance
        return nearItems
            .sorted { $0.yDistance(from: location) < $1.yDistance(from: location) }
  • Dxat asked 2 weeks ago
  • last active 2 weeks ago
0 votes


I have an XyDataSeries<DateTime, double> series, and it has filled some data. In runtime I would like to change a DateTime value on X axis (olddatetime to newdatetime). How can I do that?
Now I use solution that I remove the old XY data belongs to olddatetime and add a new XY data with newdatetime and same value. This solution works fine, but I don’t know is there a simpler solution for this?
I didn’t find any update method of XyDataSeries class which can updates an X value.
I tried the simple : XValues[olddatetimeidx] = newdatetime but problem is that SciChart surface doesn’t refresh, and I didn’t find any method that refresh all XY data.
Thank you

0 votes


I am creating a simple scatter chart, below is the code in ViewModel for getting data series, mostly from sample code.
My scenario is to be able to add this chart on a button click, so it can add multiple of this chart.
Issue is first time I click the button, dataSeries.Append works very slow, like it takes 10 seconds to pass that line, my laptop has very fast cpu and a lot of ram, so it is not hardware problem. After I added first chart, all subsequent charts added very fast, including different type of charts.
Could you please advise? thanks.

    private XyDataSeries<double, double> GenerateDataSeries(double startsAt, double[] data)
        var dataSeries = new XyDataSeries<double, double>();
        var xValues = GeneratexValues(startsAt, data.Length);
        dataSeries.Append(xValues, data); <=====================
        return dataSeries;
  • el yunque asked 2 weeks ago
  • last active 2 weeks ago
0 votes

I have two AxisCollections:

private AxisCollection _xAxes = new AxisCollection();
public AxisCollection XAxes
    get => _xAxes;
        _xAxes = value;

private AxisCollection _yAxes = new AxisCollection();
public AxisCollection YAxes
    get => _yAxes;
        _yAxes = value;

Both are binded to XAxes and YAxes of SciChartSurface respectively:

   <s:SciChartSurface Grid.Row="0"
                   RenderableSeries="{Binding RenderableSeries}"  
                   ChartTitle="{Binding ChartTitle}"
                   XAxes="{Binding XAxes}"
                   YAxes="{Binding YAxes}">

I try to add axes using following method:

    public void AddAxes()
    XAxes.Add(new NumericAxis() { AxisTitle = "X Achse"});
    XAxes.Add(new NumericAxis() { AxisTitle = "X Achse 2" });
    YAxes.Add(new NumericAxis() { AxisTitle = "Y Achse", AxisAlignment = AxisAlignment.Left});

Addition of a second X axis causes an exception:

“SciChartSurface didn’t render, because an exception was thrown: Message: Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.”

what means “An item with the same key has already been added”. I assume (though not sure) it happens because all of the created axes have the same x:Key attribute.

How can I fix this issue?

1 vote

We are having an issue which is preventing us from upgrading to a newer version of Xamarin iOS SciChart.

With Xamarin iOS SciChart v3, the UpdateTicks method from SCINumericTickProvider cannot be overridden, because it doesn’t exist (at least not public).

In Xamarin Android SciChart v3, it works with overriding the UpdateTicks method.

In Xamarin iOS SciChart v2, it was possible to customize the ticks by overriding the method GetMajorTicksFromAxis from the class SCINumericTickProvider.

It looks like the types generation from iOS to Xamarin C# has missed to correctly export the UpdateTicks method as public overridable. (Because the docs say it should be there and it is there on Android Xamarin.)

  • Jens Stolz asked 2 weeks ago
  • last active 6 days ago
0 votes

When search this forum, I found that we can achieve it by adding point marker. But I am getting this error when trying to add point marker :
‘Operation: setPointMarker: is not avaliable on type: SCIHorizontallyStackedColumnsCollection’

let me know this feature(round top corners of bars) is availble or not ! Or is there any way to do this ?

0 votes

If we set ClipMode.None we can pan infinitely to the uncharted space of left and right. this is fine.
But I want to do panning infinitely only to the left side. So I set ‘clipAtMax’. This is stop panning at right. But instead of panning infinity to the left, it is stretching the left part.
Any solution ?

0 votes

Dear SCICharts support:
We have a very large project that must be migrated to version 3 because right it uses version 2.
I am stuck in the following issues:

1/ I cannot convert Double or Date to ISCIComparable.

Our x axis contains Date-timestamp values and I am trying to find the index of the dataseries.xValues of a specific Date having as parameter my Date value which is Date type and not ISCIComparable.
How can I do this ?

When I try my attempt 1:

let x: Double = <DoubleValue>
let index = dataSeries.xValues.findIndex(of: x, searchMode: .nearest, isSorted: true) 

I am getting the build error: “Cannot convert value of type ‘Date?’ to expected argument type ‘ISCIComparable?'”

When I try my attempt 2:

If I also try to iterate the xValues and find the ISCIComparable value which has doubleValue equal the x then I get the error “Type ‘ISCIList?’ does not conform to protocol ‘Sequence'”
I mean something like this:

let x: Date = Date()
var comparableValue: ISCIComparable? = nil
for val in dataSeries.xValues {
    if val.toDate() == x {
        comparableValue = val

So any solution please ?

2/ I am trying to update the last point of dataSeries using this code:

let lastPoint = dataSeries.count - 1
if let open = dataSeries.openValues.value(at: lastPoint) {
        dataSeries.update( open: open,
                                    high: max(dataSeries.highValues().value(at: lastPoint).toDouble(), mbidPrice),
                                    low: min(dataSeries.lowValues().value(at: lastPoint).toDouble(), mbidPrice),
                                    close: mbidPrice,
                                    at: lastPoint)     }

and I get the error “Cannot convert value of type ‘ISCIComparable’ to expected argument type ‘ISCIValues?’ “
Why ? How should I do this ?

Thanks a lot in advance

  • Dxat asked 3 weeks ago
  • last active 2 weeks ago
1 vote

iPhone 6, OS 12.4.3., X-axis, Y-axis texts are shown in inverted text. We can see this issue if we download the AppStore version of SciChart app

1 vote

Stacked Bar chat: If we give 0 values, there are Black lines showing at middle of screen. please see attached screen.

1 vote

We are using stacked bar chart, and showing only 6 bars visible at a time.
In the X-Axis, the month labels are missing for alternate months & only displays all month label as a flash when graph is being scrolled. Is there any way to fix this.

1 vote

I have NUnit unit tests that use Typemock for mocking objects. The tests worked using previous versions of SciChart, but upgrading to version 6.0 and 6.1, the tests now fail with the error shown in the TestOutput.png image.

I have attempted to included a sample project zip file that the issue can be recreated by running the unit test in Class1Test.cs. I am getting an error every time I try to upload the file: Failed uploading file. Error code: 1. Maybe there is another way for me to get you this zip?

Any ideas on how to fix this would be greatly appreciated

  • Doug Witt asked 3 weeks ago
  • last active 2 weeks ago
0 votes

Out WPF application is currently targeting .net 4.7.2 and we don’t have plan to upgrade to .net core soon. The sample code requires .net core, we would like to know if you could provide a set of sample code targeting .net 4.7.2.


  • el yunque asked 3 weeks ago
  • last active 3 weeks ago
0 votes
0 answers

Hello, we are trying to add HotizontalLineAnnotations to our candlestick chart on tap. But we’ve got the following error :

mView does not exist, so discard the remaining points. java.lang.NullPointerException: Attempt to invoke interface method ‘java.lang.Comparable com.scichart.charting.visuals.axes.IAxis.getDataValue(float)’ on a null object reference

I’ve tried to set axisIds for annotations, but it seems that it doesn’t help. Could you please help me with this issue?

 val annotationCreationModifier = AnnotationCreationModifier()
    val annotationFactory = DefaultAnnotationFactory()

    annotationCreationModifier.annotationType = 6 // Horizontal Line
    annotationCreationModifier.annotationFactory = annotationFactory
    annotationCreationModifier.setAnnotationCreationListener {

0 votes

We need to generate adhoc ipa file for review purpose and we are using the trial version, but its fails. Can you help us on the same?

1 vote
0 answers

I’ve set the width value to matchParent. How do I remove this unwanted space on the right side of the chart?

0 votes

How can we restrict stacked graph chart scrolling to future date ?

1 vote

On clicking any where on stacked bar chart it shows the x axis value. How can we disable the highlight ?

0 votes

I want to click on the data points and get the x and y co-ordinate values stored somewhere, as I further need the data point values. I have already searched for many examples and codes but I’m not able to implement this in my Windows form application (C#). There are some good examples are given on dataPoint selection but I want to use that in my c# code, can you please provide me a example of this in c# instead of xaml.
I have already referred to the below links but not able to find a solution to my problem.

0 votes


I have got a valid licence, but I have got an error when I run my app. I generate runtime key on my profile page (, I write this runtime key into SciChartSurface.SetRuntimeLicenseKey function, but doesn’t work. The error occurs in xaml <s:SciChartSurface> tag, and text is

"Sorry, You need to have a licence to use Scichart.For instructions...."

What can I do?

Thank you very much.

0 votes

I’ve received this crash report for a long time since I use this SDK.
But now it’s the largest amount of crash report in the newest version.
Do you have any idea about this?
I use the SDK to show meter temperature and humidity data. It’s about 10k to 30k data show in the chart and every time the user has download the data or the user zoom, drag the chart will recalculate the min, max, avg number in the visible time range.
Thank you~

  • Switch Bot asked 3 weeks ago
  • last active 3 weeks ago
0 votes

After upgraded SciChart to SciChart_iOS_SDK_3.0.0.5074, using rollover modifier on a SciChart surface which was embedded into a scroll view will crash the app. It crashed when user scroll horizontally on a SciChart surface inside a horizontal scrollable scrollview. It is the same with the vertically scrollable scrollview.

2020-03-09 10:14:15.489302+0800 ******[4835:62890] -[SCIRolloverModifier onTouchesCancelled:]: unrecognized selector sent to instance 0x60000ba28500

2020-03-09 10:14:15.503967+0800 *******[4835:62890] *** Terminating app due to uncaught exception ‘NSInvalidArgumentException’, reason: ‘-[SCIRolloverModifier onTouchesCancelled:]: unrecognized selector sent to instance 0x60000ba28500’
*** First throw call stack:
0 CoreFoundation 0x00007fff23c7127e exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff513fbb20 objc_exception_throw + 48
2 CoreFoundation 0x00007fff23c91fd4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
3 CoreFoundation 0x00007fff23c75c4c
forwarding + 1436
4 CoreFoundation 0x00007fff23c77f78 _CF_forwarding_prep_0 + 120
5 SciChart 0x000000011139aaba -[SCITouchModifierBase onEvent:] + 186
6 SciChart 0x000000011135dfd8 +[SCIEventManager raiseOnEvent:toTarget:isMaster:] + 267
7 SciChart 0x000000011132d03f __38-[SCIEventDispatcher p_SCI_commonInit]_block_invoke + 165
8 SciChart 0x000000011132d45d -[SCIEventDispatcher raiseOnEvent:withAction:] + 569
9 SciChart 0x000000011133fa94 -[SCIChartSurfaceBase p_SCI_onTouchEvent:] + 233
10 SciChart 0x000000011133f996 -[SCIChartSurfaceBase touchesCancelled:withEvent:] + 209
11 UIKitCore 0x00007fff480bf863 forwardTouchMethod + 340
12 UIKitCore 0x00007fff480bf974 -[UIResponder touchesCancelled:withEvent:] + 49
13 UIKitCore 0x00007fff480bf863 forwardTouchMethod + 340
14 UIKitCore 0x00007fff480bf974 -[UIResponder touchesCancelled:withEvent:] + 49
15 UIKitCore 0x00007fff480a4a43 __106-[UIApplication _cancelViewProcessingOfTouchesOrPresses:withEvent:sendingCancelToViewsOfTouchesOrPresses:]_block_invoke + 609
16 UIKitCore 0x00007fff480a429e -[UIApplication _cancelTouchesOrPresses:withEvent:includingGestures:notificationBlock:] + 1163
17 UIKitCore 0x00007fff480a47ac -[UIApplication _cancelViewProcessingOfTouchesOrPresses:withEvent:sendingCancelToViewsOfTouchesOrPresses:] + 158
18 UIKitCore 0x00007fff47c37f2f -[UIGestureEnvironment _cancelTouches:event:] + 707
19 UIKitCore 0x00007fff47c40115 -[UIGestureRecognizer _updateGestureForActiveEvents] + 1779
20 UIKitCore 0x00007fff47c31eda _UIGestureEnvironmentUpdate + 2706
21 UIKitCore 0x00007fff47c3140a -[UIGestureEnvironment _deliverEvent:toGestureRecognizers:usingBlock:] + 467
22 UIKitCore 0x00007fff47c3117f -[UIGestureEnvironment _updateForEvent:window:] + 200
23 UIKitCore 0x00007fff480d04b0 -[UIWindow sendEvent:] + 4574
24 UIKitCore 0x00007fff480ab53b -[UIApplication sendEvent:] + 356
25 UIKit 0x0000000114ad2bd4 -[UIApplicationAccessibility sendEvent:] + 85
26 UIKitCore 0x00007fff4812c71a __dispatchPreprocessedEventFromEventQueue + 6847
27 UIKitCore 0x00007fff4812f1e0 __handleEventQueueInternal + 5980
28 CoreFoundation 0x00007fff23bd4471 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 17
29 CoreFoundation 0x00007fff23bd439c __CFRunLoopDoSource0 + 76
30 CoreFoundation 0x00007fff23bd3b74 __CFRunLoopDoSources0 + 180
31 CoreFoundation 0x00007fff23bce87f __CFRunLoopRun + 1263
32 CoreFoundation 0x00007fff23bce066 CFRunLoopRunSpecific + 438
33 GraphicsServices 0x00007fff384c0bb0 GSEventRunModal + 65
34 UIKitCore 0x00007fff48092d4d UIApplicationMain + 1621
35 ****** 0x000000010b51505f main + 143
36 libdyld.dylib 0x00007fff5227ec25 start + 1
37 ??? 0x0000000000000001 0x0 + 1

  • Gary Chan asked 3 weeks ago
  • last active 3 weeks ago
0 votes

I have exported 50 EEG example from SciChart aplication to a standalone solution. When i start debug, lines are not drawn, but the code is running and generated data seems ok. I have not made any modifications the the example code.

0 votes


I am using SciChart_iOS_SDK_3.0.0.5074 with Swift 5.

I want to show string type on X-axis. I am using below code snippet.

class YearsLabelProvider: SCILabelProviderBase<SCINumericAxis> {

   var xLabels: [String] = ["Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test",     "Test", "Test", "Test", "Test", "Test", "Test"]

   func update(_ axis: ISCIAxisCore!) { }

   override func formatLabel(_ dataValue: ISCIComparable!) -> ISCIString! {
        let index = Int(dataValue.toDouble())
        return NSString(string: index >= 0 && index < xLabels.count ? xLabels[index] : "")

    override func formatCursorLabel(_ dataValue: ISCIComparable!) -> ISCIString! {
        let index = Int(dataValue.toDouble())

        var result: String?

        if (index >= 0 && index < xLabels.count) {
            result = xLabels[index]
        return NSString(string: result!)

Application crashes while loading with the following error –

” *** Terminating app due to uncaught exception ‘Initializer not allowed Exception’, reason: ‘Parameterless initializer of Chart.YearsLabelProvider class shouldn’t be used. Please use one of the designated initializers instead'”

Kindly help us resolving this issue since this is a showstopper issue.
I would also like to know about what data SCIXyDataSeries accepts when we are working with strings.

0 votes


I am trying to export my 3D chart to a file using SciChart3DSurface.ExportToFile. However, I am getting this error:

InvalidOperationException: There was an error reflecting property ‘InputBindings’.

Code behind:

var surface = ResultTestContent.Positional6DOFErrorTestPage.PositionalChart;
surface.ExportToFile($@"C:\temp\ChartTest.jpeg", SciChart.Core.ExportType.Jpeg, true,new Size(800,800));


<s3D:SciChart3DSurface x:Name="PositionalChart" Grid.Column="1" ShowLicensingWarnings="True"
                           DebugWhyDoesntSciChartRender="True" RenderableSeries="{extensions:SeriesBinding RenderSeries3DViewModels}"

        <!-- Create XAxis -->
            <s3D:NumericAxis3D TickTextBrush="Black" AxisTitle="X (mm)" DrawMajorBands="True" DrawMajorGridLines="True"
                               MajorGridLineStyle="{StaticResource ResourceKey=MajorGridLineStyle}"
                               MinorGridLineStyle="{StaticResource ResourceKey=MinorGridLineStyle}"
                               GrowBy="0.1, 0.1"/>
        <!-- Create YAxis -->
            <s3D:NumericAxis3D AxisTitle="Z (mm)" MajorGridLineStyle="{StaticResource ResourceKey=MajorGridLineStyle}"
                               MinorGridLineStyle="{StaticResource ResourceKey=MinorGridLineStyle}"
                               GrowBy="0.1, 0.1"/>
        <!-- Create ZAxis -->
            <s3D:NumericAxis3D AxisTitle="Y (mm)" MajorGridLineStyle="{StaticResource ResourceKey=MajorGridLineStyle}"
                               MinorGridLineStyle="{StaticResource ResourceKey=MinorGridLineStyle}"
                               GrowBy="0.1, 0.1"/>

        <!-- Create Interactivity Modifiers for rotating camera -->
                <s3D:OrbitModifier3D ExecuteOn="MouseLeftButton" ExecuteWhen="None"/>
                <s3D:MouseWheelZoomModifier3D MouseWheelSensitivity="90" />
                <s3D:FreeLookModifier3D ExecuteOn="MouseRightButton"/>
                <s3D:TooltipModifier3D IsEnabled="True" SourceMode="AllSeries" ShowTooltipOn="MouseOver"/>

I’ve removed the binding from the xaml, yet I am still getting the same issue. Any help is appreciated, thanks.

0 votes

Good Evening,
I would like to customize the labels displayed in a Stacked Column Chart in order to be able to display some text coming from the series metadata, is there any way to do it?

Best Regards

  • Luca Berti asked 4 weeks ago
  • last active 4 weeks ago
0 votes

I’m trying to build an entire chart in XAML but I’m unsure how I would bind to DataSeries.

For example…


            <sci:NumericAxis />

            <sci:NumericAxis />



                    <!-- Completely made up "DataSeries" XAML tag, but this is the general idea of what I'm wanting to do -->

                    <DataSeries X="0" Y="{Binding Path=MyObject1.Value}" />
                    <DataSeries X="1" Y="{Binding Path=MyObject2.Value}" />
                    <DataSeries X="2" Y="{Binding Path=MyObject3.Value}" />
                    <DataSeries X="3" Y="{Binding Path=MyObject4.Value}" />




Is it possible to do something along those lines?

If something along those lines were possible I could probably even build out a DataTemplate to just generate the “DataSeries” tags.


  • Greg Knox asked 4 weeks ago
  • last active 4 weeks ago
0 votes

I want to save and print the chart . For saving and printing I referred to the following site, but it gives the error that access to the file path denied:,_Printing_and_Export_to_XPS.html

0 votes
0 answers


i want to disable the pan effect when user long press on chart and allow the user to scroll only in the currently visible range to view the rollover tooltip so that user can see the reading in the current visible range. Once the long press is release, then enable the pan effect again.

Currently when user try to see the reading using rollover tooltip, the whole chart is moving. I have tried removing and adding the zoompanmodifier on long press gesture in ios. But it is not working.

Thank you in advance.

1 vote


I’m evaluating SciChart v6.1 for a WPF realtime charting application.
So far everything has worked well, except some issues with very slow loading.
On my machine, any app referencing SciChart takes around 5-6 seconds to initialize before the app can continue loading.

Some debugging with dotTrace shows most of the time is spent in the constructor of SciChartSurface calling the Charting2DNativeDllsLoader constructor.

dev machine is Windows 10 Pro x64, core i7, 32GB ram
Visual Studio 2019 Pro
To duplicate create new WPF application, .NET Framework v4.8
In MainWindow constructor add two lines:

SciChartSurface.SetRuntimeLicenseKey("[TRIAL KEY]");
var tmp = new SciChartSurface();

Executing the second line takes around 5-6 seconds.
I have uploaded a sample project that duplicates this issue and dotTrace result.
Let me know if I can provide any other info.

0 votes

We need to be able to set our chart’s Y axis to be 105. When we add new series (realtime plotting) and one of the points has a value over 105 we need the chart to start auto-scaling to match that new Y value. In other words, unless the user manually zooms we always want the chart to self-resize after starting at a fixed 105 on the Y axis.

This might seem like a strange request at first but our application is expecting a real time series to plot points whose X values might go from -10 to +10; however, the Y value could go from anywhere between 0 and 100 (sometimes higher – although that is not a typical expected value). When we are auto-scaling XY values realtime with no minimal limits the series points are effectively zoomed in really close giving the user a feeling of “noise” to a series that technically doesn’t really exist.

I’ve attached a couple images that demonstrate what a typical series looks like for us. Imaging if only a small portion of the series were currently on the chart and we were using auto-scaling.

Although the 2nd images is a noisy series. It’s REALLY exacerbated when the initial series is auto-scaling during the measurement making it look like the 3rd image.

1 vote

i have a chart with Xaxis as datetimeaxis and several Yaxes, when ZoomExtentsModifier is used, some YAxes disappear This problem can be solved with HighPrecisionNumericAxis, but the performance suffers
Version: v6.1.0 Build: 13075

  • Son Vu asked 4 weeks ago
  • last active 4 weeks ago
Showing 1 - 50 of 3k results