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

0 votes
30 views

Hi all —

I apologize if this is an inappropriate question, I only learned about SciChart yesterday; I do have some experience with .NET We have purchased a USB sensor from a small company. The sensor is top-notch, and we are very happy with its performance. However, the software offers no option to export the time series as CSV or any human-readable format. To add to the above, the software does not start unless one connects the instrument to the PC.

The software appears to be Sci-chart based; it displays measurements as time series and offers basic GUI which come with 2D SciChart objects. When saved, the data appears to get wrapped in a SciChart .Net object, dumped into a binary file, compressed. When the saved file is open, it’s uncompressed, SciChart objects get re-populated and displayed . We know about this b.c. we uncompressed one of the files and opened it with a hex editor. Most of the header was comprised of .NET and SciChart warnings, followed by what appears to be repeated patterns of numbers.. The time stamps appear to be in one of the “nanoseconds-since-the-creation-of-time” formats.

The company did not commit to provide a solution to export the time series as CSV, and we (understandably) do not have access to the source code. I understand that this is a long shot, but could there a method to deserialize data stored inside of a binary with a SciChart object? I do not know the structure, but i can save files with small N of data points (e.g. N=1), and I know what the data looks like when it’s open (although it’s rounded and re-processed, e.g. the nanoseconds since the creation of time). A file containing a single-timestamp measurement (8 channels) is about 4kB in size when uncompressed; most of it warnings and error messages.

Again, I very much apologize for this question, it may be inappropriate.

0 votes
34 views

Hi, on our data SciChart3DSurface seems a bit laggy while rotating camera, FPS is low. What are general way to improve SciChart3DSurface performance?

0 votes
32 views

Hi, how do I disable Visual Xccelerator Engine for SciChart3DSurface?
I tried with the following code

<s3D:SciChart3DSurface x:Name="View3D"  s:VisualXcceleratorEngine.IsEnabled="False"/>

But it gives compilation error:

Property ‘IsEnabled’ is not attachable to elements of type ‘SciChart3DSurface’.

So how do I generally enable/disable Visual Xccelerator Engine for SciChart3DSurface?

0 votes
48 views

Hi,
I’m using both modifier for our SciChartSurface’s. RubberBandXyZoomModifierexecutes on ExecuteOn=”MouseLeftButton” and ZoomPanModifierand executes on ExecuteOn=”MouseRightButton” . For touch I want the opposite behavior. Is that possible?

0 votes
0 answers
30 views

1、How to fix the scale of the X axis into 360 scales
2、I want to put 360 degrees in the direction, how can I rotate the table 90 degrees to the left and 0 degrees upward
3、How to make the X axis show only 0,90,180,270

0 votes
30 views

Hello!

I have a SciChartSurface with 193 series on it and my application needs to display a legend with 193 items. The requirement is that a legend should be located underneath the plot as a scrollable panel with items arranged in a wrap-panel fashion. The problem is that it takes a long time to render this many items because WrapPanel does not use Virtualization.

I found a 3-rd party control (https://github.com/sbaeumlisberger/VirtualizingWrapPanel) that implements virtualization in a WrapPanel. However, it is designed to work inside a ListBox/ListView and does not as an ItemPanelTemplate for SciChartLegend.

Is it possible to render LegendData in a custom control? I’ve noticed that LegendData is a ChartDataObject. However, when I bind its SeriesInfo property my ListBox is not populated.

Here is my XAML:

In my SciChartSurface I’ve added a modifier:

<s:SciChartSurface.ChartModifier>
                    <s:ModifierGroup>
                        <!--  Turn this legend off because we've got a custom one below  -->
                        <s:LegendModifier GetLegendDataFor="AllSeries" ShowLegend="False" />
                        <local:ErrorBarExclusionLegendModifier x:Name="mwErrorBarExcluder" />
                        <s:TooltipModifier />
                        <local:MouseClickChartModifier RightClickPosition="{Binding RightClickPosition, Mode=OneWayToSource}" />
                    </s:ModifierGroup>
</s:SciChartSurface.ChartModifier>

Then I declare a ListBox:

<ListBox
                Grid.Row="4"
                Grid.Column="0"
                Height="220"
                ItemTemplate="{StaticResource SciChartLegendItemTemplate}"
                ItemsSource="{Binding LegendData, ElementName=mwErrorBarExcluder, Converter={StaticResource SeriesConv}}">
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <wtk:VirtualizingWrapPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
            </ListBox>

Since I can’t bind ItemsSource to ChartDataObject I wrote a simple converter that extracts the collection of SeriesInfo objects:

public object Convert(object aValue, Type aTargetType, object aParameter, CultureInfo aCulture)
{
    ChartDataObject fSource = aValue as ChartDataObject;

    return fSource?.SeriesInfo;
}

What am I doing wrong?

Thank you in advance for your suggestions.

0 votes
0 answers
54 views

I want to create a custom modifier for a polar chart.
But I failed immediately!
First I wanted to add a simple 10×10 px ellipse.
But the ellipse doesn’t appear on the chart!

public override void OnModifierMouseDown(ModifierMouseArgs e)
{
    var translatedPont = ParentSurface.RootGrid.TranslatePoint(e.MousePoint, ParentSurface.ModifierSurface);

    var point = new Ellipse
    {
        Width = 10,
        Height = 10,
        Stroke = Brushes.White,
        StrokeThickness = 1,
        Fill = Brushes.Gray
    };

    ParentSurface.ModifierSurface.Children.Add(point);

    point.MeasureArrange();

    var leftCoordinate = translatedPont.X - point.ActualWidth / 2;
    var topCoordinate = translatedPont.Y - point.ActualHeight / 2;

    Canvas.SetLeft(point, leftCoordinate);
    Canvas.SetTop(point, topCoordinate);
...
0 votes
90 views

Is there a way to create a custom TooltipModifier.TooltipTemplate for Annotations?

I’m trying to find an example of one on the site or in the SciChart examples application but I’m not having any luck. Thanks!

I’d like to be able to pass an object to the tooltip’s metadata like with XySeriesInfo tooltip templates.

Thanks!

  • Greg Knox asked 2 weeks ago
  • last active 2 weeks ago
0 votes
93 views

Hello,
I have a LineRenderableSeriesViewModel and I want to be able to select the chart using possibly a VerticialSliceModifier, double click it, and then find the limits of the peak centred around the VerticalSliceModifier and shade the region underneath the curve. Finding the limits of the curve is ok, but how would I shade the region in?
Any pointers would be really useful.
Regards
Peter

  • pburland asked 3 weeks ago
  • last active 2 weeks ago
0 votes
100 views

Hi EveryBody,

I hope you are fine,

I am working on tablet windows with only one DataSerie vizualisation.

To increase the ergonomic of my application on DatapointSelection, I want to be able to click on any point in the scichart then the DataPoint corresponding to the X axes of my point click get Selected.

Is it possible? Can you help me please.

I sent a picture to explain you the needed functionnality.

Thank you very much,

Princy Andriampaniry

0 votes
114 views

Hello everybody,

I hope you are fine,

I am working with DatapointeselectionModifier on a tablet windows.

I want to be able to select multiple points without pressing Left Ctrl keyboard.
Can you help me please?

Thank you very much.

0 votes
141 views

Hi,
I did deactivate license in my Windows 7 computer, then successfully activate on my Windows 10 computer. SciChart stop working.

Exception: Sorry! Your support subscription expired on 4/5/2017 12:00:00 AM. This license key is only valid on earlier versions of SciChart. Please contact sales@scichart.com if you would like to renew your subscription.:

My old Windows 7 computer have SciChart SDK V5.0.0.10963 Installed 12/07/2017
My new Windows 10 computer have SciChart SDK V5.0.0.10963 installed 08/24/2020

It is the same version on both computers. I do not want to renew subscription. I want to use my license. What I should do?

Thanks.
Mikhail.

0 votes
196 views

Hi,

I’m trying to colour individual points in what is a reasonably large scatter data set and when I enable the palette provider I get a System.AccessViolationException: ‘Attempted to read or write protected memory. This is often an indication that other memory is corrupt.’

I’ve managed to reproduce this in a test project. The code is provided below. The chart surface is set up pretty normally with these switches:

s:VisualXcceleratorEngine.IsEnabled="True"
s:VisualXcceleratorEngine.FallbackType="{x:Type s:HighQualityRenderSurface}"
s:VisualXcceleratorEngine.DowngradeWithoutException="False"
s:VisualXcceleratorEngine.EnableImpossibleMode="True" RenderPriority="Immediate" EnableMultiThreadedRendering="True"

Any ideas what is going on here or how I can fix it?

private int NUM_VALUES = 300000;
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        CreateGraph();
    }

    private void CreateGraph()
    {
        //
        var series = new XyDataSeries<double, double>();

        Random rand = new Random();
        int index = 0;
        int numAppends = 10;
        for (int j = 0; j < numAppends; j++)
        {
            double[] x = new double[NUM_VALUES/ numAppends];
            double[] y = new double[NUM_VALUES/ numAppends];
            PointMetadata[] m = new PointMetadata[NUM_VALUES/ numAppends];
            for (int i = 0; i < NUM_VALUES / numAppends; i++)
            {
                x[i] = index*0.001;
                y[i] = rand.NextDouble() * 100;
                m[i] = new PointMetadata(Color.FromRgb((byte)(rand.NextDouble() * 255), (byte)(rand.NextDouble() * 255), (byte)(rand.NextDouble() * 255)));
                index++;
            }
            series.Append(x, y, m);
        }

        scatterRenderSeries.DataSeries = series;
        sciChartSurface.ZoomExtents();
    }

    private void EnablePalette(object sender, RoutedEventArgs e)
    {
        scatterRenderSeries.PaletteProvider = new MainChartPaletteProvider();
    }
}

