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

Welcome to the SciChart Community Forums!

Please use the forums below to ask questions about SciChart. Take a moment to read our Question asking guidelines on how to ask a good question and our support policy

We also have a tag=SciChart on Stackoverflow.com where you can earn rep for your questions!

0 votes
0 answers
7 views

Hi, is there a way to get the number of major ticks lines and to calculate the difference of two consecutive major ticks lines values? Thanks.

0 votes
18 views

I have a DateTimeAxis.

While I can see a way to template the format the text for all the axis tick labels, I need a way to completely override what is being rendered for each item. I want, for example, today’s date to be in bold, and to apply other text/buttons below the axis label conditionally, depending on logic specific to that date.

Is this possible?

0 votes
0 answers
14 views

Hi

I am developing a Xamarin iOS application and I’m using a SCIPieChartSurface. I can create the chart and set its values, but is is not possible to auto-update the donut with new data.
I am trying to update the value by doing:

myDonut.MyPieSegment.Value = newValue;

But nothing happends…

I heard it was a bug in the API for Android a month ago, is this similar? Or am I doing something wrong?
Thanks in advance!

Best regards
Jonas

0 votes
10 views

I’ve enabled the Rollover on my chart, and I am trying to make a custom AxisLabelTemplate, which is easy to do if you are just looking to add some text/format around the AxisFormattedDataValue.

However, what i really want to do is to use the AxisInfo.DataValue to look up a specific string related to each of the Avis values, and set this as my label text;

ie, if my axis DataValues are “1, 2, 3, 4, 5″I want the rollover text to read “1 – Dog”, “2 – Cat”, “3 – Fish”, “4 – Mouse”, “5 – Aardvark”

Is this possible?

Thanks

0 votes
0 answers
20 views

Hello,

I’m writing regarding the IsCenterAxis property on the AxisBase object. I am creating biplots in my application and have set this property to true but the axes stay on the outside edge of the chart. Is there something else I must do to achieve this? I found a link in the forum about doing exactly this, but it was broken.

This is the broken link on the Navigation Pane page about “Placing Axis Central in the Chart”
https://www.scichart.com/documentation/v5.x/www.scichart.com/wpf-chart-example-central-xaxis-and-yaxis

Also, I need to draw a unit circle on my chart and I was curious what the best way to go about doing that would be.

Thank you

0 votes
0 answers
16 views

Hello!
I’m writting an app with using SciChart Surface. After little changes in XAML code, that had no effect on surface, those surface show nothing. I turned all made changes back to correct working version but this didn’t help. What can it be? I attach veiw of surface that a see now. (Theme is presetup “Electric”)

0 votes
0 answers
18 views

Hello Guys
I want to know how to set up a Xaxis major line manually.(NumericAxis )

For example,
If the range of the x-axis is 1 to 100

Major lines are 0,10,30,35,50 … 100

I want to set it freely.

1 vote
0 answers
35 views

Hello, SciChart Team!
i have an issue using mouse drag event ( RubberBandXyZoomModifier, ZoomPanMidifier). the message says “NullReferenceException in SciChart.Charting.dll ” or “Thread.cs not found” from time to time.
after some experiments i figured out that the app starts to crush after i change XAxis type .
i have a simple mvvm user control used to display both arrays of double and datebound data, XAxes of SciChart Surfase is bound to an observable collection of IAxis elements. if i need to change chart type i clear this collection and create an axis of desired type (DateTimeAxisViewModel or NumericAxisViewModel). after that the series can be added, but zooming causes crash with nearly to no info.

i attached a solution, which lacks only scichart dlls in order to run (hopefully), Window_Loaded method has a commented line which changes chart type and makes app crush on zooming, would be nice if you checked it out.
Thanks in advance!
Alexander

0 votes
0 answers
22 views

I’m trying to run my WPF with SciChart aplication in the separate AppDomain, but method SciChartSurface.SetRuntimeLicenseKey() is not working for me – no any exception, but in SciChart control I can see “Sorry! Your trial of SciChart has expired. Please contact sales if you require an extension.” instead of Chart.

In the default AppDomain it works fine.

I tried to run SetRuntimeLicenseKey method from both AppDomains – Default and separate, but without luck.

0 votes
0 answers
26 views

Hello!

I want to use three colors in Xaxis.
But I do not know how to use multiple colors at once.

can put multiple colors through Xaxes,
but when move the scroll bar, the Xaxes colors do not move together. (Top and Buttom Xaxes colors)
I want to move the colors of both Xaxes together. or want to assign multiple colors(over the 3 Colors) to one Xaxis.

You can see the code and graphs through the image.

Tell us how to use it.

Thank you!

0 votes
31 views

