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

0 votes

I would like to be able to use a triangle annotation that has a size parameter, so that I can add triangles of different sizes to chart.
I have seen the “Trade Markers” example that uses custom annotations defined by a path. But those annotations are a fixed size. How can I give them a size parameter?

I have tried this, but the point of the triangle doesn’t align with the X value, instead the triangle starts to the right of the X value.
public static CustomAnnotation UpTriangle(int x, double y, double size, Brush color, string axis)
PointCollection myPointCollection = new PointCollection
new Point(0, 0),
new Point(1, 1),
new Point(-1, 1)

  return new CustomAnnotation()
    X1 = x,
    Y1 = y,

    Content = new Polygon()
      Points = myPointCollection,
      Height = size,
      Width = size,
      Stretch = Stretch.Fill,
      Fill = color,
      Stroke = color,
      StrokeThickness = 1,
    YAxisId = axis

Thank you for your help.

  • Steven M asked 3 months ago
  • last active 3 months ago
0 votes

I am using scichart android I want Pinch zoom Modifier to Zoom equally on both X and Y Axis at the same time so that shape of grids always remain square as shown in image below .. How can I do that?

  • sci chart asked 3 months ago
  • last active 3 months ago
0 votes

I have some legends that have more items than the screen allows. Is there an ‘overflow’ property of some kind that can be set so the legend automatically shows a scrollbar when it contains more items than it can show?

  • Greg Knox asked 3 months ago
  • last active 3 months ago
0 votes

In my SciChart InteractionToolbar, I have a slider that changes the stroke thickness of the selected series.

<TextBlock Text="Line Thickness:"/>
<wpfTool:IntegerUpDown Foreground="White" 
Value="{Binding SelectedSpectrum.StrokeThickness, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ValueChanged="Thickness_ValueChanged">

This works correctly until a new series is selected. When a new series is selected, the previously selected series thickness returns to its default of “1”. Is there a way I can persist my StrokeThickness value even when the series is no longer selected?

    private void Thickness_ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        if ((sciChartSurface.RenderableSeries != null) && (e.NewValue != null))
            var selectedSeries = sciChartSurface.RenderableSeries.Where(s => s.IsSelected == true).FirstOrDefault();
            if (selectedSeries != null)
                selectedSeries.StrokeThickness = (int)e.NewValue;
0 votes

I have two questions.

I want text annotation witch is selectable but user can not move it. All User can do is delete.
Are there any good idea?

How to catch the mouse over event of the AnnotationViewModel to be binded?

Thank you.

0 votes


I tried to show bitmap file image to scichart(pic1).

I am using BoxAnnotation and set the image to background.

please check the actual image scichart showed(pic2)

It’s blurry. Are there any solution to sho bitmap as it is?

P.S How to see only questions I asked in the past?

0 votes

I’m using the Trial version of your product.

If I buy the product, can I hide the banner?

0 votes
0 answers


I want to get a polar chart with 360 degree on x-scale with a constant tick step. I found how to do it with MajorDelta. My code is:

            <s:PolarXAxis Name="xAxis"
                          AxisTitle="Polar Chart"

And I got a 30-degree step of major ticks. But tick labels were lost. It is only on 0 and 240. I get all labels when I add some data in series and call sciChart.ZoomExtents() as in basic example. But initially, I don’t have any data to show. Moreover, I’m using MVVM and I need to control VisibleRange of Y axis, so ZoomExtents is unlikely.

The second issue with the polar chart – how to control VisibleRange of Y-axis? My code is:

            <s:PolarYAxis Name="yAxis" 
                          VisibleRange="{Binding YVisibleRange}"

But it is not working. I tried to bind Axes instead of VisibleRange only, but I got the same result. Any suggestions?


0 votes

I want to make edges of lines round instead of sharp ,
How can I do that?

  • sci chart asked 4 months ago
  • last active 4 months ago
0 votes
0 answers

Hi SciChart,

Our requirement is to have polygon shapes be drawn at runtime, and to have a “rich” tooltip display for the user when the user hovers over one of these polygons.