public class MainChartPaletteProvider : IPointMarkerPaletteProvider
{
    private PointPaletteInfo pointPaletteOverride;
    public void OnBeginSeriesDraw(IRenderableSeries rSeries)
    {

        pointPaletteOverride = new PointPaletteInfo();
        pointPaletteOverride.Fill = Colors.Red;
    }

    public PointPaletteInfo? OverridePointMarker(IRenderableSeries rSeries, int index, IPointMetadata metadata)
    {
        if (metadata == null)
        {
            return pointPaletteOverride;
        }
        pointPaletteOverride.Fill = (metadata as PointMetadata).Colour;
        return pointPaletteOverride;
    }
}

public class PointMetadata : IPointMetadata
{
    public Color Colour { get; set; }

    public bool IsSelected { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;

    public PointMetadata(Color colour)
    {
        Colour = colour;
    }
}
0 votes
0 answers
116 views

Hi,

I begin with Scichart, I am coding with binding program and I need to make Selection Point Markers. I can see the point Markers but when I activate the SelectedPointMarker then it doesn’t work. I want to ask how to adapt the exemple with a binding program, what to write in the “.cs”. I am sending you the wpf code and the interface. Can you help me please?

Thank you verry much.

0 votes
0 answers
166 views

Hi,

I’ve been testing the CAD objects option in the 3D chart API recently, and been wondering if there’s a way to control some of the objects properties after it is loaded, for example changing it’s position or rotation to simulate movement. I’ve tried to set these properties for a certain object I’ve loaded in the code behind with a DispatcherTimer, but it did not affect any of the properties I’ve tried to modify in my Tick event handler. Is there a proper way to achieve it?

Thank you!

0 votes
0 answers
147 views

Hi

I need to create complicated candle stick, beside OHLC, I need to put point market inside candle to mark mean and 50% percentile, each with an individual point marker, is it possible to achieve this?

Thanks.

Sally

0 votes
182 views

Hi,

I’ve been wondering. In SciChart’s current WPF version, is there any way to configure the default ViewportManager (or create a new customized one in a simple way) such that whenever I call its ZoomExtents method, the X and Y axes’ ranges will include any custom annotations I’ve added to the chart’s annotations collection?

My custom annotations are basically Images, with fixed Width and Height, and I set their X1 and Y1 properties to hold certain data points I have on the chart. The issue is, I need axes’ ranges to include the Image in it’s entirety, meaning I would have to somehow convert their Widths and Heights to “data point values”, since the new visible range should be in terms of data values, if I’m not mistaken.

Any good example to how this could be done?