Hi,
I downloaded your Android Examples project to evaluate whether it’ll be a good fit for real time updates.
Replaced SetRunTimeLicenseKey call with my trial keys.
Designer time window displays Sorry!you have not set a LicenseKey message.
RunTime displays your trial license expired.

Any help on this would be great.

Thanks

  • Raji S asked 2 weeks ago
  • last active 2 weeks ago
0 votes
57 views

Hello,

I am currently taking a v5 test drive and noticed the following problem that would be a show stopper for me:

When syncing several chats via shared mouse events and shared visible x-Axis range I noticed that when zooming in that the chart axes get out of sync, sometimes significantly by several seconds on a CategoryDateTimeAxis, DateTimeAxis, but also apparently on numeric axes.

The error can easily be replicated when looking at your Example Suite , specifically the “Sync Multi Chart Mouse” sample. When you zoom into the chart you notice that the x-Axes on each chart are not aligned anymore. In this specific example when zooming in so that the minimum on the left side of the screen lies at around value 10 and the maximum at around 55 then moving with the mouse on the top chart to 52.44 shows a value of 52.53 on the lower chart. That is completely out of sync and gets worse on DateTime and Category DateTime axes.

Could anyone (and support) please chime in so I can understand what is going on and whether there is a fix for this or whether this is a bug that has been around for some time and cannot be adjusted within a reasonable amount of time?

I have been pulling my hairs over this and spent hours on different approaches, via ViewPortManager and the updating of shared visible range in both code and xaml. All to no avail and given the example code also exhibits the same issue I doubt it relates to a wrong implementation on my end.

Thanks a lot,
Matt W.

  • bbmat asked 2 weeks ago
  • last active 2 weeks ago
0 votes
40 views

i want o change SciChartInteractionToolbar default rubber band zoom mode to pan move .how to do it ?

0 votes
46 views

Greetings, I wonder if is it any way to save the annotations that I do in the charts?
Because when I leave the chart the annotations gone.

0 votes
45 views

I have a strip chart (see attached image), which uses VerticalLineAnnotation to mark events. I add my own AnnotationLabel with the Text showing the event id, and a ToolTip with detailed event information. I’m currently setting the LabelPlacement as Axis. I like the look of that AnnotationLabel style, but I’d really like it to be above the plot so it doesn’t clutter up the axis. Is there a nice way to do this?

0 votes
50 views

Dear all,

I have to perform some operation inside a chart ViewPortManger.BeginInvoke()

Is there a way to know when the BeginInvoke() method is completed or do I have to implement an custom event ?

regards

  • sc sc asked 3 weeks ago
  • last active 3 weeks ago
0 votes
68 views

Greeting, I want to do a custom cursor, something just like the image, but with candles (a candlestick chart) , and I wanna see all the info (Date, open, close, high, low). Is there any example of it?

0 votes
55 views

Hello!

We are using SciChart in our Android application, and our Crashlytics reports that it crashes:

Fatal Exception: java.lang.OutOfMemoryError
Failed to allocate a 4581372 byte allocation with 8664 free bytes and 8KB until OOM
dalvik.system.VMRuntime.newNonMovableArray (VMRuntime.java)
android.graphics.Bitmap.createBitmap (Bitmap.java:727)
com.scichart.drawing.utility.BitmapUtil.createFrom (SourceFile:46)
com.scichart.drawing.opengl.aa. (SourceFile:113)
com.scichart.drawing.opengl.n.createTexture (SourceFile:130)
com.scichart.drawing.common.AssetManagerBase.createTexture (SourceFile:158)
com.scichart.charting.visuals.rendering.a.a (SourceFile:84)
com.scichart.charting.visuals.rendering.a.a (SourceFile:54)
com.scichart.charting.visuals.rendering.RenderSurfaceRenderer.b (SourceFile:364)
com.scichart.charting.visuals.rendering.RenderSurfaceRenderer.a (SourceFile:357)
com.scichart.charting.visuals.rendering.RenderSurfaceRenderer.a (SourceFile:134)
com.scichart.charting.visuals.rendering.RenderSurfaceRenderer.onDraw (SourceFile:123)
com.scichart.drawing.opengl.RenderSurfaceGL$a.onDraw (SourceFile:228)
com.scichart.drawing.opengl.MyGLRenderer.b (SourceFile:293)
com.scichart.drawing.opengl.MyGLRenderer.onDrawFrame (SourceFile:277)
android.opengl.GLSurfaceView$GLThread.guardedRun (GLSurfaceView.java:1548)
android.opengl.GLSurfaceView$GLThread.run (GLSurfaceView.java:1259)

Can anyone help please?

0 votes
62 views

Hello,

I developed a program using scichart.

Unfortunatly, It can not work on some computers.

There are same hardware and OS(Window 7).

I found this problem when I use DirectX.

I have referenced your code. and My code had ChangeRenderSurface method.

but It can not work well…

I think the problem occurred when I called scichart3d.