Using a CustomRenderableSeries, we’re able to plot polygons, each as its own CustomRenderableSeries. The tooltip displays on a mouse hover when the mouse is within a few pixels of the edge of polygon, but it does not display when the mouse hover is in the middle of a polygon.

We have also explored creating CustomAnnotations of these polygonal shapes – however, the CustomAnnotation object type does not have a ‘Path’ or ‘Points’ property as is shown in the arrow shapes declared in the XAML of the ‘Annotations are Easy’ WPF example. Because we won’t know the paths of these shapes until runtime, this does not meet our requirement.

Is there a way to have tooltips appear within polygons, or a way to assign ‘Path’ data to a CustomAnnotation? Or any other ChartModifier that might suit our needs?


0 votes

Could you tell me how to binding anotation from view to source to be created by AnnotationCreationModifier.

0 votes

Hi there,

I use SciChart v5.4.0.12119 trial to display FastLineRenderableSeries in my WPF application. It works with the default black background. But when I change the background to white (), the background gets messed up in white-black strips.

I tried to disable hardware acceleration. hwndSource.CompositionTarget.RenderMode = System.Windows.Interop.RenderMode.SoftwareOnly; It doesn’t help.

What could cause the issue?


  • Jun Luo asked 4 months ago
  • last active 4 months ago
0 votes


I have an app using scichart 2.1 that runs well. I am trying to migrate to use androidx libraries and am now encountering a crash when runnign setRuntimeLicenseKey(), as shown by the trace below. Any idea how to go about resolving this? Is this something that would be solved by upgrading my SciChart version?

I have minSdkVersion 23, targetSdkVersion 28


