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

0 votes
0 answers

I’m updating from Xamarin iOS SciChart v2 to v3 and just hit the issue that i can not use a custom TickProvider because there is no overridable UpdateTicks method.

I could not find any TickProvider code in the v3 Examples so the docs are my only source:—tickprovider-and-deltacalculator-api.html

According to the docs, I should override SCINumericTickProvider or SCIDateTickProvider

class CustomNumericTickProvider: SCINumericTickProvider
    public override void UpdateTicks(SCIDoubleValues minorTicks, SCIDoubleValues majorTicks)

But there is no UpdateTicks method to override.
I tried to override the Update() method instead:

public override void Update()


But that is just causing a freeze/crash at runtime.

It’s worth noting that it works well on Android because there is a UpdateTicks method to override.

What should I do?

0 votes

I’m using Xamarin.iOS and the SciChart.iOS NuGet. When adding a LabelProvider to an axis the iPhoneSimulator with iOS 13.2 crashes without warning or exception back to the phone menu. This issue is not present on Android using the same API usage pattern.

This effect is not just in my own apps but can be replicated by running the latest Examples app on the same simulator. Examples which demonstrate the same behaviour include “Custom Theme”, Stacked Column Side by Side Chart”, “Using Theme Manager”, all of which set the LabelProvider in the source code.

Is this a known bug? Maybe an incompatibility with the latest version of Xamarin.iOS.

I noticed that this issue has been reported before.

This is a deal breaker for us at the moment as formatting axis labels is pretty crucial.

0 votes

When calling SCIThemeManager.ApplyTheme(Surface, SCIThemeManager.SCIChart_Bright_SparkStyleKey); within a the code-behind running on the iPhoneSimulator running iOS 13.2, the iOS system throws an Objective-C exception with the following details:

Foundation.MonoTouchException: 'Objective-C exception thrown.  Name: NSInternalInconsistencyException Reason: applyThemeProvider: must be implemented in subclass

Although the exact same pattern works without issue on the corresponding Xamarin.Android project and the examples that call this line seem to be OK too, it is not clear from any documentation what this issue could be. Any advice would be appreciated.

0 votes


I wanted to try the V3 beta for iOS in objective-c but I don’t know how to format the string with the new license key.