  • Ilan Rozen asked 2 months ago
  • last active 2 months ago
0 votes
0 answers
187 views

I am trying to chart time series data with one X axis and multiple YAxis, as well as this i am using a vertical line and text box annotation to mark the timestamp when an event occurred. The problem i am having is that the milliseconds portion of the annotation timestamp is being ignored and the annotation is snapping to the the major grid line on the whole second which leads to an misinterpretation by users where the actual event occurred.

In the attached image the event timestamp is 18:13.496 but the annotation is drawn at 18:13.000 exactly. See the thin blue line with 420207 text above. The line should sit nearly at the right border of the chart.

the timestamp (defined as triggerTime) correctly includes the millisecond portion.

The annotations are added as such…

sciChartSurface.Annotations.Add(new TextAnnotation {
Text = EventCode,
FontSize = 10,
XAxisId = “DefaultXAxis”,
X1 = triggerTime,
Y1 = 9.0});

sciChartSurface.Annotations.Add(new VerticalLineAnnotation{
LabelPlacement = LabelPlacement.Auto,
Stroke = Brushes.CornflowerBlue,
XAxisId = “DefaultXAxis”,
X1 = triggerTime,
Y1 = 9.0,
StrokeThickness = 1,
IsEditable = false,
ShowLabel = false,
VerticalAlignment = VerticalAlignment.Bottom });

And my xaxis defined as…

var xAxis = new DateTimeAxis() {
Id = “DefaultXAxis”,
TextFormatting = “dd-MMM-yyyy HH:mm:ss.fff”,
SubDayTextFormatting = StringExtentions.TimeSpanToTextFormatting(last – start),
AutoRange = AutoRange.Once,
VisibleRange = new DateRange(start, end),
GrowBy = new DoubleRange(0.01,0.01),
AxisAlignment = AxisAlignment.Bottom,
AutoTicks = true,
MinorsPerMajor = 5,
IsPrimaryAxis = true,
AxisTitle = “Time,” };

When debugging and looking at the SciChartSurface.Annotations.X1 value, it contains the millisecond value.

Any assistance is greatly appreciated.
Best regards
Alex

1 vote
217 views

I’m trying to put together a chart that adds a bar at the bottom, to visualise Y values going over specific thresholds (in this example, below 20 is Green, 20 to 30 range is Yellow, and over 30 is Orange), as shown here:
BoxAnnotations

The bar scales along with the line when zooming the chart
BoxAnnotationsZoomed

The version pictured builds the bar using box annotations, each defined as below:

new BoxAnnotationViewModel()
{
    X1 = currentXValue,
    X2 = currentXValue, + xValuesStepSize,
    Y1 = 0.96,
    Y2 = 1,
    Background = backgroundColor, //Colour calculated based on Y value
    AnnotationCanvas = AnnotationCanvas.AboveChart,
    CoordinateMode = AnnotationCoordinateMode.RelativeY
};

This implementation works, but the issue is that the bar is drawn inside the main chart area, and so covers some of the chart itself; if this could just be moved onto the X axis, rather than the chart canvas, then this would be exactly what I need.

I tried to just switch the canvas on the BoxAnnotations to use AnnotationCanvas.XAxis, but when doing this the annotations don’t seem to be getting the right X / Y coordinates for positioning – the width and height of each block looks correct, and the width scales when the chart is zoomed in, but every block appears to be positioned at 0,0 on the XAxis canvas (it looks like X1/Y1 values are ignored, so all blocks are stacked on top of each other in the same position rather than appearing alongside each other as a bar)
BoxAnnotationsOnAxis BoxAnnotationsOnAxisZoomed

With a bit of searching I found an old post (https://www.scichart.com/questions/wpf/annotation-on-axis) stating that ‘AxisMarkerAnnotation’ is the only supported annotation for display on an axis canvas, so I tried using this instead, which does seem to respect the X1 position. Here though, the X2 value seems be be interpreted as just a static pixel width, and the width of the annotations does not scale when the chart is zoomed, so the blocks stay as whatever width is initially drawn and get moved further apart the more the chart is zoomed in.
AxisMarkerAnnotations AxisMarkerAnnotationsZoomed

I’m new to SciChart so hopefully I’m missing something obvious; is there any way of either getting the BoxAnnotation to work on an axis canvas, or of setting an AxisMarkerAnnotation’s width to be the width between two points on the X axis, scaling along with the chart when zooming?

I hope the above makes sense, thanks in advance for your help.

0 votes
225 views

Hi,

I’m trying to add a small image as an annotation to the chart, but I couldn’t make it work… most likely doing something wrong, but I can’t quite figure out how this should be done. This is the direction I went for:

public void AddIcon()
    {
        Image image = new Image();
        BitmapImage icon= new BitmapImage();
        icon.UriSource = new Uri(@"D:\icon.png", UriKind.Absolute);


        image.Source = icon;

        var annotation = new CustomAnnotation()
        {
            X1 = 0,
            Y1 = 0,
            Content = image,
        };
        ChartAnnotations.Add(annotation);
    }

What am I doing wrong? is there a proper and simple way to add image annotations to the chart in an MVVM manner?

Thank you!

  • Ilan Rozen asked 2 months ago
  • last active 4 weeks ago
0 votes
279 views

Hi,

I have made the chart vertical by changing X axis alignment to left and Y axis alignment to bottom. After changing like this, im not able to resize the box annotation using all four resize adorners. Only two working, other two resetting Y1 value. below is the code snippet.

<s:SciChartSurface.Annotations>
     <s:BoxAnnotation
         x:Name="rangeBox"
         AnnotationCanvas="AboveChart"
         Background="Red"
         ClipToBounds="False"
         CoordinateMode="RelativeX"
         DragDirections="YDirection"
         IsEditable="True"
         Opacity="0.3"
         ResizeDirections="YDirection"
         X1="{Binding TopDepth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
         X2="{Binding BottomDepth, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
         Y1="0"
         Y2="1"
         YAxisId="Top" />
 </s:SciChartSurface.Annotations>
 <s:SciChartSurface.XAxis>
     <s:NumericAxis
         AutoRange="Once"
         AxisAlignment="Left"
         AxisTitle="Depth [ft]"
         DrawMajorBands="False"
         FlipCoordinates="{Binding FlipYAxis}"
         TitleStyle="{StaticResource AxisTitleStyle}" />
 </s:SciChartSurface.XAxis>
 <s:SciChartSurface.YAxis>
     <s:NumericAxis
         AxisAlignment="Bottom"
         BorderBrush="DarkGray"
         BorderThickness="0,0,0,1"
         DrawMajorBands="False"
         DrawMajorGridLines="True"
         Id="Top"
         TickTextBrush="DarkGray"
         TitleStyle="{StaticResource AxisTitleStyle}" />
 </s:SciChartSurface.YAxis>

Can you please let me know what i’ve missed?

Thanks
-MK

  • Sync Kumar asked 2 months ago
  • last active 4 weeks ago
0 votes
0 answers
232 views

Is it possible to use an image in a StackedColumn? I’d like to use a design in the columns instead of a solid color with Fill.

Edit: I figured out how…

So while you can’t assign an image directly to StackedColumn, per say, you can use various Brushes with Fill and one of those Brushes is the ImageBrush. It goes something like this:

stackedColumn.Fill =  = new ImageBrush(image: new BitmapImage(uriSource: new Uri(uriString: "Images/MyImage.png")));

I actually ended up using the LinearGradientBrush instead of ImageBrush for my needs and it works great!

  • Greg Knox asked 2 months ago
  • last active 2 months ago
0 votes
284 views

Newbie here…how would I fix the placement of the first and last tick label so that the tick label appears below the major grid line instead of left/right of it? Can’t seem to find an example that shows this.

For the shown graphs, the x-axis is actually a second static numeric axis while there is an additional time axis that is not shown.
So I believe changing the visible range of the visible axis is not an option as then it would no longer line up with hidden axis which has the points.

See attached image for illustration of problem.

0 votes
255 views

If an app generates multiple SciChartSurfaces, what happens when VisualXcceleratorEngine is enabled on one of them? Do other surfaces switch to the VisualXcceleratorEngine or remain in the software mode?

  • corvex asked 2 months ago
  • last active 2 months ago
0 votes
217 views

We recently upgraded from an old version of SciChart (3.1) and I’ve been updating our solution to use the latest binaries. Previously, we were setting the series source of a chart based on a trigger. However, after switching to the RenderableSeries=”{s:SeriesBinding …}” I discovered that we can’t use the SeriesBinding in a setter. Is there a way to do this with a trigger or do I need to do this in the code behind instead?

<Trigger Property="SelectedChannelSet" Value="0">
<Setter TargetName="DetailsChart" Property="SeriesSource" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ChartModel.ChannelOneAndTwoChartSeries}" />
</Trigger>
<Trigger Property="SelectedChannelSet" Value="1">
<Setter TargetName="DetailsChart" Property="SeriesSource" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ChartModel.ChannelThreeAndFourChartSeries}" />
</Trigger>

Thanks,

Tim

0 votes
255 views

Hi,