What is wrong?

Does it need to install anything else?

If you have a solution , please tell me.

  • Guest asked 3 weeks ago
  • last active 3 weeks ago
0 votes
68 views

Hello,

I’m trying to change the background color from black to white. I’ve been adjusting every value I can but I just can’t find how to change the areas in black/grey in the image below to white. Can anyone help? 🙂

SC-ANDROID-2D-PRO

enter image description here

1 vote
223 views

Dear all,

In our application we have a chart that we need to explot into a BMP file at a given size.
For our scenario the process is as below :

1 – From the chart which is display to user at a default size we force the Width and Height of the chart to our desired size

mysciChart.Width = 480;
mysciChart.Height = 220;
mysciChart.UpdateLayout();

2 – We can then use the build in Export To file method to export the file

if (mysciChart.ActualWidth > 10 && mysciChart.ActualHeight > 10)
{
    mysciChart.ExportToFile(myBMPFile, ExportType.Bmp, false);
    }

The chart is then exported to correct size but it is not refresh with data as shown in picture attached

please note that the code above is executed in the Main UI thread dispatcher

Any idea how to get the chart properly render in Export, is there a kind of refresh something to call on the chart before export when we change its size ?

Thnaks for help

  • sc sc asked 4 weeks ago
  • last active 5 days ago
0 votes
55 views

Hey There.

I am new to sciChart and i am in ahurry to develop a realtime ECG App which takes data from Bluetooth. Ignore the harware part. Can anyone kindly prove me source code of realtime ecg monitoring or realtime linechart.

Thanx in advance

1 vote
66 views

Is there any way to change the y axis values according to the unit?

For example,

I am plotting the resistance value in Y axis, initially the values were in ohm and suddenly it changes to mega ohm since it is a live graph, then the values which we were shown in ohm should be converted to mega ohm and display in the graph.

Is there is any options available in Scichart in this scenario?

0 votes
0 answers
58 views

Hello,

ColumnChart: Autorange is not working if XyDataSeries contains 1 or 2 items.

The SDK example -> 2D Charts -> Column Chart with little modifications (the complete code is attached):

    private void OnClick(object sender, RoutedEventArgs e)
    {
        using (this.sciChart.SuspendUpdates())
        {
            for (int i = 0; i < ARRAY_SIZE; i++)
            {
                var val = _rnd.Next(-100, 100);
                Debug.WriteLine(val);
                _dataSeries.Update(i, val);
            }
        }
        sciChart.ZoomExtents();
    }

If ARRAY_SIZE is 1; any value; after “click me” button pressed (may be needed to press few times to catch this)
enter image description here

If ARRAY_SIZE is 2; the values are [27, 55]

enter image description here

If ARRAY_SIZE is 3 or more – columns are displayed OK for any values.

If I use

AutoRange="Never" VisibleRange="-100, 100"

this example works OK.

Question: please let me know how to make the ColumnChart working properly for one or two columns and AutoRange=”Always”

Thanks!

-Egor

1 vote
0 answers
69 views

Hi All,
I’m using the RubberBandXyZoomModifier and DataPointSelectionModifier together from the left mouse button; enabling and disabling them based on the left CTRL key being pressed (CTRL key down = select).

I’m seeing what I assume to be a focus issue on first mousing over off the chart area in that the chart area doesn’t attract focus, and thus recognise the ctrl key press, until there’s been a mouse button click. I’ve created an app to demonstrate and attached the XAML and code behind for it.

To see the behaviour, run the code and press the “does nothing” button to set focus to it. Mouse over the chart and press the CTRL key – the key press is not recognised. Click the left mouse button and the key press is now recognised. So far so good.
Now if you repeat the process but click and drag – the logic is caught between the two modifiers being enabled/disabled and the zoom selection is shown even though the CTRL key is down. There are other issues e.g. CTRL down and drag outside the chart can leave the selection modifier drag area marked on the chart while the zoom mode is in operation

I was thinking of something like setting focus or forcing a mouse click in response to the mouse over event but so far my attempts have failed – probably from doing the wrong thing in the wrong place – so, as usual, any and all suggestions are most welcome!

/Stuart

0 votes
74 views

Hii !!

I have extracted the ECG Sample Code from your source project and i want to update the same RealTime via Bluetooth. I am getting a nullpoint exception.
Below is my source code too along with exception.

Exception

06-18 15:44:02.708 15813-15813/com.advancetechindia.wirelessecg
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.advancetechindia.wirelessecg, PID: 15813
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.advancetechindia.wirelessecg/com.advancetechindia.wirelessecg.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method
‘com.scichart.extensions.builders.DataSeriesBuilder$XyDataSeriesBuilder
com.scichart.extensions.builders.SciChartBuilder.newXyDataSeries(java.lang.Class,
java.lang.Class)’ on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2561)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method
‘com.scichart.extensions.builders.DataSeriesBuilder$XyDataSeriesBuilder
com.scichart.extensions.builders.SciChartBuilder.newXyDataSeries(java.lang.Class,
java.lang.Class)’ on a null object reference
at com.advancetechindia.wirelessecg.MainActivity.(MainActivity.java:394)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1100)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2551)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6123) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)

