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

1 vote


I have this app :

I would like the graph below (the XyDataSeries) to be drawn from right to left (currently it is drawn from left to right)

I have this function to draw :

val audioDS = XyDataSeries<Int, Short>().apply { fifoCapacity = audioStreamBufferSize }
fun generateAudioStream(buffer: ShortValues) {
           val longs = IntegerValues(buffer.size())
           for (i in 0 until buffer.size()) {
               longs[i] = time++
           audioDS.append(longs, buffer)

And my graph is initialized like this :

public void initGraph(Context context) {
    Log.d(TAG, "initGraphs");
    SciChartSurface audioStreamSciChart = new SciChartSurface(context);
    xAxis = new NumericAxis(context);
    xAxis.setVisibleRange(new DoubleRange(startAudioStreamRange, endAudioStreamRange));

    NumericAxis yAxis = new NumericAxis(context);
    yAxis.setVisibleRange(new DoubleRange(new DoubleRange((double) Short.MIN_VALUE, (double) Short.MAX_VALUE)));


    float lineThickness = SciChartExtensionsKt.dip(context, 1.0F);

    FastLineRenderableSeries f = new FastLineRenderableSeries();
    f.setStrokeStyle(new SolidPenStyle(ColorUtil.Grey, true, lineThickness, null));
    scichartLayout = mAudiostream.getChildAt(0);

I understand that, currently it’s drawn from left to right because i append data on my audioDS, is it possible to make it draw from right to left instead ?

Best regards,

0 votes


I have a problem with drawing of 2d data in a map. The metadata for the respective points change when you zoom in or move the map.

LandmarkCollection landMarks = new LandmarkCollection();
            NAVLandmarkCollection landmarkCollection = NAVLandmarkCollection.Deserialize(@"C:\Users\Serva_admin\Documents\AGV-Viso\VS_Projekte\AGV-Viso-2\AGV-Viso-2\16-02-06-18-23-ING.lmf");
            for (int i = 0; i < landmarkCollection.Count; i++)
                NAVLandmark lm = landmarkCollection.get(i);
                landMarks.Landmarks.Append(lm.X, lm.Y, new Serva.Base.Navigation.Client.NavigationPlugin.MetaData.LandmarkName("G-" + i, lm.X, lm.Y));


This function is called once and the data does not change anymore.

I uploaded the pictures of my problem in the attachment.
You can see the Name of the Point in the top-left corner changed.

I hope you can me help.

  • Tim Nowak asked 3 months ago
  • last active 3 months ago
1 vote

I saw in the examples where a “gain” and “loss” affected the color of a series. This took a bit of time; however, I figured out was you were doing and was able to implement it.

Please see the attached image. There are 2 sections in my series that are “Green” whereas the remainder of the series is gray. I’d like to be able to do 2 things ONLY to the green area.

  • Show point markers ONLY on the points in the green area.
  • Increase the stroke thickness.
0 votes

How can I append a float array to an XYDataSeries?

I’m developing an app with scichart. I receive buffers of 20 floats in a float[] type. How can I append this buffer to an XYDataSeries? The chart is updated in real time each time one Buffer is received with FIFO capacity.

What I need is something similar to:

void updateChart(final float[] a, final float[] b) {
    UpdateSuspender.using(surface, new Runnable() {
            public void run() {
                // Append the new data received
                // Zoom series to fit the viewport to the x variable

Is this possible?
Thank you in advance

0 votes

I have introduced a real time chart in my WPF Application. The chart starts plotting points from the left of the chart ( close to Y-Axis).

I would like it to start plotting from the right of the chart ( Away from Y-Axis) and as when points start adding up, I would like the points to slide to the left ( Towards Y-Axis).

Similar to how performance tab in Task Manager displays the CPU utilization.

0 votes

Looking at the documentation I’ve figured out how to style the content of the tooltip. But I can’t seem to figure out how to style the container.

You can see in the attached image the automatic blue background that matches the series. I would like to style it with our own style which is the dark background and then BorderBrush that matches the series color.

<DataTemplate x:Key="DigitalToolTipTemplate" DataType="s:XySeriesInfo">
                    <Border Style="{StaticResource BorderStyle}" BorderBrush="{Binding Stroke}">
                        <TextBlock Text="{Binding SeriesName, StringFormat='{}{0}'}" />

This seems to style only the inner contents of the tooltip but not the whole tooltip.

Also note the BorderBrush binding (not sure if this is correct to get the series color).

Now using the following code (which is working) — Now the only thing I need to figure out is what to bind for the stroke to get the series color as the border stroke.

<Style x:Key="DigitalToolTipStyle" TargetType="s:TooltipControl">
                    <Setter Property="Template">
                            <ControlTemplate TargetType="s:TooltipControl">
                                <Border Style="{StaticResource BorderStyle}" BorderBrush="{Binding Stroke}">
                                    <ContentPresenter Content="{TemplateBinding DataContext}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
0 votes

Hi I currently do need to get two things for which I currently have no clue how to get it.

I’m using FastLineRenderableSeries and XyDataSeries<double,double> in SciChart 2D.

1st: The absolute min and max values from an curve.

What I found is that I can get the YMax/YMin and XMax/XMin, but that is not what I need.

-> I need to get the “Point” (x, and y value) where the maximum/minimum is.

2nd: I Need the X-value of an Y-Value (or the list of x-values if the y-value does exist more than once).
Lets say I have the y-Value “5” and want to know at which x-value this is.

Is there a fast and elegant way to get this information from existing RenderableSeries via the SciChart API, or Do I need to get this information from my data source before appending the curves?


  • Bernd Held asked 2 years ago
  • last active 2 years ago
1 vote


In my 2D scatter chart, I’d like to set markers in a defined region of x and y to a different colour from the rest of the markers. I know I can do this with two data series (where one series is for the points within the region, and the other series is for all the other points) but is there a way to do it with one data series?

I was expecting to be able to do it in a similar way as I did it for a 3D scatter, setting the colour of the marker when I append it to the series:

xyzDataSeries3D.Append(x, y, z, new PointMetadata3D(color, 1));

Thanks for any help,

0 votes

Is there an convenient way to convert an existing IXyDataSeries<Date, Double> to IOhlcDataSeries<Date, Double> ?
How do Scichart collapse Candlesticks (and presumably merging with neighbouring candlesticks) when its very zoomed out e.g. 1 year period

  • abc def asked 2 years ago
  • last active 2 years ago
0 votes

Here’s the situation:
Our app has a viewmodel with an XyDataSeries Property bound to the plot. We’ve overridden DataPointSelectionModifer to allow us to trigger calculations when the selected points are changed. This overridden modifier is not instantiated by nor is it directly aware of the viewmodel; it is referenced only in the view xaml.

When changing between datasets we replace the contents of the XyDataSeries Property. Afterwards we are experiencing NullReferenceExceptions in DataPointSelectionModifier.SelectManyPoints(). This occurs whether we replace the contents of the data series or we set a completely new XyDataSeries object into the property.

It appears that the DataPointSelectionModifier.SelectedPointMarkers collection is no longer properly synced to the plot’s XyDataSeries. The size of the the collections are different and with the original DataSeries being garbage-collected the DataPointInfo.DataPointMetadata references are null. So we attempt to dial in a new selection and the deselection of this orphaned null metadata raises exceptions.

Is there some secret-sauce to keeping these collections in line?
Any and all suggestions are greatly appreciated.

1 vote

I have a WPF application where I am using SciChart to display data placed in an XyDataSeries, which is contained in a FastLineRenderableSeries.

I also have a ListView that displays the same data.

I want to place a marker on the data point selected by the user from the ListView. I would like to use the inverted triangle as the marker.

I know how to identify the item in the data series, but how do place a marker on that single point in the data series?


  • Dave Leach asked 3 years ago
  • last active 3 years ago
0 votes


I’m having an issue with ZoomExtentsY, where it throws the exception InvalidOperationException.

My software reads sensordata from a stream and appends this data to the SciChart XyDataSeries<DateTime, double>.
I’m plotting a moving window of the data +/- 5 seconds which moves at 1 x speed of time forward. I use ZoomExtentsY to make the moving window show all the available data in that +/- 5 second segment in the Y-direction.

As I haven’t found any pattern on when/why the exception happens, it occurs rather random. Sometimes I can playback fine, but other times the exception happens within seconds of opening the SciChart-plot.

The exception message was: ‘Enumerator version is invalid’

Here is the StackTrace:

at A.1..()
at System.Linq.Enumerable.Any[TSource](IEnumerable1 source)
at Abt.Controls.SciChart.Model.DataSeries.DataSeries2.ZB(IRange C, SearchMode D, SearchMode I)
at Abt.Controls.SciChart.Model.DataSeries.DataSeries2.GetWindowedYRange(IRange xRange, Boolean getPositiveRange)
at Abt.Controls.SciChart.Visuals.RenderableSeries.BaseRenderableSeries.GetYRange(IRange xRange, Boolean getPositiveRange)
at Abt.Controls.SciChart.Visuals.Axes.AxisBase.GetWindowedYRange(IDictionary2 xRanges)
at Abt.Controls.SciChart.Visuals.SciChartSurface.ZB(IDictionary2 C, TimeSpan D
at Abt.Controls.SciChart.Visuals.SciChartSurface.ZoomExtentsY()

Best regards

  • Stian Dahl asked 3 years ago
  • last active 3 years ago
1 vote

I have a lot of data to process and I don’t want UI to get frozen. So I’d like to add data in a background thread.

Is it possible to append data to XyDataSeries in a separate thread? Is it supposed to handle this safely?

2 votes

I have some XyDataSeries<DateTime, double> showing some data on my chart. Also I have 2 vertical line annotations (red and blue) where I know the two DateTime values.

Is there a effective way to get the double values between this range of each XyDataSeries.

Regarrds Markus

  • Rawukal asked 5 years ago
  • last active 5 years ago
Showing 14 results
This template supports the sidebar's widgets. Add one or use Full Width layout.