I am using in my chart a VerticalSliceModifer with a VerticalLineAnnotation.
It works as expected, but I would like to modify the aspect of my VerticalLineAnnotation by adding a marker on the axis on top of the line, exactly as in the attached picture (not a scichart).
Is there a way to do that ?

Best regards,
Jean-Charles Durand

0 votes
230 views

I would like to create a polar heat map .

Is it possible to create one using the current types – I have looked a the examples and just don’t see an obvious choice.

I have attached an example of a polar heat map.

0 votes
232 views

Lets assume we plot a moving signal window with a non-FIFO data series. Then, the dataseries can be updated in a loop with the fixed-length buffer (YArray) containing the latest signal samples :

using (sciChart.SuspendUpdates())
        {
        SignalDataSeries.Clear();
        SignalDataSeries.Append(XArray, YArray);
        }

My question is whether the FIFO dataseries can be used to simplify the above code into

SignalDataSeries.Append(XArray, YArray);

given that we still use the same fixed-length YArray and FifoCapacity is set to its length? Are there any drawbacks in it, save for the doubling memory for the internal FIFO buffer?

  • corvex asked 2 months ago
  • last active 2 months ago
1 vote
229 views

Hello

I Need some help within the composite annotation resizing.

I created a composite annotation based on the composite annotations example. I need to calculate the range between to vertical line on the surface, so I took the MeasurmentXAnnotation.xaml as base code of mine.

however i need to be able to resize the composite annotation not only from the 4 edges (ResizingGrips), but also when the user drag the line annotations to left or to right.

Is there any way to achieve this?

Best regard

0 votes
279 views

Hi,

I develop a real time app that polls online data, e.g. EEG, and sends it on a SciChart plot. I need to keep the polling thread at maximal and steady time resolution, ideally, close to 1 ms. To achieve that, I run the Scichart plot in a different STA thread (WPF window), such that the polling thread uses only IDataSeries.Append() and IDataSeries. SuspendUpdates() methods to submit data to the plot.

However, time tests show that these 2 functions in the polling thread have very irregular execution times, which may depend on different factors, e.g. on the plot size. To demonstrate it, I recorded the calling times of the following code, which submits 10 000 samples in a loop:

            double StartTimeInMs = SW.ElapsedTicks / 10000;
            using (TestDataSeries.SuspendUpdates())                 
                    {
                    TestDataSeries.Clear();
                    TestDataSeries.Append(X, Y);
                    }
            TimeDelta = SW.ElapsedTicks / 10000 - StartTimeInMs;

The resulting TimeDelta (loop times) are shown on the the plot 1 in the attachment.As you can see the loop time is unstable and grows to 40 ms, when the plot window is maximized.

I came to a possible solution by invoking the sample submission code in the plot thread:

            double StartTimeInMs = SW.ElapsedTicks / 10000;             
            Dispatcher D = (TestDataSeries.ParentSurface as SciChartSurface).Dispatcher;
            D.BeginInvoke((Action)(() =>
                {
                    using (TestDataSeries.SuspendUpdates())
                        {
                        TestDataSeries.Clear();
                        TestDataSeries.Append(X, Y);
                        }
                }));
            TimeDelta = SW.ElapsedTicks / 10000 - StartTimeInMs;

As you can on the attached plot 2, the loop times are much better now, although I still see occasional peaks above 5 ms.

So, my questions are:

  1. Why the timing in my tests is so unstable?
  2. Are the particular methods or settings to stabilize the time required to submit new samples to a Scichart plot?
  3. Are the FIFO series more stable in timing?
  4. If I use the BeginInvoke in a separate plot thread, should I use lock() to avoid potential data overflow, for instance:

                Dispatcher D = (TestDataSeries.ParentSurface as SciChartSurface).Dispatcher;
            D.BeginInvoke((Action)(() =>
                {
                if (Monitor.TryEnter(TestDataSeries.SyncRoot, new TimeSpan(0, 0, 0, 0, 0)))
                    try
                        {
                        TestDataSeries.Clear();
                        TestDataSeries.Append(X, Y);
                        }
                    finally
                        {
                        Monitor.Exit(TestDataSeries.SyncRoot);
                        }
                }));
    

Thank you in advance for answers and hints!

  • corvex asked 2 months ago
  • last active 2 months ago
0 votes
240 views

Hi,

I’ve the following problem.

We have an application where we have many spectrums (frequency or order spectrums). To get a better overview and to select one for a more detailed analysis, we would like to display them as a waterfall chart. A spectrum always has a high resolution of 32768 points. If I now display between 60 and 100 spectrums in a waterfall chart, it takes quite a long time to render this and it is almost impossible to operate the chart.

However, a high-resolution spectrum is not required for a good overview in the waterfall diagram. Therefore my idea is to resample every single spectrum to e.g. 8192 points and then display it in the waterfall diagram.

Is there a possibility to use the internal SciChart resampler (e.g. Min/Max) or do I have to develop an own algorithm for this?

Or does a similar function already exist in SciChart?

Thanks

0 votes
259 views

I get the following output in my console:

Visual Xccelerator Engine v6.2.1.13304

GPU Capability Test ### Is BGRA feature required: TRUE

Examining Graphics Adapter: Intel(R) UHD Graphics 620 VRAM: 128Mb
DeiceId: 22807

Visual Xccelerator Engine Direct3D9 Compatibility
Determines whether the adapter is blacklisted due to its unstable work… FALSE
Trying to create Direct3D9 Device… SUCCESS

Visual Xccelerator Engine Direct3D11 Compatibility
Trying to create Direct3D9Ex Device (WPF Compatibility)… SUCCESS
Trying to create Direct3D11 Device… SUCCESS

Rank: 2100128 Points

Selected Graphics Adapter, where DeviceId is: 22807 Is Direct3D9
Supported: TRUE Is Direct3D11 Supported: TRUE Is Blacklisted:
FALSE

Hey this is SciChart here. Please help! Your GPU is too slow for my
awesome graphics software! I detected you have an Intel(R) UHD
Graphics 620 GPU. Please upgrade it because I’m feeling very
constrained by 128MB of Video RAM. My super-powerful Visual
Xccelerator engine can do so much better with 256MB+ of video memory.
THX! 😀

Is there a way to suppress this so it doesn’t show up? I use trace output to capture diagnostics in my application and this is showing up in the log.

  • Doug Witt asked 2 months ago
  • last active 2 months ago
0 votes
0 answers
238 views

Hello,

I’m working with the FastHistoBarRenderableSeries and I have an issue with the candle width.

When I scale the X-Axis the width of the candle grows very fast.

0 votes
244 views

Hi SciChart-Team,

I’m currently rewrite one of our applications and move this from the leagacy .NET Framework to .NET Core.
I also replace the old SciChart.DirectX package and the DirectX Renderer plugin with the new VisualXcceleratorEngine witch is also based on DirectX.

In one chart we display a Order Spectrum as a heatmap (FastUniformHeatmapRenderableSeries) with linearly interpolated color between the cells. Thefore we activate the property UseLinearTextureFiltering.

But with the new VisualXcceleratorEngine is there no linearly interpolated color between the cells. Is this feature only available for the old DirectX Renderer plugin??

Thanks

0 votes
249 views