Source Code

settingChart() is Called in onCreate() of Activity

//SciChart Work

protected final SciChartBuilder sciChartBuilder =
SciChartBuilder.instance();
private final static long TIME_INTERVAL = 20;

private final IXyDataSeries<Double, Double> series0 = sciChartBuilder.newXyDataSeries(Double.class,
Double.class).withFifoCapacity(3850).build();
private final IXyDataSeries<Double, Double> series1 = sciChartBuilder.newXyDataSeries(Double.class,
Double.class).withFifoCapacity(3850).build();

private ArrayList<Double> sourceData;
  
  private int _currentIndex;
  private int _totalIndex;
  
  private MainActivity.TraceAOrB whichTrace = MainActivity.TraceAOrB.TraceA;
  
  private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
  private ScheduledFuture<?> schedule;
  
  private volatile boolean isRunning = true;
  SciChartSurface surface;
  private void settingSciChart() {
      sourceData=new ArrayList<>();
      surface=(SciChartSurface)findViewById(R.id.ecg);
  
      initExample();
  }
  
  private void initExample() {
      UpdateSuspender.using(surface, new Runnable() {
          @Override
          public void run() {
              final IAxis xBottomAxis = sciChartBuilder.newNumericAxis()
                      .withVisibleRange(new DoubleRange(0d, 10d))
                      .withAutoRangeMode(AutoRange.Never)
                      .withAxisTitle("Time (seconds)")
                      .build();
  
              final IAxis yRightAxis = sciChartBuilder.newNumericAxis()
                      .withVisibleRange(new DoubleRange(-0.5d, 1.5d))
                      .withAxisTitle("Voltage (mV)")
                      .build();
  
              final IRenderableSeries rs1 = sciChartBuilder.newLineSeries()
                      .withDataSeries(series0)
                      .build();
  
              final IRenderableSeries rs2 = sciChartBuilder.newLineSeries()
                      .withDataSeries(series1)
                      .build();
  
              Collections.addAll(surface.getXAxes(), xBottomAxis);
              Collections.addAll(surface.getYAxes(), yRightAxis);
              Collections.addAll(surface.getRenderableSeries(), rs1, rs2);
          }
      });
  
      schedule = scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
          @Override
          public void run() {
              UpdateSuspender.using(surface, appendDataRunnable);
          }
      }, 0, TIME_INTERVAL, TimeUnit.MILLISECONDS);
  }
  
  private final Runnable appendDataRunnable = new Runnable() {
      @Override
      public synchronized void run() {
          if (isRunning) {
              for (int i = 0; i < 10; i++) {
                  appendPoint(400);
              }
          }
      }
  };
  
  private synchronized void appendPoint(double sampleRate) {
      if (_currentIndex >= sourceData.size()) {
          _currentIndex = 0;
      }
  
      // Get the next voltage and time, and append to the chart
      double voltage = sourceData.get(_currentIndex);
      double time = (_totalIndex / sampleRate) % 10;
  
      if (whichTrace == MainActivity.TraceAOrB.TraceA) {
          series0.append(time, voltage);
          series1.append(time, Double.NaN);
      } else {
          series0.append(time, Double.NaN);
          series1.append(time, voltage);
      }
  
      _currentIndex++;
      _totalIndex++;
  
      if (_totalIndex % 4000 == 0) {
          whichTrace = whichTrace == MainActivity.TraceAOrB.TraceA ? MainActivity.TraceAOrB.TraceB : MainActivity.TraceAOrB.TraceA;
      }
  }
  
  enum TraceAOrB {
      TraceA,
      TraceB
  }
  
1 vote
70 views

I would like to dynamically add and remove columns from a ColumnRenderableSeriesViewModel in code behind.

I am using MVVM and the SeriesBinding. I assigned a XyDataSeries<double, double> to the ColumnRenderableSeriesViewModel .DataSeries.

The chart initially draws all the bars for each item in the XYDataSeries, but If I append or remove one of them, the chart does not update and show the new bar or remove the old bar.

Here is my XAML:

        <s:SciChartSurface RenderableSeries="{s:SeriesBinding RenderableSeries}">
            <s:SciChartSurface.XAxis>
                <s:NumericAxis />
            </s:SciChartSurface.XAxis>

            <s:SciChartSurface.YAxis>
                <s:NumericAxis />
            </s:SciChartSurface.YAxis>
        </s:SciChartSurface>

And some of my view model:

using SciChart.Charting.Model.ChartSeries;
using SciChart.Charting.Model.DataSeries;
using System.Collections.ObjectModel;

namespace ChartExample {
    public class ChartViewModel {
        ColumnRenderableSeriesViewModel _seriesViewModel = new ColumnRenderableSeriesViewModel();
        XyDataSeries<double, double> _dataSeries = new XyDataSeries<double, double>();

        public ChartViewModel() {
            RenderableSeries.Add(_seriesViewModel);
            _seriesViewModel.DataSeries = _dataSeries;
        }


        public ObservableCollection<IRenderableSeriesViewModel> RenderableSeries { get; } = new ObservableCollection<IRenderableSeriesViewModel>();


        public void AddSeries() {
            _dataSeries.Append(_dataSeries.Count, _dataSeries.Count);
        }


        public void RemoveSeries(int seriesIndex) {
            _dataSeries.RemoveAt(seriesIndex);
        }
    }
}

Can you please tell me what I might be doing wrong?

  • Doug Witt asked 1 month ago
  • last active 4 weeks ago
0 votes
66 views

Hello,

I’m working at displaying a map using FastNonUniformHeatmapRenderableSeries. I want to make it looks blurry, so there will be smooth transition between inner edges.

How can I do it?

Thanks in advance

0 votes
71 views

Hello,

question about FastColumnRenderableSeries:
assuming the UseUniformWidth is set to True (all columns are same width) and Series already displayed: how I could get the actual width for one (any) column from code?

I.e. I do not want to use GetColumnWidth(IPointSeries points, IRenderPassData renderPassData) to computes the width of the columns to be drawn.

Just need to get the actual width for column already drawn.
From code.

Thanks!

-Egor

1 vote
62 views

Hello,

one more question please;
Please see the pict below (same SDK example: 2D charts-> Column Chart)

[enter image description here

Just added the Legend and Rollover:

            <s:SciChartSurface.ChartModifier>
            <s:ModifierGroup>
                <s:ModifierGroup>
                    <s:LegendModifier x:Name="LegendModifier" 
                                      ShowVisibilityCheckboxes="False" 
                                      ShowLegend="True" 
                                      Orientation="Vertical" Margin="10"
                                      HorizontalAlignment="Right" 
                                      ShowSeriesMarkers="True"  />
                    <s:RolloverModifier x:Name="RolloverModifier" 
                                        ExecuteOn="MouseMove" 
                                        ShowTooltipOn="MouseHover" 
                                        IsEnabled="True" />
                </s:ModifierGroup>
            </s:ModifierGroup>
        </s:SciChartSurface.ChartModifier>

I’d like to keep Series Name in one place – on Legend and remove it from Rollover tooltip text.
I.e. tooltip shall be “13.7” in this case.

I found how to format the Legend (LegendModifier.LegendItemTemplate SciChart WPF v5 SDK User Manual)
But didn’t find the similar way for Tooltip.

Could you please let me know how to achieve this?

Thanks!

-Egor

-1 votes
77 views

When the axisX.VisibleRange.Max is 5000 and the axisX.VisibleRange.Min is 4600, now I execute these program statements:
double max = Convert.ToDouble(axisX.VisibleRange.Max);
axisX.VisibleRange.SetMinMax(max-5000, max);
The vertical grid line become like the figure 2.png. How can I solve it?

0 votes
66 views

1) About VerticalLineAnnotation, when I move the vertical line, which event I can use to get real time data?
2) Do the chart lib have the full method to calculate the Fast Fourier Transformation?

0 votes
68 views
  1. How can I make the gap always the same between the two verticalLineAnnotations? In other words, when i move one of the verticalLines, another verticalLine also move follow the previous verticalLine and the gap between them is the same.
  2. When I move the vertical line, which corresponding event of VerticalLineAnnotation the I can use to get realtime data.
0 votes
57 views

I am evaluating the SciChart package and I am trying to show a graph of data. The data changes about every 500ms. I have the code as shown below.

My XAML code is:

                            <s:SciChartSurface  Name="Chart1">
                            <s:SciChartSurface.RenderableSeries>
                                <s:FastLineRenderableSeries DataSeries="{Binding SpectrumDataSciChart}" Name="lineRenderSeries"/>
                            </s:SciChartSurface.RenderableSeries>
                            <s:SciChartSurface.XAxis>
                                <s:NumericAxis ScientificNotation="None" />
                            </s:SciChartSurface.XAxis>
                            <s:SciChartSurface.YAxis>
                                <s:NumericAxis  />
                            </s:SciChartSurface.YAxis>
                        </s:SciChartSurface>

SpectrumDataSciChart is defined in the view model (.cs) as below:

        private XyDataSeries<double, double> _spec2;
    public XyDataSeries<double,double> SpectrumDataSciChart
    {
        get { return _spec2; }
        set { _spec2 = value; NotifyPropertyChanged(); }
    }