Neither this (as found here:

[SCIChartSurface setRuntimeLicenseKey:@""
   "\"ActivatedBy\": null,"
   "\"Customer\": \"Anyone\","
   "\"DeveloperCount\": null,"
   "\"ExpiryDate\": \"2019-12-21\","
   "\"Features\": ["
   "\"IsTrialLicense\": true,"
   "\"KeyCode\":" "gRPFuMCiB0otJzffhGFJO09BtH3drfoDZV5pAkQNv9hyHJsfBsCr42BHRJ/oz2ib2uEgT33IYW3fGKExB4KPUbrNOeKazYrMI8pD5OJVlDoRXuJdY97iUZU2jNHRnXN0cgpBdqcQTWgW/afd9pYwcYT5P22sklCSrtTdwcuyepiLE9Ap9B2ixMVpoB43Yj79g1/yKzgPQaAmW38hjDyByQwxCQ9R88Jt4JqQRVQUhYxj31CFoX7Upm36oP32WGbEEex4E1qHTY+KALouRnA9JQZej13V4MjwF45xuQNiUDbk3RHtyJwWEjwGS9jHh24WiTj1aOaw8PAfBmKZl2FKfKSL7Q7Nu9jtUgZdGUbpZTKYrASpoVQiVk2/+1xAA8dB/7RdsjXVVrXf1RnMg8dNXsY7gcJJ25SF4QmZwqa82Dl+PnXGq0BSvfLaSrSl8uWkimTt0D/FwvaVqvpzomORpStboVNroTAcbaBJRIOK6tZDFwBj3qQV1N470/XW3aKHckN7GrNOpS7xpZ/EM9k=,"
   "\"MachineId\": null,"
   "\"OrderId\": \"BETA trial key\","
   "\"ProductCode\": \"SC-BUNDLE-SDK-PRO\","
   "\"SerialKey\": null,"
   "\"TicketQuantity\": null"

or this (old format style):

  [SCIChartSurface setRuntimeLicenseKey:@""
   "<OrderId>BETA trial key</OrderId>"
"<Features>[WPF-2D, AND-2D, iOS-2D, WPF-3D, AND-3D, iOS-3D]</Features>" "<KeyCode>gRPFuMCiB0otJzffhGFJO09BtH3drfoDZV5pAkQNv9hyHJsfBsCr42BHRJ/oz2ib2uEgT33IYW3fGKExB4KPUbrNOeKazYrMI8pD5OJVlDoRXuJdY97iUZU2jNHRnXN0cgpBdqcQTWgW/afd9pYwcYT5P22sklCSrtTdwcuyepiLE9Ap9B2ixMVpoB43Yj79g1/yKzgPQaAmW38hjDyByQwxCQ9R88Jt4JqQRVQUhYxj31CFoX7Upm36oP32WGbEEex4E1qHTY+KALouRnA9JQZej13V4MjwF45xuQNiUDbk3RHtyJwWEjwGS9jHh24WiTj1aOaw8PAfBmKZl2FKfKSL7Q7Nu9jtUgZdGUbpZTKYrASpoVQiVk2/+1xAA8dB/7RdsjXVVrXf1RnMg8dNXsY7gcJJ25SF4QmZwqa82Dl+PnXGq0BSvfLaSrSl8uWkimTt0D/FwvaVqvpzomORpStboVNroTAcbaBJRIOK6tZDFwBj3qQV1N470/XW3aKHckN7GrNOpS7xpZ/EM9k=</KeyCode>"



I always get the message “Sorry! Your license token appears to be invalid. etc.”
What’s the right way?

Best regards,


1 vote


I have 2 solutions of xamarin forms using scichart: one of them is the demo from github repo of scichart (, and the other is my own solution using scichart

The problem is when I attach a labelprovider (the same as the github example) to one of my numerical axes, the app automatically closes on the device (both), neither of the two solutions shows an error or exception.

0 votes

I cannot get SCILinearGradientBrushStyle working on a donut chart. Only radial gradients work

Here is my code sample:

let segment = SCIPieSegment()
segment.fillStyle = SCILinearGradientBrushStyle(colorCodeStart: 0xff007aff, finish: 0x4D007aff, direction: .horizontal)
segment.value = 100.0
segment.title = "Segment"

The segment just renders a flat color

1 vote


i am Swift Language

i am plotting live ECG Data on SciChart Surface. I have added 9 Graph on Storyboard in a UIScrollView for the Following things
Each of the above has data = [Int]
i had written a custom Class for Plotting Live Data

=>Class Specification
Inherited From UIView in a seperate xib which contains
– A Label For Name of the chart,
– A chart to draw data and a label
– for displaying frame buffer speed

=>Requirement a Single Chart (Chart have no modifier added onit)

Everything Works Fine until the scroll start, On Scrolling The chart stop Plotting Data Until the Scroll stops

  • Atiq Tahir asked 4 months ago
  • last active 2 months ago
0 votes

i am Swift Language
let dragmodifier = SCIZoomPanModifier()
dragmodifier.clipModeY = .clipAtExtents


How can i acheive this?

  • Atiq Tahir asked 4 months ago
  • last active 2 months ago
0 votes

Using Following Code to Construct Sync Multiple Graphs

   let _rangeSync = SCIAxisRangeSynchronization()
    let _zoomExtentsModifierSync = SCIMultiSurfaceModifier(modifierType: SCIZoomExtentsModifier.self)
    let _pinchZoomModifierSync = SCIMultiSurfaceModifier(modifierType: SCIPinchZoomModifier.self)
    let _xDragModifierSync = SCIMultiSurfaceModifier(modifierType: SCIXAxisDragModifier.self)
    let _yDragModifierSync = SCIMultiSurfaceModifier(modifierType: SCIYAxisDragModifier.self)
    let _rolloverModifierSync = SCIMultiSurfaceModifier(modifierType: SCIRolloverModifier.self)

func getGraphs() -> [(String,CustomClassThatHoldsData)] {

    let keys = Array(historicChats!.data!.keys)
    var arrayOfTuples = [(String,CustomClassThatHoldsData)]()
    for key in keys {
    arrayOfTuples.append((key, (self.historicChats?.data![key])!))
    return arrayOfTuples

 func drawMultichartWithDefault() {

        for data in arrayOfGraphs {
        let chart = SCIChartSurface(frame: CGRect(x: 0, y: 0, width: self.stkCharts.frame.width-50, height: 200))
        initChart(chart, data.1)


fileprivate func initChart(_ chart: SCIChartSurface, _ data: VitalHistoryData) {
    SCIUpdateSuspender.usingWithSuspendable(chart) {
    let xAxis = SCIDateTimeAxis()
    xAxis.growBy = SCIDoubleRange(min: SCIGeneric(0.1), max: SCIGeneric(0.1))

    let yAxis = SCINumericAxis()
    yAxis.growBy = SCIDoubleRange(min: SCIGeneric(0.1), max: SCIGeneric(0.1))

    let dataSeries = SCIXyDataSeries(xType: .dateTime, yType: .double)
    let dataArray = data.getDataArray()
    for tuple in dataArray {
    dataSeries.appendX(SCIGeneric(tuple.1), y: SCIGeneric((tuple.0)))

    let rSeries = SCIFastLineRenderableSeries()
    rSeries.dataSeries = dataSeries
    rSeries.strokeStyle = SCISolidPenStyle(color:, withThickness: 1.0)

    chart.chartModifiers = SCIChartModifierCollection(childModifiers: [self._xDragModifierSync, self._yDragModifierSync, self._pinchZoomModifierSync, self._zoomExtentsModifierSync, self._rolloverModifierSync])


On 2 graphs it works quite fine but with the more then 2 graphs it starts lagging

  • Atiq Tahir asked 4 months ago
  • last active 2 months ago
0 votes

I would like to add scrollBar to SCINumericAxis for example xAxis.

I did find documentation:

But on iOS version, I can’t find numericAxis.Scrollbar is missing

0 votes

I need to do some calculation for data in visible range after zoom. Is there any notification when gesture ends in SCIPinchZoomModifier? If not, then that means I have to build a custom zoom gesture modifier? If so could you show me how pinch zoom is done in SCIPinchZoomModifier so that I don’t need to build everything from scratch? Thanks

  • Haoran Xie asked 4 months ago
  • last active 2 months ago
0 votes
0 answers


I have previously asked a question regarding Android and Xamarin (

Now, I have the same question, but for iOS. Do you have any examples available for taking chart legend outside of chart area on iOS?

Thank you and have a nice day!


0 votes


I am trying to round the corners of the bars produced by a SCIFastImpulseRenderableSeries (pointMarker is hidden). Any suggestions how to do that?


0 votes


The problem is how to sign the X-axis (the time axis).
How can I change the date and time format on the x axis?
Is this possible when I use the SCICategoryDateTimeAxis?
We use the code from example to set the time format

0 votes

How can I create CustomCategoryLabelProvider?
How can i do this?
This example does not work for me

0 votes

Hey all,

is there a way on iOS to export a SciChartSurface to a vector format in order to embed the exported chart into a PDF document? Right now the only thing I can find in the Documentation is exportToUIImage(). If not – any ideas for a workaround until such feature is implemented?

0 votes


I am using mountain chart to draw some data. First time open the chart screen, the graph plots properly. If we do scroll forward the graph x-axis last label is missing. If we do scroll backward the graph x-axis first label is missing.

Here I have attached working .swift file.

Note: We are using mountain chart with multiple line series. We are not using stacked mountain chart.

0 votes

I am creating point data series using SCIXyScatterRenderableSeries.
I need to tap on specific data points and display pop over or some view on top of it. Pop over provides information regarding that point.

How can I implement that in iOS.

0 votes

I want to develop a rollover in my IOS application, like the example of Using RolloverModifier. However, the axis label & tooltip display of rollover in this example is static, I want to customize a the the label & tooltip that I want, .xib file or coding to develop also fine.

Can anyone help or give suggestions to my problems? Thanks.

  • Gumbo F asked 6 months ago
  • last active 6 months ago
0 votes

How to make chart axis (date axis in my case) to move with scrolling?

Because currently labels staying on it’s positions and just refreshing its values.

let xAxis = SCIDateTimeAxis()
xAxis.axisId = ChartWrapper.SURFACE_MAIN_X_AXIS_ID
xAxis.autoRange = .never
xAxis.visibleRange = sharedXRange = false = false = false = true
xAxis.textFormatting = "HH:mm:ss" = true

Best regards, Vadim

0 votes

Hello there

I’m looking for any solution to work with milliseconds timestamps (like that one 1563448997279), but haven’t found anything yet.

Is it possible to handle them without losing precision?

Solutions like drop milliseconds not working for me.

One more question to developers:
What is the difference in SCIDataType_DateTime and SCIDataType_SwiftDateTime?

In source code i only found this:
@field SCIDataType_DateTime – NSDate

0 votes

We have a graph surface with some point markers on it and we want to show a custom tooltip every time the user taps on a point marker. So far I’ve used a UITapGestureRecognizer, convert the touchpoint in the chart frame and for each of the renderable series perform a HitTestAtX with a radius (I’ve tried 1, 5 and 30) but it always returns true, even if I tap on an area where there’s a gap in the chart. Here’s some sample code:

SCIHitTestInfo hitTestInfo = renderableSeries.HitTestProvider.HitTestInterpolateModeAtX(touchPoint.X, touchPoint.Y, 30, renderableSeries.CurrentRenderPassData);

if (hitTestInfo.match)
       Console.WriteLine($"Tapped {hitTestInfo.xValue} {hitTestInfo.yValue} with index {hitTestInfo.index} of the series {renderableSeries.DataSeries.SeriesName}");

       var elementSeries = Model.BottomRightLegendList.FirstOrDefault(tup => tup.DataSeries.SeriesName == renderableSeries.DataSeries.SeriesName);

       var element = elementSeries.GraphElement;

       if (element != null)

Why is the “match” property always true, even if there are no Point Markers in the radius?

0 votes


I have a SCIFastLineRenderableSeries backed by data in SCIXyDataSeries.

I setup FIFO to 300 (this just a number I may increase, but it stores 30+ seconds of data)

x data is time stamp.

each time I have new data, I set a new visibleRange to show about 30 seconds of data on screen

xAxis.visibleRange = [[SCIDoubleRange alloc] initWithMin:SCIGeneric(secondSinceStart-31) Max:SCIGeneric(secondSinceStart)];

So this will scroll along showing latest 30 seconds of data. And that’s great.

But I want to scroll to the left to view the older data. because of the visibleRange is set I am not able to touch the axis labels and do anything)

how do I set the visibleRange or maybe not set it, so I can enable the scroll.

Here is the drag modifier I use , but I think it does not do anything either because of the visibleRange
SCIXAxisDragModifier * xAxisDragmodifier = [SCIXAxisDragModifier new];
xAxisDragmodifier.dragMode = SCIAxisDragMode_Pan;
xAxisDragmodifier.clipModeX = SCIClipMode_None;


  • Jeremy H asked 6 months ago
  • last active 2 months ago
0 votes

i want to implement a custom modifier to track the users touch, similar to rollover but without displaying a view

I tried to do this by implementing SCIGestureModifier and overriding all the onTouches methods, but – no matter the user behaviour – the modifier will always receive an onTouchesCancelled event after about a second and receive no more of these events after that.

What does work is implement onPanGesture to actually track all the user’s movement but i don’t see any way of how you would receive a touch up event this way (which i do need)

Is there any fundamental misunderstanding on how this should work on my side?

0 votes

I am using SCIStackedMountainRenderableSeries in my iOS application, I am always getting chart background as black grids, I want to make it clear or white background. How can I do that?

I have tried

sciChartSurface?.backgroundColor = UIColor.white

That did not worked, Please help.

0 votes

So for both SCIZoomPanModifier and SCIXAxisDragModifier you can set a clip mode, that will cause the graph to not zoom in if you try to scroll past the edges.

This is not possible for the y-axis however, so everytime anyone scrolls up or down to far, the graph zooms in, which is not useful to anyone ever

Is there any way to change this behaviour at all?

Thanks in advance

0 votes

So I want to draw multiple charts so is there any way I can have stacked yAxes like yAxis 2 should be drawn below yAxis1. I have gone through your example and there I got that we can add multiple surface but its becoming difficult for us to show a crosshair on all surfaces since we have a custom cross hair. Can you guide on same. Thanks in advance

0 votes


It’s very strange, but chart can not be zoomed with pinch, only by double tap fitting full screen.
And when trying to zoom app freezes and CPU load became 100%.

func installChart() {
    sciChartSurface = SCIChartSurface(frame: self.view.bounds)
    sciChartSurface?.translatesAutoresizingMaskIntoConstraints = false

    self.vGraphBox.subviews.forEach({ $0.removeFromSuperview() })


        sciChartSurface!.leftAnchor.constraint(equalTo: self.vGraphBox.leftAnchor),
        sciChartSurface!.rightAnchor.constraint(equalTo: self.vGraphBox.rightAnchor),
        sciChartSurface!.bottomAnchor.constraint(equalTo: self.vGraphBox.bottomAnchor),
        sciChartSurface!.topAnchor.constraint(equalTo: self.vGraphBox.topAnchor)

    // Add the SCIChartSurface as a subview

    let xAxis = SCILogarithmicNumericAxis()
    xAxis.growBy = SCIDoubleRange(min: SCIGeneric(0.1), max: SCIGeneric(0.1))
    xAxis.scientificNotation = .logarithmicBase
    //xAxis.textFormatting = "#.#E+0"
    xAxis.logarithmicBase = 10.0
    xAxis.visibleRange = SCIDoubleRange(min: SCIGeneric(100), max: SCIGeneric(22000.0))

    let yAxis = SCINumericAxis()
    yAxis.autoRange = .never
    yAxis.visibleRange = SCIDoubleRange(min: SCIGeneric(-300.0), max: SCIGeneric(0.0))

    lineRenderableSeries.dataSeries = self.dataSeries
    lineRenderableSeries.strokeStyle = SCISolidPenStyle(colorCode: 0xFFE13219, withThickness: 1)

    //self.sciChartSurface?.chartModifiers.add(pinchZoomModifier) //Causes freeze

    SCIUpdateSuspender.usingWithSuspendable(sciChartSurface!) {
0 votes

We updated scichart to 2.5.0 version and got issue:
We have SCIAxisMarkerAnnotation with market line and set markerLinePen:

let mainDashPattern: [NSNumber] = [1.1, 1.0, 1.1, 1.0]
style.markerLinePen = SCISolidPenStyle(color: mainBlack15, withThickness: 1.0, andStrokeDash: mainDashPattern)

Sometimes, after create new chart, all lines with strokeDash colored with solid black color.

I added screenshots.


0 votes

It seems most of the modifiers bring up tooltip data with a pan, and then it goes away when the user lifts their finger. Is there any way to bring up tooltip data with a tap (and does not go away when the finger has lifted)? The main problem that we’re trying to solve is that we would like to be able to pan to look at the chart (and don’t want an axis pan), but would also like to bring up tooltip data.

  • Carolyn asked 7 months ago
  • last active 7 months ago
0 votes
0 answers

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

1 , queue = ‘’, 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
19 : 0x00000001034ce07c FXChatmain at AppDelegate.swift:15:20 frame 20: 0x0000000182f0856c libdyld.dylibstart + 4

  • ke zhang asked 8 months ago
  • last active 7 months ago
0 votes

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

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.


(lldb) po SciChartVersionNumber

(lldb) po SciChartVersionString

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

0 votes

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


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.

1 vote

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.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) = xAxisGridBandBrush

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

    let yAxisGridBandBrush = SCISolidBrushStyle(color: UIColor.clear) = yAxisGridBandBrush = UIColor.white = "Helvetica" = 14 = true
    yAxis.visibleRange = SCIDoubleRange(min: SCIGeneric(-1.0), max: SCIGeneric(65))
    yAxis.autoTicks = false
    yAxis.majorDelta = SCIGeneric(1.0)
    yAxis.minorDelta = SCIGeneric(0.2) = SCISolidPenStyle(color: UIColor.white, withThickness: 0.5, andStrokeDash: [5.0,6.0])
    // Style the Minor Gridlines on the YAxis (vertical lines) = SCISolidPenStyle(color: UIColor.white, withThickness: 0.5, andStrokeDash: [5.0, 6.0]) = true = true = false = 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.chartModifiers = SCIChartModifierCollection(childModifiers: [SCIPinchZoomModifier(), SCIZoomExtentsModifier(), SCIRolloverModifier()])

        //rSeries.addAnimation(SCIWaveRenderableSeriesAnimation(duration: 3, curveAnimation: .easeOut))
  • Ayush Jain asked 8 months ago
  • last active 7 months ago
0 votes

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 ?

  • Ayush Jain asked 8 months ago
  • last active 7 months ago
0 votes

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 ?

  • Ayush Jain asked 8 months ago
  • last active 7 months ago
0 votes

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.backgroundColor = UIColor.clear
     self.surface.isOpaque = false
     self.surface.renderableSeriesAreaFill = SCISolidBrushStyle(color: UIColor.clear)
     self.surface.renderableSeriesAreaBorder = SCISolidPenStyle(color: UIColor.clear, withThickness: 0)
  • Ayush Jain asked 8 months ago
  • last active 7 months ago
0 votes

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



Code to add ScichartSurface is

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

    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)

    self.sciChartSurface.chartModifiers = SCIChartModifierCollection(childModifiers: [SCITooltipModifier()])
     self.seriesCollection.addAnimation(SCIWaveRenderableSeriesAnimation(duration: 3, curveAnimation: .easeOut))
  • Keshav Raj asked 8 months ago
  • last active 7 months ago
0 votes

Hey again!

Is there kind of a delegate that notify me if the user uses the crosshair/SCIRolloverModifier?
I want to know which value he is inspecting to show him further information outside the chart for this datapoint.

Thanks and Greeting

0 votes

Hi all,

I’m trying to use the metal support in a little test project.
I have following lines to enable metal:

if SCIChartSurface.isMetalSupported {
      sciChartSurface.renderSurface = SCIMetalRenderSurface(frame: sciChartSurface.bounds)
 } else {
       sciChartSurface.renderSurface = SCIOpenGLRenderSurface(frame: sciChartSurface.bounds)

the surface keeps empty until I remove the

sciChartSurface.renderSurface = SCIMetalRenderSurface(frame: sciChartSurface.bounds)

line – or in other words I use OpenGL.
Then the chart will render properly. I am using an iPhoneX (not simulator).

Thank you for your support!

Wall of Code:

import UIKit
import SciChart
import SnapKit

class ViewController: UIViewController {

    // MARK: - UIElements
    private var sciChartSurface: SCIChartSurface!

    // MARK: - Vars
    private var series: SCIXyDataSeries?

    // MARK: - Lifecycle
    override func viewDidLoad() {

       // MARK: - Chart
     private func setupSurface() {
        // Create a SCIChartSurface. This is a UIView so can be added directly to the UI
        sciChartSurface = SCIChartSurface.init(frame: view.bounds)
        sciChartSurface.debugWhySciChartDoesntRender = true

        // Detect metal with this static property
        if SCIChartSurface.isMetalSupported {
            sciChartSurface.renderSurface = SCIMetalRenderSurface(frame: sciChartSurface.bounds)
        } else {
            sciChartSurface.renderSurface = SCIOpenGLRenderSurface(frame: sciChartSurface.bounds)
        sciChartSurface.snp.makeConstraints { (make) in

        sciChartSurface.translatesAutoresizingMaskIntoConstraints = true
        sciChartSurface.backgroundColor = .gray
        // Create an XAxis and YAxis. This step is mandatory before creating series
        let xAxis = SCICategoryNumericAxis()
        setup(axis: xAxis)
        let yAxis = SCINumericAxis()
        setup(axis: yAxis)

    private func setup(axis: SCIAxisBase) {
        let axisStyle = SCIAxisStyle()

        let majorPen = SCISolidPenStyle(colorCode: 0xFF393532, withThickness: 0.5)
        let minorPen = SCISolidPenStyle(colorCode: 0xFF262423, withThickness: 0.5)

        let textFormat = SCITextFormattingStyle()
        textFormat.fontSize = 16

        axisStyle.majorTickBrush = majorPen
        axisStyle.majorGridLineBrush = majorPen
        axisStyle.gridBandBrush = SCISolidBrushStyle(colorCode: 0xE1232120)
        axisStyle.minorTickBrush = minorPen
        axisStyle.minorGridLineBrush = minorPen
        axisStyle.labelStyle = textFormat
        axisStyle.drawMinorGridLines = true
        axisStyle.drawMajorBands = true = axisStyle

    private func setupData() {
        series = SCIXyDataSeries(xType: .int16, yType: .int16)
        TestData.testData.forEach { (testData) in
            let xGeneric = SCIGenericType(type: .int16, .init(int32Data: testData.x))
            let yGeneric = SCIGenericType(type: .int16, .init(int32Data: testData.y))
            series?.appendX(xGeneric, y: yGeneric)

    private func renderData() {
        let renderSeries = SCIFastColumnRenderableSeries()
        renderSeries.dataSeries = series

struct TestData {
    var x: Int32
    var y: Int32

    static let testData = [TestData(x: 2017, y: 5),
                           TestData(x: 2018, y: 8),
                           TestData(x: 2019, y: 2),
                           TestData(x: 2020, y: 9)]
0 votes


is there a way to set the padding (aka reduce the gap) between bars in a SCIFastColumnRenderableSeries?

I attach a screenshot of my current situation: I would like to have zero margin between columns.

I tried searching in the knowledge base but all the answers I found seem to refer to APIs not available in the iOS SDK


There is not such class method in the iOS SDK called SciChartSurface.Padding

Thanks for your help

1 vote

Can SciChart be used in UITableviewCell? Is it possible to use Software rendering on iOS?

The OpenGL/Metal charts are great, but I suspect Software rendering would be a better for displaying data in UITableViewCells. There are many mobile apps out there that use charts in tableviews and I’d love to be able to use SciChart here too.

0 votes

Hey Guys,

I have a requirement where I need to show Donut Chart Title , but adding any annotation is crashing my application.

    let textAnnotation = SCITextAnnotation()
    textAnnotation.coordinateMode = .relative
    textAnnotation.x1 = SCIGeneric(0.5)
    textAnnotation.y1 = SCIGeneric(0.5)
    textAnnotation.horizontalAnchorPoint = .center
    textAnnotation.verticalAnchorPoint = .center
    textAnnotation.text = "Test" = 14 = UIColor.fromARGBColorCode(0xff000000); = UIColor.clear
    chartSurface.annotations = SCIAnnotationCollection(childAnnotations: [textAnnotation])


-1 votes

Hello Team,

In Pie Chart with DonutSeries, the segment spacing seems to have no effect on graph.

donutSeries.segmentSpacing = 10


0 votes

This might need to be two separate questions, but is there a way to select a point in a line series. or, can I style a pointMarker differently for each data point?

I would prefer to not have to do this with annotations.

0 votes

I’m try to generate a UIImage from a SCIChartSurface into a graphic context using the code below from a view that is not displayed on the screen. The image created is pure black, which indicates it did not draw. If I display the graph in a view on the devices screen, the graph draws correctly.

UIGraphicsBeginImageContextWithOptions(self.chart.bounds.size, NO, 0.0);
[self.chart drawViewHierarchyInRect:self.chart.bounds afterScreenUpdates:YES];
UIImage *chartImage = UIGraphicsGetImageFromCurrentImageContext();

Are there any special steps that are needed to draw into a graphic context?

  • Brian Smith asked 10 months ago
  • last active 10 months ago
0 votes
0 answers

I am trying SciChart iOS.

I run the demo code, and check on the line chart.
The y-axis label is on the right of the plot, and aligned center.

I tried to modify the alignment to right by adding the following code.
(Also, changing things like amplitude or rightAxisAreaForcedSize) = SCILabelAlignmentHorizontal_Right;

I was hoping that the smallest digit of “0” and “100” can be aligned,
but no effect could be seen when I ran the code. (still center-aligned)

Is that a bug or is there any reason for the behavior?

FYI, when I modify the code again with “SCILabelAlignmentHorizontal_Left”, it work as expected.

0 votes

Hi Guys,

I am not able to figure out solution for handling NAN values in iOS which is available in Android in case of FastLineRenderableSeries.


Showing 1 - 50 of 181 results