Hi,
Is it possible to show contour of bars in ColumnRenderableSeries3D?
Is there way to do this?

ColumnRenderableSeries3D has a Stroke property, but does not appear to have any effect on setting this property.

best regards
Silvester

0 votes
0 answers
228 views

I am rendering a HeatMap on WPF page using FastUniformHeatmapRenderableSeries which has 3 axes X, Y and Z. The Z values are represented with colors by defining the color palette and gradients. This works perfectly. Now there a need to define color palette in such a way that it will get applied to different parts of the map based on min and max value at that area of the map. To elaborate more, the Z values are basically representing peaks at different areas. So there can be multiple peaks distributed on the map.

What I need is that the top-most part of each peak should be shown in red color and then going down till its base with change in color like orange, yellow, green and blue based on certain range in %. The point to note here is, every peak can have its own min and max values. Peak 1 can start from Z=15 and end at Z=48 and peak 2 can start from Z=3 and end at Z=20. So the colors in the palette should get distributed equally for both these peaks. Top-most area of peak 1 and that of peak 2 should be having same color.
Is this possible in heat map? having say a conditional color palette based on multiple value ranges?

0 votes
248 views

Hi,

I have an ECG signal that gets plotted in real-time. I would like to highlight specific indices of the signal that have already been plotted using a different color than the original signal. How should I go about it?

Thanks

0 votes
259 views

Hello,

I was doing a custom pan zoom modifier to drag the chart by click and drop. The Y-axis works well and I can drag up and down but the X-axis instead of just moving it scales a lot.

The same thing happens when I implemented a mouse wheel scroll using the same functionality, is it possible that the last candle is anchored to the side of the graphic? or I’m just not using correctly the Scroll method?

Here is the code of the pan modifier

public override void OnModifierMouseMove(ModifierMouseArgs e)
    {
        if (_lastPoint == null)
            return;

        if (!ModifierSurface.IsPointWithinBounds(e.MousePoint))
            return;

        base.OnModifierMouseMove(e);

        var currentPoint = e.MousePoint;
        var xDelta = currentPoint.X - _lastPoint.Value.X;
        var yDelta = _lastPoint.Value.Y - currentPoint.Y;

        using (ParentSurface.SuspendUpdates())
        {
            XAxis.Scroll(XAxis.IsHorizontalAxis ? xDelta : -xDelta, SciChart.Charting.ClipMode.None);
            YAxis.Scroll(YAxis.IsHorizontalAxis ? -xDelta : yDelta, SciChart.Charting.ClipMode.None);
        }

        _lastPoint = currentPoint;
    }

This is the XAML code

<!--  Create the chart surface with candlestick and histogram bars around each candlestick  -->
    <s:SciChartSurface
        x:Name="sciChart"
        Grid.Column="1"
        Padding="0"
        BorderThickness="0"
        ViewportManager="{Binding ViewportManager}">


        <s:SciChartSurface.RenderableSeries>

            <s:FastHistoBarRenderableSeries
                DataSeries="{Binding DataSeries, Mode=TwoWay}"
                HistogramMode="{Binding HistogramBarMode, Mode=TwoWay}"
                HorizontalBarSpacing="20"
                MaxHistoBarCandles="240"
                PaletteProvider="{StaticResource VolumeLadderThresholdPaletteProvider}"
                TickSize="{Binding TickSize, Mode=TwoWay}"
                VerticalBarSpacing="{Binding VerticalBarSpacing, Mode=TwoWay}"
                StrokeUp="#FF84CFFB"
                StrokeDown="Red"
                AllowDrop="true">


                <s:FastHistoBarRenderableSeries.FillUp>

                    <SolidColorBrush Color="#FF00A2FF" />
                </s:FastHistoBarRenderableSeries.FillUp>

                <s:FastHistoBarRenderableSeries.FillDown>
                    <SolidColorBrush Color="Red" ></SolidColorBrush>
                </s:FastHistoBarRenderableSeries.FillDown>

                <s:FastHistoBarRenderableSeries.AskBarStyle>
                    <Style TargetType="s:HistogramBar">
                        <Setter Property="Stroke" Value="Black" />
                        <Setter Property="MinWidth" Value="200"/>
                        <Setter Property="MinHeight" Value="200"/>
                        <Setter Property="MaxHeight" Value="200"/>
                        <Setter Property="MaxWidth" Value="200"/>
                        <Setter Property="Height" Value="360"/>
                        <Setter Property="Margin"  Value="340"/>
                        <Setter Property="Fill" Value="red" />
                        <Setter Property="FontSize" Value="23" />
                        <!--<Setter Property=" Value="Red" />-->
                    </Style>
                </s:FastHistoBarRenderableSeries.AskBarStyle>

                <s:FastHistoBarRenderableSeries.BidBarStyle>
                    <Style TargetType="s:HistogramBar">
                        <Setter Property="Stroke" Value="Black" />
                        <Setter Property="Fill" Value="#FF00A2FF" />
                    </Style>
                </s:FastHistoBarRenderableSeries.BidBarStyle>

            </s:FastHistoBarRenderableSeries>
        </s:SciChartSurface.RenderableSeries>

        <!--  Create an X Axis  -->
        <s:SciChartSurface.XAxis>
            <s:CategoryDateTimeAxis GrowBy="0.0, 0.1" DrawMajorBands="True" />
        </s:SciChartSurface.XAxis>

        <!--  Create a Y Axis with GrowBy  -->
        <s:SciChartSurface.YAxis>
            <s:NumericAxis GrowBy="0.1, 0.1" DrawMajorBands="True" />
        </s:SciChartSurface.YAxis>

        <s:SciChartSurface.ChartModifier>

            <s:ModifierGroup s:MouseManager.MouseEventGroup="SciChartGroup">
                <!--<s:MouseWheelZoomModifier x:Name="mouseWheelZoomModifier" 
                                          ActionType="Zoom" 
                                          XyDirection="XYDirection"/>-->
                <!--<s:ZoomPanModifier x:Name="zoomPanModifier" 
                                   IsEnabled="False"
                                   ClipModeX="ClipAtExtents"                                   
                                   />-->
                <s:ZoomExtentsModifier x:Name="zoomExtentsModifier"/>
                <!--<s:RubberBandXyZoomModifier x:Name="rubberBandXyZoomModifier" 
                                            ZoomExtentsY="True"/>-->
                <cm:ZoomPanModifier/>
                <cm:MouseWheelHorizontalScroll/>
                <s:XAxisDragModifier DragMode="Scale"/>
                <s:YAxisDragModifier DragMode="Scale"/>
                <!--<s:RolloverModifier DrawVerticalLine="False"/>-->

            </s:ModifierGroup>
        </s:SciChartSurface.ChartModifier>
    </s:SciChartSurface>

Thanks 🙂

0 votes
283 views

Hello,

I’m trying to display the value of the bars in the Market Profile chart. I was trying to add a text for each bar created but I don’t know where to find the surface position to instantiate the text.

This is the part of the code where the bars are created.