I see the correct plot but then the plot is removed (just a blank chart) and then it appears again. Seems like it is when I update the data (setting SpectrumDataSciChart to a new set of values). I don’t see this behavior with other vendors charts and wondering if I need to set something on the chart or bind differently. I tried using “FastLineRenderableSeriesForMvvm” (as I am using MVVM with WPF) also but it does the same thing. Any ideas?

0 votes
71 views

I’m playing with the DatPointSelectionModifier which seems mostly what i need but I have two problems as follows:

1/ I have started a selection operation by dragging over an area containing some points and I decide that I don’t want that area after all and want to cancel the operation (much like file explorer file dragging – hitting escape cancels the operation) – How do I do that?

2/ I have a set of selected points and drag to select another set which overlaps the first set. I would like the any points in the overlap to invert from selected to unselected and vice versa. How would I know which points are encompassed by the drag operation so i can work out the overlap?

Thanks for any suggestions
/Stuart

0 votes
102 views

Hi
Is there a way to just change the values of the pie segments so it get updated on the donut chart.
If I remove and add the pie segments again it works, is this the correct way?

Also I can’t find any documentation around the donut for android/xamarin

regards
Per

0 votes
0 answers
68 views

Hi,
Im tryin to create an effect where I have a static point on the Y Axis and I want to perform zoom in, so what I did is to increase or decrease the Max visible range, what I’m left with is the rubber band effect where my static point isn’t static anymore because the point in “Stretching” in the direction I’m zooming.

-1 votes
0 answers
51 views

The two pictures are part of the same column, but the time is different.
How to solve it?

1 vote
162 views

I think this is a pretty simple question but i am not sure what i am missing.I have a toggle button on my legend that is intended to allow the users to select all the series or deselect all the series.
the button essentially goes through the Renderable series view models and set the IsSelected to either true or false, this approach however, doesn’t work. I looked at the SelectionModifier and i can see that has a protected DeselectAll method and i am thinking to leverage that to solve this use case.

what is the best solution to accomplish this? isn’t this functionality something that perhaps be standard and could just be turned on?

0 votes
74 views

Hello,

one more question.
Same example from your SDK – 2D charts, Column Chart

How could I change the width / color for one line only:
enter image description here

I.e. for X-line (Y = 0).
The rest X lines shall remain the same.

Thanks!

-Egor

0 votes
75 views

Graph type “RangeBar” of Microsoft “MSChart” control and Does the graph type with the same function exist in “SCICHART”?
If it does not exist, is it possible to reproduce “RangeBar”?
I would be happy if you could have a Chart like the image.
Best regards.

1 vote
77 views

To whom this may concern:

I’d like to refer to the “Spline Scatter Line Chart” example in the SciChart Examples package. If I were to make this a CustomRenderableSeriesViewModel that I can set in a ViewModel class, how would I go about doing that?

I am using SciChart v4, and here’s what I know so far:

  1. CustomRenderableSeriesViewModel : BaseRenderableSeriesViewModel
  2. ViewType = typeof(CustomRenderableSeries)

My code so far is:

public class CustomRenderableSeriesViewModel : BaseRenderableSeriesViewModel
{
    public override Type ViewType => typeof(CustomRenderableSeries);
}

How would I go about setting the IsSplineEnabled property of the CustomRenderableSeries through the CustomRenderableSeriesViewModel class?

FYI: I have looked here and the Worked Example – CustomRenderableSeries in MVVM link goes to the SciChart v5 User manual.
Additionally, this is a duplicate of this issue on Stack Overflow (since I thought you were still fielding questions on there). Feel free to answer on either or both.

Can you please advise?

  • Ari Sagiv asked 2 months ago
  • last active 1 month ago
-1 votes
0 answers
70 views

For every 5 seconds I’m adding 5,00,000 data points to line Series but on zoom and other mouse handler gets hanged on adding data.

2 votes
77 views

Hello, @scichart team,

one question please for Column Chart (2D; WPF).
Based on on the example from your SDK for Column Chart (2D Charts – Column Chart).
No changes to the code at all;

enter image description here

My need is to display each “X” value on X axis;
I.e. right now it is “0, 2, 4, 6 etc”
But I need “0, 1, 2, 3, 4, 5 etc.”
I.e. no changes expect this one.

I played with https://www.scichart.com/documentation/v5.x/SciChart.Charting~SciChart.Charting.Visuals.Axes.AxisCore_members.html and with the custom NumericLabelProvider but didn’t find how to make this.

Please suggest how to achieve this.

Thanks!

-Egor

0 votes
258 views

our app is about Futures. we will buy license for IOS and Android.

we found some question.

