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


I have the following realtime scenario: I want to combine a normal signal series with an event series. I tried to use a FastlineRenderableSeries for the signal and a XyScatterRenderableSeries to mark events. I selected a certain FIFO buffer size to show the signal in an adequate time frame. But now the problem is how to select the adequate FIFO size for the events. I can not predict how many events will occur in a certain time and the fixed FIFO of the event series prevents a good visualization of signals and events together.
Desirable would be that the FIFO size selection of the signal series defines the “rolling” value range and the event series
buffer is drawn related to this x axis range (means: the events that have lower x values than the lower bound of the signal range will
be removed from the event series buffer).
I know that I could blow up event series with dummy points (NA-valued) to reach the same point count that the signal has but that would be an enormous waste of memory and computing performance. I have up to 50 kHz sampling rate for the signal and many signal channels.
Do you have any advice that you can give?

  • You must to post comments

Hi Janko,

How many points are you looking to plot? Using double.NaN’s is not that bad an idea, if the point count is say 10 million at most. Above that yes you will start to use too much RAM and CPU but remember RAM is cheap and developer time is not 🙂

Another idea is – what about not using FIFO at all for the scatter series but manually removing points once they are off screen. Remove in blocks using RemoveRange to get best performance.

Finally, we have an annotation API to display event bullets, which you can see here: http://;component/Examples/IWantTo/AnnotateAChart/OverlayTradeMarkers/TradeOverlayExampleView.xaml

This will work well even with a few thousand markers. It will automatically remove when they go off screen. It will not resample and cluster if you zoom out but theoretically, you could achieve this too with some sort of intermediary ChartModifier (e.g. see here for using ChartModifiers to manage annotations). http://

Best regards,

  • janko
    Hi Andrew,This plot is the focused part (one channel) of a data plot. Inside this plot I will have up to 3 million points for the signal and a lesser number of points for the event trace. But the overview part of it - visualized with a self made summarizing view - has to handle up to 256 channels (768 million points) ... and all that is realtime - every second 50000 new signal points come in per channel (12.8 million points) and have to be added, analyzed and the complete set redrawn. Therefore the memory and computing footprint matters - unfortunately :(The idea not to use the FIFO and remove it manually seems to me as the most promising one. I will try that first and then the annotation API. I already looked at annotations but I was a little skeptical about the performance.Thank you for your quick answer! Best regards, Janko
  • Andrew
    Hi Janko,Whichever way you cut it, 768,000,000 points is a lot of data. We've tested SciChart up to 50,000,000. If its a line series, and with resampling, it can give a reasonable update rate at this point-count. Of course, its hardware dependent.Now doing the maths, 768,000,000 points at double-double is about 12GBytes of data. Bear in mind .NET4.0 has a limit of 2GBytes for a single array, no matter how much physical memory you have, and the bandwidth of typical memory buses is no more than 12GBytes/second (for sequential access) you can understand that with nearly a billion points, you're not gonna see amazing performance ;-)So ... that means we have to use smart techniques. If the 768M dataset is your entire data and you want to show an overview of it, can it be resampled at source and a low level of detail shown in a chart, then on zoom, you show a high detail version of the same data?Apologies if I've analyzed the problem wrong, just throwing my experience with performance in .NET into the mix. If you do need to display such a dataset it is going to be necessary to do some smart pre-processing of the data to show it all.Best regards, Andrew
  • janko
    Hi Andrew,Yes, your are absolutely right. That is the reason for using our own specialized and optimized component to visualize the overview part and pick only one channel of it to show it in a more detailed and more comfortable way. :wink: So we exploit for our component that we know which kind of data we have. For sampled data you don't necessarily has to save the x (time) value. It is given by the sequence of the data (if you know the sampling rate) ... , we process reasonable chunks of data, we process and analyze the sampled signal values as long as we can as integer values (they are delivered as int's by the analog-digital converter) ... etc. I tried the manual approach and it seem to work acceptable. :) Thank you for your effort.Best regards, Janko
  • Andrew
    Ok cool, sounds like you're getting along well.If you have a screenshot to share of what you're doing sometime I'd be interested to see it!Best regards, Andrew
  • You must to post comments
Showing 1 result
Your Answer

Please first to submit.