2019-10-01 14:39:26.874 22834-22834/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: xx.yy.zz.myapplication, PID: 22834
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/xx.yy.zz.myapplication-EOuCiwzmNiYVjQNAioMbKw==/base.apk"],nativeLibraryDirectories=[/data/app/xx.yy.zz.myapplication-EOuCiwzmNiYVjQNAioMbKw==/lib/arm, /system/lib, /system/vendor/lib]]] couldn't find ""
        at java.lang.Runtime.loadLibrary0(
        at java.lang.System.loadLibrary(
        at com.scichart.core.utility.NativeLibraryHelper.tryLoadLibrary(SourceFile:39)
        at com.scichart.core.licensing.LibsodiumNativeWrapper.<clinit>(SourceFile:29)
        at com.scichart.core.licensing.LibsodiumNativeWrapper.a(SourceFile:41)
        at com.scichart.core.licensing.Decoder.<init>(SourceFile:159)
        at com.scichart.core.licensing.Credentials.setRuntimeLicenseKey(SourceFile:55)
        at com.scichart.charting.visuals.SciChartSurface.setRuntimeLicenseKey(SourceFile:246)
        at xx.yy.zz.myapplication.MyApplication.initialiseSciChart(
        at xx.yy.zz.myapplication.MyApplication.onCreate(
        at Source:0)
        at android.os.Handler.dispatchMessage(
        at android.os.Looper.loop(
        at java.lang.reflect.Method.invoke(Native Method)
0 votes


I have a line series with 500k to 8 million data points and I use the StrokePaletteProvider to highlight certain peaks in different colors. But the colors only appear right at a certain zoom level, without zooming in it is a mixture of my default line color and the chosen StrokePaletteProvider color. Is there anything I can do about this?

  • Roland D asked 4 months ago
  • last active 3 months ago
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 1 month 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

I added LineAnnotation like attached picture.

I can grab the end of line and change length of line.

But I can’t grab the line itself, it means I can’t move the line.

What do you think the problem?

0 votes

Is it possible to bind ImageSource like camera image to the scichart and to do zoom or span modifier?

Thank you.

0 votes

I would like to add labels to contour lines as shown in this previous post.

I have created the heat map with contours, and now I want to programmatically add labels. To this end. I have created a contour series in my view model

        var contourSeries = new FastUniformContourRenderableSeries
            DataSeries = dataSeries,
            ZMin = 0.0,
            ZMax = 50.0,
            ZStep = 4.0

This is the same series as I have already plotted. I have looked through this object, trying to find the plotted contour lines, so I can calculate positions to put labels, but I have not found the data. Can you tell me how to extract the plotted contour curve data?

0 votes

I am using Scichart android ,for Linking Chart Modifiers of Multiple charts I use these lines of code as shown below but it will not synchronize charts on X axis properley sometimes what is the reason ?
Is there is any other method to do that?

ModifierGroup chartModifiers2 = sciChartBuilder.newModifierGroup()
// Setting MotionEventsGroup

  • sci chart asked 4 months ago
  • last active 2 months ago
0 votes

I am using Sci Chart android I want to Share/Link Custom Modifier on Multiple Charts ,
How Can i do that?

  • sci chart asked 4 months ago
  • last active 2 months ago
0 votes

I was able to develop and run everything using the scichart alpha build from Jun 11th.
This includes SciChart2D, SciChart3D, with a minor error.
I was using .NET Core 3.0 Preview 6+, Visual Studio 16.3 Preview on a Win7 box.

However, the client wants to upgrade to Windows 10.
So I installed Visual Studio 16.3 (2019), and .NET Core 3.0 and I was able to build all the packages etc.

However, when launching the WPF part of the application, I was at first encountering AccessViolation exceptions in CreateRenderTarget().

I removed all my SharpDX components, and tried again. I was able to get around this problem by using a version of SciChart 6.0 greater than the Jun 11th alpha version – v.

I can now load SciChart2D package.

However, SciChart3D is now throwing null reference exceptions when loading. I’ve included the screenshot. This occurs even with the 6.0.0-beta version.

Please advise.

0 votes

Hello Team,

We are going through the Trial version of Sci Chart and we are specifically interested in 2D Scatter Chart and Simple Scatter Chart 3D.

For 2D Chart we tried to bind up-to 1 Million data points and it worked perfectly and we can zoom in 2D Scatter Chart to view each and every point.

When we tried the same for Simple Scatter Chart 3D, it was competitively slower than 2D Chart.

can we do the same in Simple Scatter Chart 3D?

Currently the whole chart is zooming in. Is there a way so that user can zoom in (XAxis , YAxis ,ZAxis ) individually so that each and every point in the chart can be View-able ?


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

ICoordinateCalculator calculator = this.SciChart.XAxis.GetCurrentCoordinateCalculator();

During the first run, the xAxis and calculator both are not null nor empty, but only the calculator.size is 0. Only after the second run the size has value. Why is this happening? Or is there any alternative way to get the calculator.size?

  • Adrian Loh asked 4 months ago
  • last active 4 months ago
0 votes

I would like to create custom annotation combined with multiple annotations like attached picture.(Text + box + line * 3)

Are there any good solutions?

Now I am creating it with separate each annotations showed code below. In this way, it is difficlt to move or delete them with group.

            <s:TextAnnotation Foreground="Black" 
                              Text="XXX um" 
                              Y1="6" />
            <s:BoxAnnotation X1="84" X2="96" Y1="2" Y2="11" Background="#77FFFFFF" />

            <s:LineAnnotation Stroke="Black" X1="85" X2="95" Y1="3" Y2="3"/>
            <s:LineAnnotation Stroke="Black" X1="85" X2="85" Y1="6" Y2="3"/>
            <s:LineAnnotation Stroke="Black" X1="95" X2="95" Y1="6" Y2="3"/>

And one more question.

How to catch the event of adding annotation of view side from viewmodel?

Thank you.

0 votes


I have two questions,

First , when I using :

   sciChart.ExportToFile(SaveFileName, Core.ExportType.Jpeg, false,savingImageSize);  

In ContoursView ,this function works well, however in UniformMesh3DChart and SurfaceMeshContours it dosent work.
Only these parameters can be used:

    sciChart.ExportToFile(SaveFileName, Core.ExportType.Jpeg, false);  

as these parameters they dont work either:

    sciChart.ExportToFile(SaveFileName, Core.ExportType.Jpeg, true);  

Second, As “ExporToFile()” function, Can I export to file with ColorMap in UniformMesh3DChart and SurfaceMeshContours ?

0 votes

In many of our applications we will have a number of flags that need to get plotted with data, these are usually each just represented by a single bit in a 32 bit integer.

Would it be possible to write a custom render-able series that plots a trace for each bit, or alternately would it be possible to point multiple custom renderable series at an XyDataSeries and have each of them plot a single bit.

I have started to have a look into this but am not sure how much of the re-sampling process happens before draw, and if this would make this a pointless exercise.

In addition, how much performance is lost by creating custom renderable series (vs using a number of the FastLineRenderableSeries on a dx surface)

  • Hugoagogo asked 4 months ago
  • last active 4 months ago
0 votes

Is dashed line is available in Scichart Android?

0 votes


I am trying to render a HeatMap and align labels next to squares (see the attached image). However, I am running into two issues.

Firstly, I am using RenderTransform to shift labels so that they are aligned with the squares instead of being on the borders between them. It works, but does not look good as I resize the control.

Second, the axes render the last label outside the view. I tried setting VisualRange and VisualRangeLimit but it did not help. It hides the last data column (or row) and still displays the last label.

Any suggestions on how I can solve it?

I am attaching a sample project.

Thank you in advance!

0 votes

I need to know if the user is dragging the entire line annotation or just dragging one end.
If the user is dragging the entire line, I see this cursor:
enter image description here

If the user is dragging just one end, I see the hand cursor:
enter image description here

How can I detect this from the code behind?

I have looked at all of the properties and commands.


0 votes


I would like to plot a series as a solid line AND include error bars. The way I do this now is to define a single series:

var fSeries    = new HlcDataSeries<double, double>();
fSeries.SeriesName = $"My Series!";

And then two different ViewModels:

var fLineVm = new LineRenderableSeriesViewModel();
var fErrorVm = new ErrorBarsRenderableSeriesViewModel();

And set the data series to belong to both:

fLineVm.DataSeries = fSeries;
fErrorVm.DataSeries = fSeries;

This looks ok. But when I show the legend, I see “My Series” in the legend twice, and I can control the error bars separately from the line series.

What I want to happen is that I see the series a single time in the legend and if I turn it off (uncheck it) everything disappears.

Right now, i’m adding those two ViewModels to an ObservableCollection of IRenderableSeriesViewModels and then SeriesBinding to display them.

0 votes

I’m looking for a way to use the mouse wheel to adjust the range on whatever Y-Axis (NumericAxisViewModel) my mouse is over and came across a HasYAxisDragModifierIncludeAxis property.

I’ve set it to True and False and I don’t notice a difference on the axis.

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

I am doing all of my integration with SciChart using c# code.
Is there a way to simply customize the text of the Rollover modifier?

By default it shows

x: somevalue
y: somevalue
z: somevalue


when a data point is selected. I would like to simply change it to


Time: somevalue
Profit: somevalue

Is there a way to do this in pure c# without having to define xml templates etc?

0 votes


I am using VerticalLineAnnotation to point to a specific value of XAxis. I want to move this annotation by binding this X1 property and the SelectedX property of ViewModel. But even if SelectedX property was changed, the location of this annotation was not changed immediately. It was changed only after operating the chart (Zooming, etc).
Please let me know any solution to move an annotation immediately.


0 votes


I am working on Xamarin Android project with C#. Since having a legend within the chart causes problems with too many axis’ (no scrolling is available thus selecting different series in a legend becomes unavailable) and having a legend outside of chart area, anywhere we desire, would be of a preference, is there a tutorial on how could I achieve such a thing? Our project needs this functionality for both Android and iOS.

Would be grateful if anyone could help out with this issue.

Thank you in advance!

  • pauzu asked 4 months ago
  • last active 4 months ago
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

I could be able to set clip mode for X axis in ZoomPanModifier(), In the same way I would like to set clip mode Y axis but I couldn’t.
Is there is a way to do that?

  • sci chart asked 4 months ago
  • last active 1 month ago
0 votes


I have a simple digit chart with four possible values (0, 1, 2, 4).
I want to show all values on Y axis label, but it only shows 0 and 2, is there any solution?

Actual standing

0 votes

I recently needed to change the Rotation Angle of a polar plot from the default to 90 degrees. We have line annotations for different points on the polar plot. After the change, the annotation was still plotted on the default Rotation Angle.

I manually updated the points like this for the annotations to work:

var line = new LineAnnotation();

                var x1 = (double)NewSeries.DataSeries.XValues[0];
                var x2 = (double)NewSeries.DataSeries.XValues[1];

                if (x1.Between(0, 90) && x2.Between(0, 90))
                    x1 += 270;
                    x2 += 270;
                    x1 -= 90;
                    x2 -= 90;

                line.X1 = x1;
                line.X2 = x2;

Is there another way to update the annotation or is something like this the preferred way?

0 votes

Dear scichart support.

I’d like to make the two map (Heat map and bubble chart) mixed like attached picture.

Is it possible?

and also I’d like to confirm that it is possible to bind heatmap with observableCollection.

0 votes

When putting a chart into a listbox, the listbox doesn’t detect if the chart is clicked.

How can i change this, or there is any workarround to it? because i need it to select the parent ListBoxItem.

The problem is that when you put an event listener on the chart it doesn’t know where it is in the list, and when you put it in the listbox it doesn’t see it at all.


PS: I attached an example project where this happens.

0 votes

hello, i use RolloverModifier on my chart, can i hide Pointmarker?

0 votes
0 answers

I am using VerticalLineAnnotation to point to a specific value of XAxis. I want to move this annotation by binding this X1 property and the SelectedX property of ViewModel. But even if SelectedX property was changed, the location of this annotation was not changed immediately. It was changed only after operating the chart (Zooming, etc).
Please let me know any solution to move an annotation immediately.

Yo Kobayashi

0 votes

I am using RubberBandXyZoomModifier modifier to zoom the rectangular area of plot. It works fine when rectangle area is within the bound area of plot. But when rectangle area is goes out side the surface , zoom doesn’t happen
Please let me know any solution to zoom in this scenario.


  • deepak b asked 5 months ago
  • last active 5 months ago
0 votes


I have a chart that display time-series data and sometimes I have a few minutes of data, other times I have hours. All of the data points are taken every minutes. The X-Axis starts at 0 minutes and progresses from there.

My goal is to have the Axis Title say “Minutes” if there are < 120 points of data. If there are > 120 points of data then I want the Axis to be titled “Hours” and then divide the X-Axis label by 60.

I’ve started with this:

and it’s doing about what I expect. I check the AxisCore’s Range and if the range is > 120 I set the AxisCore.AxisTitle to “Hours”, otherwise “Minutes”. So far so good.

The problem is that doing it this way means I have labels such as “48.333333” for the hours.

If, on the other hand, when I create the XYSeries that I’m plotting I pass in the already-divided-by-60 values, SciChart seems to select whole numbers so instead of showing me something like “48.333333” it would either show me “48” or it would use 50 or another whole number for the tick marks.

So my question: Is this doable by just writing a custom LabelProvider? Do I need to write a custom Axis class instead? Or somehow tell the Axis that’s in-use to recalibrate itself by dividing all of the elements by 60 before computing tick marks?

In the images I’m attaching, one plot shows me plotting a series where when I create series the x-value is being divided by 60 before I call .Append() on the series. The other one shows what happens when I use my custom LabelProvider and divide by 60 when the Axis label is drawn.



0 votes

I am still experiencing the effects of this defect despite using v2.5.0.2598 of the Android libraries. Can someone please explain to me how to circumvent this behavior? It seems silly to require a base series that is ultimately going to be replaced by real-time updates.


  • TJ Cook asked 5 months ago
  • last active 4 months ago
Showing 101 - 150 of 3k results