so we need show very small values, like Euro exchange’s values will be from 1.1981 to 1.2008.
its Tick Size is 0.0001 .

but we use LogarithmicNumericAxis with OhlcDataSeries<Date, Double> , surface still linear scale.

other question.
how to custom LogarithmicNumericAxis’s “TextFormatting” like “$0.0000”

  • Rey Liang asked 2 months ago
  • last active 2 months ago
0 votes
166 views

In Xamarin.IOS when you set the legend to Horizontal and Top it will create a legend at the top then allow you to scroll horizontally to see all your LineSeries. In Xamarin.Android when you have more Series than can originally fit on the screen, the legend malfunctions and takes up the entire screen. Picture will be attached.

0 votes
0 answers
149 views

Hi All,

I’ve been trying to get SciCharts and the IOS UIScrollview to work together and have been running into a couple of issues.

The main storyboard has 7 SciChart surfaces plotting realtime data embedded inside a single UI scrollview controller.

1) Charts don’t render when scrollview is actively scrolling

Everything works fine during normal operation and we don’t try to scroll.

Once a finger is placed on the screen, the SciCharts surface stops redrawing. This could be due to the fact that the ‘Scroll’ thread is handled in the UITouch thread and perhaps has higher priority. I don’t know if there is anyway to change the priority of the render routine. I can confirm that everything until ‘Update Data’ and Chart.InvalidateElement() is being called during a scroll action.

2) Scrolling is disallowed when Chart surface is as large as scrollview

This may not be exactly due to scichart but if anyone faced this problem before it would help. If you attempt to scroll when the SciChartSurface is as large as the parent UIScrollView, it doesn’t scroll. Almost like the SciChart surface has the priority of touch and doesn’t let the scroll view see the scroll.

I would greatly appreciate if anyone successfully got UIScrollview and Scicharts working well together. I might be doing a bunch of rookie mistakes.

Cheers,
Mithrandir

Adding a quick update,

I could fix (2) by disable User Interactions of the Chart.

Note that you can’t simply disable this in the Main Storyboard, this has to be done programmatically by calling

ChartName.isUserInteractionEnabled = false

So the only real issue is (1), getting the chart to render while scrollview is active.

0 votes
215 views

I have just learned how to use sci-chart framework with tutorials.
And I tried to add values from bluetooth as realtime chart as shown in tutorials.
I have finished receiving data from a Bluetooth connection.
However, using scichart to represent this data in real time is hard to solve by looking at the tutorial alone.
Does anyone have any idea how to use real-time tutorials to teach you how to represent your own data, not the example sine graph?

The code below is what I tried and is wrong.

import UIKit
import CoreBluetooth
import SciChart

let maestroServiceCBUUID = CBUUID(string:”495sdfd3-FE7D-4AE5-8FA9-9FAFD205E455″)
let maestroBrainDataCBUUID = CBUUID(string: “4953sdf3-1E4D-4BD9-BA61-23C647249616”)
class HRMViewController: UIViewController {
var sciChartSurface: SCIChartSurface?

var lineDataSeries: SCIXyDataSeries!
var scatterDataSeries: SCIXyDataSeries!

var lineRenderableSeries: SCIFastLineRenderableSeries!
var scatterRenderableSeries: SCIXyScatterRenderableSeries!

var timer: Timer?
var phase = 0.0
var i = 0

@IBOutlet weak var brainRateLabel: UILabel!

var centralManager: CBCentralManager!
var maestroPeripheral:CBPeripheral!
override func viewDidLoad() {
super.viewDidLoad()

sciChartSurface = SCIChartSurface(frame: self.view.bounds)
sciChartSurface?.autoresizingMask = [.flexibleHeight, .flexibleWidth]
sciChartSurface?.translatesAutoresizingMaskIntoConstraints = true

self.view.addSubview(sciChartSurface!)


let xAxis = SCINumericAxis()
xAxis.growBy = SCIDoubleRange(min: SCIGeneric(0.1), max: SCIGeneric(0.1))
sciChartSurface?.xAxes.add(xAxis)

let yAxis = SCINumericAxis()
yAxis.growBy = SCIDoubleRange(min: SCIGeneric(0.1), max: SCIGeneric(0.1))
sciChartSurface?.yAxes.add(yAxis)

createRenderableSeries()
addModifiers()


centralManager = CBCentralManager(delegate: self , queue: nil)

// Make the digits monospaces to avoid shifting when the numbers change

}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

if nil == timer{
  timer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: updatingDataPoints)
}

}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

if nil != timer{
  timer?.invalidate()
  timer = nil
}

}

func updatingDataPoints(timer:Timer){

i += 1

lineDataSeries.appendX(SCIGeneric(i), y: SCIGeneric(cos(Double(i)*0.1 + phase)))
scatterDataSeries.appendX(SCIGeneric(i), y: SCIGeneric(cos(Double(i)*0.1 + phase)))

phase += 0.01

sciChartSurface?.zoomExtents()
sciChartSurface?.invalidateElement()

}