for (int i = 0; i < ticksPerCandle; i++)
            {
                _index++;

                volume = _random.Next(100);
                bidOrAsk = _random.Next(2) == 0 ? BidOrAsk.Bid : BidOrAsk.Ask;

                //date = date;
                var newTick = _data[_index];
                var open = _dataSeries0.OpenValues[_candleCount - 1];
                high = _dataSeries0.HighValues[_candleCount - 1];
                high = high > newTick ? high : newTick;

                low = _dataSeries0.LowValues[_candleCount - 1];
                low = low < newTick ? low : newTick;

                var meta = (CandlestickMetaData)_dataSeries0.Metadata[_candleCount - 1];

                meta.AddTick(new CandleTick
                {
                    BidOrAsk = bidOrAsk,
                    Price = newTick,
                    Volume = volume,
                    TimeStamp = date
                });

This is how it should look like

0 votes
222 views

Hi everyone!

What are the differences between the professional pack and its API included, and the SDK that comes with enterprise pack? Where is the SDK documentation? What’s the way to know what can I do with API and what with SKD? For example, in case I want to put text over the horizontals bars of the market profile histogram? Or whether I want to put some bubbles moving around the surface screen like a screensaver?

  • Nil Nil asked 3 months ago
  • last active 3 months ago
0 votes
0 answers
232 views

Hi! I was playing around with the MarketProfile example and I wanted to put some numbers in the bars representing the price.
Is there any way to do that?

enter image description here

0 votes
0 answers
282 views

Hi, i am using scichart v6.2.0.13254 and v6.2.1.13304, when i insert data it will cause the System.AccessViolationException,below is a very simple example, when it run,click LoadMoreData a few times it will throw the exctipion.

0 votes
0 answers
252 views

I have a problem with dynamically adding/removing zoom/pan modifier.
Initially when chart is created, it add zoomExtend and xyRubberBand modifier, so the chart zooms on left button drag. I added a button in my app so when the button is clicked, xyRubberBand is removed and ZoomPan modifier is added (with execute on MouseLeftButton); so when I click button, I do see pan behavior, problem is, when mouse left button up it still stays in pan mode, which means pan continues even with left button up, I found if I click right mouse button at this point the pan behavior stops.
The code to dynamically add/remove modifiers is below

public void AddPan()
{
var rubber = ModifierGroup.ChildModifiers.FirstOrDefault(x => x is RubberBandXyZoomModifier);
var pan = ModifierGroup.ChildModifiers.FirstOrDefault(x => x is ZoomPanModifier);
if (rubber != null) ModifierGroup.ChildModifiers.Remove(rubber);
if (pan == null) ModifierGroup.ChildModifiers.Add(new ZoomPanModifier() { ExecuteOn = ExecuteOn.MouseLeftButton, IsEnabled =
true });
OnPropertyChanged(nameof(ModifierGroup));
}

0 votes
0 answers
292 views

Hi,

Multiple X-Axis and Y-Axis with 3 different charts and cursor can be moved along x-axis for the 3 charts.
Please find the screenshot attached.

Please reach out to me if you need any more details.

Thank you
Shaik Nazeer Hussain

0 votes
300 views

Hi,

Our view models currently hold AxisCollection and work with IAxis. We’re hoping to switch to working with IAxisViewModel at this level.
But some feature differences will make this harder:

  • IAxis.TickLabelStyle – view model only supports TickTextBrush, not the other font related properties we customise in this style.
  • SImilarly MajorGridLineStyle and MinorGridLineStyle
  • Is IAxisViewModel.StyleKey the equivalent of IAxis.TitleStyle? (we just need to move our style definitions to XAML instead of creating Style objects in code)
  • Is IAxisViewModel.VisibleRange equivalent to IAxis.DataRange?

Can there be equivalent IAxisViewModel.TickLabelStyleKey, similarly Minor/Major grid line StyleKey?

Background
Our view models hang around to hold logical state of charts. But they also hold some AxisCollection, bound to from SciChartSurface.

We get exceptions like: InvalidOperationException Element already has a logical parent, under SciChart methods in the call stack.
E.g. when reconnecting to a PC over remote desktop, where a chart was already loaded.

This change was also suggested as a solution to our other recent issue, here:
https://www.scichart.com/questions/wpf/axiscollection-isprimaryaxis-stops-auto-updating#sabai-entity-content-13950

The “Element already has a logical parent” exception doesn’t happen when clicking between multiple charts like that latter issue. I’ve prototyped a changeover (commenting out all the bits not directly equivalent) and it seems to resolve this exception.

0 votes
317 views

I am getting a weird exception when appending data to my dataseries.

 SciChartSurface didn't render, because an exception was thrown:
  Message: Specified argument was out of the range of valid values. (Parameter 'You must have a width and height > than 0.')

  Stack Trace:    at geq.pne(Int32 dbt, Int32 dbu, Int32 dbv, Int32 dbw)
   at geq..ctor(Int32 dak, Int32 dal, Int32 dam, gfb dan)
   at SciChart.Charting.Common.Helpers.Strategies.CommonRenderContextDrawingStrategy.DrawPointMarkers(IRenderContext2D context, Color strokeColor, Color strokeBrush, Size spriteSize, Action`3 renderToCacheMethod)
   at SciChart.Charting.Visuals.PointMarkers.BitmapSpriteBase.CreateSprite(IRenderContext2D context, Color strokeColor, Color strokeBrush)
   at SciChart.Charting.Visuals.PointMarkers.BitmapSpriteBase.yry(IRenderContext2D bbr, Nullable`1 bbs, Nullable`1 bbt)
   at SciChart.Charting.Visuals.PointMarkers.BitmapSpriteBase.BeginBatch(IRenderContext2D context, Nullable`1 strokeColor, Nullable`1 fillColor)
   at vra.Begin(IPathColor pathColor, Double startX, Double startY, Int32 index)
   at wbb.udm(Double hmn, Double hmo, Double hmp, Double hmq, Int32 hmr)
   at vpx.ett(wba agi, IPointSeries agj, ICoordinateCalculator`1 agk, ICoordinateCalculator`1 agl)
   at SciChart.Charting.Visuals.RenderableSeries.DrawingProviders.LegacyPointMarkerRenderer.Draw(IRenderContext2D renderContext, IPointSeries pointSeries, IRenderPassData renderPassData)
   at SciChart.Core.Extensions.EnumerableExtensions.ForEachDo[T](IEnumerable`1 enumerable, Action`1 operation)
   at SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries.SciChart.Charting.Visuals.IDrawable.OnDraw(IRenderContext2D renderContext, IRenderPassData renderPassData)
   at vsb.ixq(RenderPassInfo caj, IRenderContext2D cak, Int32 cal)
   at vsb.ixp(ISciChartSurface cag, RenderPassInfo cah, IRenderContext2D cai)
   at vsb.RenderLoop(IRenderContext2D renderContext)
   at SciChart.Charting.Visuals.SciChartSurface.DoDrawingLoop()

I have no idea what width and height it is referring to. My SciChartSurface height and width are NaN but the actual height and width are 509 and 1007. The despite the exception I am still getting the graph to render correctly. Does anyone know how to track this down?

0 votes
0 answers
295 views

I’m using the DirectX 11 renderer.
Issue can be best seen in this image:

1 pixel errors

You can see that especially between the colors you can see lots of “dots”, which appear quite randomly as you zoom around.
But even in the black part some of these are created, so it is not exclusively to the multi color part.

I’m not sure why it happens and how to fix it, it seems like in some situations for some reason 1 pixel is left out for coloring (keeps background color).
I created this with lots of lines from a 60 hz input signal, and each signal gets drawn as a line. While the end result itself looks perfect, I’m getting these artifacts everywhere.

I suspect it happens from an optimization which is why I tried to turn them all off, but I wasn’t been able to find such a setting.
Any idea on how to fix this? 🙂

1 vote
332 views

After update to SciChart.6.2.1.13304 we get an InvalidOperationException:

    This SciChartSurface instance is disposed, you cannot set a RenderSurface on it at this time
System.InvalidOperationException: This SciChartSurface instance is disposed, you cannot set a RenderSurface on it at this time
   at SciChart.Charting.Visuals.SciChartSurfaceBase.OnRenderSurfaceDependencyPropertyChanged(DependencyPropertyChangedEventArgs e)
   at SciChart.Charting.Visuals.SciChartSurface.OnRenderSurfaceDependencyPropertyChanged(DependencyPropertyChangedEventArgs e)
   at SciChart.Charting.Visuals.SciChartSurfaceBase.eit(DependencyObject ph, DependencyPropertyChangedEventArgs pi)
   at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
   at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args)
   at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType)
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetCurrentValue(DependencyProperty dp, Object value)
   at SciChart.Charting.VisualXcceleratorEngine.bov.nmx()
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

I have no idea what happen. This is how we initalize SciChart:

<s:SciChartSurface x:Name="sciChart"
                           Grid.Column="2"
                           RenderPriority ="Low"
                           s:PerformanceHelper.EnableExtremeDrawingManager="True"
                           s:PerformanceHelper.EnableExtremeResamplers="True"
                           s:VisualXcceleratorEngine.DowngradeWithoutException="True"
                           s:VisualXcceleratorEngine.FallbackType="{x:Type s:HighQualityRenderSurface}"
                           s:VisualXcceleratorEngine.AvoidBlacklistedGpu="False"
                           s:VisualXcceleratorEngine.EnableImpossibleMode="True"
                           s:VisualXcceleratorEngine.IsEnabled="{Binding Path=DirectXSupport, FallbackValue=True}"
                           s:SciChartGroup.VerticalChartGroup="{Binding Path=ChartViewModel.VerticalChartGroupKey}"
                           Style="{StaticResource SciChartSurfaceStyle}"
                           GridLinesPanelStyle="{StaticResource DefaultGridLinesPanelStyle}"
                           RenderableSeries="{s:SeriesBinding RenderableSeriesViewModels, UpdateSourceTrigger=PropertyChanged}">

Any idea?

  • Tobias asked 3 months ago
  • last active 3 months ago
0 votes
323 views

Hello! I’ve created a UserControl that houses a chart that I’m populating with StackedColumnRenderableSeriesViewModels.

XAML:

<UserControl>

<Grid>
    <sci:SciChartSurface x:Name="StackedColumnSciChart" RenderableSeries="{sci:SeriesBinding RenderableSeries, RelativeSource={RelativeSource AncestorType=UserControl}}">

        <sci:SciChartSurface.XAxis>
            <sci:NumericAxis Id="LengthAxisID" AutoRange="Never" AxisTitle="Length (mm)" />
        </sci:SciChartSurface.XAxis>

        <sci:SciChartSurface.YAxis>
            <sci:NumericAxis Id="ValueAxisID" AutoRange="Never" />
        </sci:SciChartSurface.YAxis>

    </sci:SciChartSurface>
</Grid>

</UserControl>

C#:

RenderableSeries dependency property

public ObservableCollection<IRenderableSeriesViewModel> RenderableSeries
    {
        get { return (ObservableCollection<IRenderableSeriesViewModel>)GetValue(RenderableSeriesProperty); }
        set { SetValue(RenderableSeriesProperty, value); }
    }
    public static readonly DependencyProperty RenderableSeriesProperty = DependencyProperty.Register("RenderableSeries", typeof(ObservableCollection<IRenderableSeriesViewModel>), typeof(StackedColumnChart), new PropertyMetadata(defaultValue: new ObservableCollection<IRenderableSeriesViewModel>()));

Creating StackedColumnRenderableSeriesViewModels for temperatures

foreach (PlotInfo plot in CreateTemperaturePlots())
            {
                StackedColumnRenderableSeriesViewModel stackedColumnRenderableSeries = new StackedColumnRenderableSeriesViewModel()
                {
                    Stroke = plot.Color,
                    Fill = new SolidColorBrush(color: plot.Color),
                    XAxisId = plot.XAxisID,
                    YAxisId = plot.YAxisID,
                    StackedGroupId = plot.GroupID,
                    DataSeries = plot.DoubleDataSeries
                };

                // Set the Y Axis range
                StackedColumnSciChart.YAxes[0].VisibleRangeLimit = new DoubleRange(min: 0.0, max: 1200.0);
                StackedColumnSciChart.YAxes[0].VisibleRange = new DoubleRange(min: 0.0, max: 1200.0);

                Console.WriteLine($"Temperature Plot GroupID: {plot.GroupID}, DataSeries: [X: {plot.DoubleDataSeries.XValues[0]}, Y: {plot.DoubleDataSeries.YValues[0]}]");

                RenderableSeries.Add(stackedColumnRenderableSeries);
            }

Creating StackedColumnRenderableSeriesViewModels for gases

foreach (PlotInfo plot in CreateGasPlots())
            {
                StackedColumnRenderableSeriesViewModel stackedColumnRenderableSeries = new StackedColumnRenderableSeriesViewModel()
                {
                    Stroke = plot.Color,
                    Fill = new SolidColorBrush(color: plot.Color),
                    XAxisId = plot.XAxisID,
                    YAxisId = plot.YAxisID,
                    StackedGroupId = plot.GroupID,
                    DataSeries = plot.DoubleDataSeries
                };

                // Set the Y Axis range
                StackedColumnSciChart.YAxes[0].VisibleRangeLimit = new DoubleRange(min: 0.0, max: 30000);
                StackedColumnSciChart.YAxes[0].VisibleRange = new DoubleRange(min: 0.0, max: 30000);

                Console.WriteLine($"Gas Plot GroupID: {plot.GroupID}, DataSeries: [X: {plot.DoubleDataSeries.XValues[0]}, Y: {plot.DoubleDataSeries.YValues[0]}]");

                RenderableSeries.Add(stackedColumnRenderableSeries);
            }

Temperature Data:

Temperature Plot GroupID: Group0, DataSeries: [X: 0, Y: 0]
Temperature Plot GroupID: Group1, DataSeries: [X: 200, Y: 0]
Temperature Plot GroupID: Group2, DataSeries: [X: 400, Y: 670.773630135875]
Temperature Plot GroupID: Group3, DataSeries: [X: 600, Y: 740.345771031664]
Temperature Plot GroupID: Group4, DataSeries: [X: 800, Y: 784.109352476318]
Temperature Plot GroupID: Group5, DataSeries: [X: 1000, Y: 810.433384818085]
Temperature Plot GroupID: Group6, DataSeries: [X: 1200, Y: 830.191409478306]
Temperature Plot GroupID: Group7, DataSeries: [X: 1400, Y: 851.270291157906]
Temperature Plot GroupID: Group8, DataSeries: [X: 1600, Y: 866.993960435544]
Temperature Plot GroupID: Group9, DataSeries: [X: 1800, Y: 877.308898422191]
Temperature Plot GroupID: Group10, DataSeries: [X: 2000, Y: 896.995238248967]
Temperature Plot GroupID: Group11, DataSeries: [X: 2200, Y: 910.176039942053]
Temperature Plot GroupID: Group12, DataSeries: [X: 2400, Y: 928.835289697347]
Temperature Plot GroupID: Group13, DataSeries: [X: 2600, Y: 947.442843516404]
Temperature Plot GroupID: Group14, DataSeries: [X: 2800, Y: 959.806601821192]
Temperature Plot GroupID: Group15, DataSeries: [X: 3000, Y: 962.432915671719]
Temperature Plot GroupID: Group16, DataSeries: [X: 3200, Y: 963.263705166903]
Temperature Plot GroupID: Group17, DataSeries: [X: 3400, Y: 953.094653198038]
Temperature Plot GroupID: Group18, DataSeries: [X: 3600, Y: 920.368723738552]
Temperature Plot GroupID: Group19, DataSeries: [X: 3800, Y: 0]
Temperature Plot GroupID: Group20, DataSeries: [X: 4000, Y: 0]
Temperature Plot GroupID: Group21, DataSeries: [X: 4200, Y: 0]
Temperature Plot GroupID: Group22, DataSeries: [X: 4400, Y: 0]
Temperature Plot GroupID: Group23, DataSeries: [X: 4600, Y: 0]

Gas Data:

Gas Plot GroupID: Channel571, DataSeries: [X: 600, Y: 5000]
Gas Plot GroupID: Channel571, DataSeries: [X: 600, Y: 5000]
Gas Plot GroupID: Channel572, DataSeries: [X: 800, Y: 5000]
Gas Plot GroupID: Channel572, DataSeries: [X: 800, Y: 5000]
Gas Plot GroupID: Channel573, DataSeries: [X: 1000, Y: 5000]
Gas Plot GroupID: Channel574, DataSeries: [X: 1200, Y: 5000]
Gas Plot GroupID: Channel574, DataSeries: [X: 1200, Y: 5000]
Gas Plot GroupID: Channel575, DataSeries: [X: 1400, Y: 5000]
Gas Plot GroupID: Channel575, DataSeries: [X: 1400, Y: 5000]
Gas Plot GroupID: Channel575, DataSeries: [X: 1400, Y: 5000]
Gas Plot GroupID: Channel576, DataSeries: [X: 1600, Y: 5000]
Gas Plot GroupID: Channel576, DataSeries: [X: 1600, Y: 5000]
Gas Plot GroupID: Channel576, DataSeries: [X: 1600, Y: 5000]
Gas Plot GroupID: Channel577, DataSeries: [X: 1800, Y: 5000]
Gas Plot GroupID: Channel577, DataSeries: [X: 1800, Y: 5000]
Gas Plot GroupID: Channel578, DataSeries: [X: 2000, Y: 5000]
Gas Plot GroupID: Channel578, DataSeries: [X: 2000, Y: 5000]
Gas Plot GroupID: Channel579, DataSeries: [X: 2200, Y: 5000]
Gas Plot GroupID: Channel579, DataSeries: [X: 2200, Y: 5000]
Gas Plot GroupID: Channel580, DataSeries: [X: 2400, Y: 5000]
Gas Plot GroupID: Channel580, DataSeries: [X: 2400, Y: 5000]
Gas Plot GroupID: Channel581, DataSeries: [X: 2600, Y: 5000]
Gas Plot GroupID: Channel581, DataSeries: [X: 2600, Y: 5000]
Gas Plot GroupID: Channel582, DataSeries: [X: 2800, Y: 5000]
Gas Plot GroupID: Channel582, DataSeries: [X: 2800, Y: 5000]
Gas Plot GroupID: Channel583, DataSeries: [X: 3000, Y: 5000]
Gas Plot GroupID: Channel583, DataSeries: [X: 3000, Y: 5000]
Gas Plot GroupID: Channel584, DataSeries: [X: 3200, Y: 5000]
Gas Plot GroupID: Channel584, DataSeries: [X: 3200, Y: 5000]
Gas Plot GroupID: Channel585, DataSeries: [X: 3400, Y: 5000]
Gas Plot GroupID: Channel585, DataSeries: [X: 3400, Y: 5000]
Gas Plot GroupID: Channel586, DataSeries: [X: 3600, Y: 5000]
Gas Plot GroupID: Channel586, DataSeries: [X: 3600, Y: 5000]
Gas Plot GroupID: Channel587, DataSeries: [X: 3800, Y: 5000]
Gas Plot GroupID: Channel587, DataSeries: [X: 3800, Y: 5000]
Gas Plot GroupID: Channel588, DataSeries: [X: 4000, Y: 5000]
Gas Plot GroupID: Channel588, DataSeries: [X: 4000, Y: 5000]
Gas Plot GroupID: Channel589, DataSeries: [X: 4100, Y: 5000]
Gas Plot GroupID: Channel589, DataSeries: [X: 4100, Y: 5000]
Gas Plot GroupID: Channel589, DataSeries: [X: 4100, Y: 5000]
Gas Plot GroupID: Channel590, DataSeries: [X: 4200, Y: 5000]
Gas Plot GroupID: Channel590, DataSeries: [X: 4200, Y: 5000]
Gas Plot GroupID: Channel590, DataSeries: [X: 4200, Y: 5000]
Gas Plot GroupID: Channel591, DataSeries: [X: 4300, Y: 5000]
Gas Plot GroupID: Channel591, DataSeries: [X: 4300, Y: 5000]
Gas Plot GroupID: Channel591, DataSeries: [X: 4300, Y: 5000]

With the Temperature data, each StackedColumnRenderableSeriesViewModel has its own StackedGroupId. With the Gas data, there are multiple StackedGroupIds.

I tried attaching two PNG files (60K and 70K) to this but the forum says they are forbidden. Here is a link: Gas and Temperature charts

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

Hi,

I am currently adding a Vertical Slice Modifier with just on Vertical Line inside of it.
The idea is to create a vertical cursor to display Y values for a given X value.
As my chart is a real time chart, I don’t want my cursor position changed expect on user interaction, I set to Relative the CoordinateMode property of my Annotation.

<s:VerticalSliceModifier Name="sliceModifier" ShowTooltipOn="Always" IsEnabled="True">
                    <s:VerticalSliceModifier.VerticalLines>
                        <s:VerticalLineAnnotation IsEditable="True" X1="0.5" Stroke="#D62D15" CoordinateMode="Relative"/>
                    </s:VerticalSliceModifier.VerticalLines>
                </s:VerticalSliceModifier>

The vertical line is correctly displayed at the centre of the surface but point markers and tooltips are not displayed at the line position, it seems the relative coordinate mode is not handle on this area.

Thanks for your help
Jean-Charles

Showing 1 - 50 of 3k results