func createDataSeries(_brainwave2:Double){
// Init line data series
lineDataSeries = SCIXyDataSeries(xType: .double, yType: .double)
lineDataSeries.fifoCapacity = 500
lineDataSeries.seriesName = “line series”

// Init scatter data series

// scatterDataSeries = SCIXyDataSeries(xType: .double, yType: .double)
// scatterDataSeries.fifoCapacity = 500
// scatterDataSeries.seriesName = “scatter series”

for i in 0...500{
  lineDataSeries.appendX(SCIGeneric(i), y: SCIGeneric(_brainwave2))

// scatterDataSeries.appendX(SCIGeneric(i), y: SCIGeneric(cos(Double(i)*0.1)))
}

i = Int(lineDataSeries.count())

}

func createRenderableSeries(){
lineRenderableSeries = SCIFastLineRenderableSeries()
lineRenderableSeries.dataSeries = lineDataSeries

scatterRenderableSeries = SCIXyScatterRenderableSeries()
scatterRenderableSeries.dataSeries = scatterDataSeries

sciChartSurface?.renderableSeries.add(lineRenderableSeries)
sciChartSurface?.renderableSeries.add(scatterRenderableSeries)

}

func addModifiers(){
let xAxisDragmodifier = SCIXAxisDragModifier()
xAxisDragmodifier.dragMode = .pan
xAxisDragmodifier.clipModeX = .none

let yAxisDragmodifier = SCIYAxisDragModifier()
yAxisDragmodifier.dragMode = .pan

let extendZoomModifier = SCIZoomExtentsModifier()
let pinchZoomModifier = SCIPinchZoomModifier()

let rolloverModifier = SCIRolloverModifier()
let legend = SCILegendModifier()

let groupModifier = SCIChartModifierCollection(childModifiers: [xAxisDragmodifier, yAxisDragmodifier, pinchZoomModifier, extendZoomModifier, legend, rolloverModifier])

sciChartSurface?.chartModifiers = groupModifier

}

func brainwaveReceived(_ brainWave:Double){
let brainWave = brainWave * 3.3 / 65536
brainRateLabel.text = String(brainWave)
print(“brainwave: (brainWave)”)
}

}

extension HRMViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {

case .unknown:
  print("central.state is . unknown")
case .resetting:
  print("central.state is . resetting")
case .unsupported:
  print("central.state is . unsupported")
case .unauthorized:
  print("central.state is . unauthorized")
case .poweredOff:
  print("central.state is . poweredOff")
case .poweredOn:
  print("central.state is . poweredOn")
  centralManager.scanForPeripherals(withServices:nil)
}

}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print(peripheral)
if peripheral.name == “MAESTRO1” {
// maestroPeripheral = peripheral
centralManager.stopScan()
maestroPeripheral = peripheral
maestroPeripheral.delegate = self
central.connect(maestroPeripheral)
}

}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print(“Connected!”)
maestroPeripheral.discoverServices([maestroServiceCBUUID])
}
}

extension HRMViewController:CBPeripheralDelegate{
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
guard let services = peripheral.services else {return}
for service in services {
print(service)
peripheral.discoverCharacteristics(nil, for: service)
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
guard let characteristics = service.characteristics else {return}

for characteristic in characteristics {
  print(characteristic)
  if characteristic.properties.contains(.read){
    print("\(characteristic.uuid): properties contain .read")
  }
  if characteristic.properties.contains(.notify){
    print("\(characteristic.uuid): properties contain .notify")
    peripheral.setNotifyValue(true , for: characteristic)
  }
}

}

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic,
error: Error?) {
switch characteristic.uuid {
case maestroBrainDataCBUUID:
let wave = Double(brainData(from: characteristic))*3.3/65536
createDataSeries(_brainwave2:wave)

  default:
  print("Unhandled Characteristic UUID: \(characteristic.uuid)")
}

}
private func brainData(from characteristic: CBCharacteristic) -> Int {
guard let characteristicData = characteristic.value else { return -1 }
let byteArray = UInt8

let firstBitValue = byteArray[0] & 0x01
if firstBitValue == 0 {
  // Heart Rate Value Format is in the 2nd byte
  return Int(byteArray[1])
} else {
  // Heart Rate Value Format is in the 2nd and 3rd bytes
  return (Int(byteArray[1]) << 8) + Int(byteArray[2])
}

}

}

-1 votes
0 answers
153 views

When i go to zoom on my YAxis while a YAxis VisibleRangeLimit is baing set, the zoom does not work correctly. Once the zooming is finished it will reset back to the range limit. If i remove the range limit, the zooming then works as expected.

Showing 1 - 50 of 2k results