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

Welcome to the SciChart WPF Charts Community Forums!

Please see our Question asking guidelines before posting. You can also find our WPF Charts Documentation here.
  – Thanks & regards, SciChart Team

0 votes
0 answers
5 views

I use a scatter series that contains around 200,000 data points and I noticed that in the DirectX assisted rendering mode (not sure it also applies to the normal non DirectX mode) scatter points are sampled, meaning, not all scatter points are visible on the chart surface.

How can I turn that off to display all data points even if that may affect performance? I chart financial time series and the chart often shows discrete jumps when there are actually many data points in between when zooming in.

Thanks

0 votes
0 answers
14 views

It seems that if the axis is collapsed, all associated annotation labels are not visible (but their annotation line is visible).
Is there property or the like that will allow labels to be shown which are associated with a collapsed axis?

0 votes
0 answers
13 views

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

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

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

0 votes
0 answers
11 views

Hi
I have a chart with a strange behavior, does anyone know why it happens?
here is a GIF: https://ibb.co/i3NPLQ

  • Lio Ols asked 3 days ago
  • last active 3 days ago
0 votes
0 answers
17 views

Hi SciCharters,
I would like to create a color coded 2D scatter plot.
My approach is the IPointMarkerPaletteProvider interface. It works, but I have experienced a huge performance difference when I individually colored every datapoint of my 2D chart and using a static color.
When I use the same provider but only a single color there is no performance issue at all.

Here is the relevant code of my PointMarkerPaletteProvider interface:

 public PointPaletteInfo? OverridePointMarker(IRenderableSeries rSeries, int index, IPointMetadata metadata)
    {
            var myMetaData= metadata as MyRecordMetadata;
            var colorBarPosition = GetColorBarPosition(myMetaData.PlotValue);

            _pointMarkerColorOverrides.Fill = _ColorBar[colorMapPosition];
            _pointMarkerColorOverrides.Stroke = _ColorBar[colorMapPosition];
             return _pointMarkerColorOverrides;
    }

The _ColorBar contains only 256 values and the Color is selected according to the myMetaData.PlotValue in GetColorBarPosition().
The series is plotted as expected, but it takes “ages”(seconds for 4000 data points) for rendering it on the chart.
If I replace the assignments of _pointMarkerColorOverrides.Stroke and _pointMarkerColorOverrides.Fill with one static color, there’s no performance issue at all.

I was just curious if that is the expected behaviour? Would it be better (in terms of performance) to switch to another chart type (e.g. heatmap chart) to plot color coded values?

  • Tim asked 4 days ago
  • last active 4 days ago
0 votes
0 answers
24 views

In our view model, the data range is expanded to include data outside of the X-Axis range. This is done to preserve the spline curve which is defined by previous points– doing this prevents the spline curve from changing drastically by including X number of points outside the range.

When the Draw function is called, the point context that was bound in is filtered to the X Axis range which leads to the spline curve changing as you pan (especially noticeable if it affects a peak).

How can I change this behavior to preserve the spline line?

0 votes
0 answers
25 views

Hi
Here’s my XAML:

                <s:SciChartDonutSurface ChartTitle="Times Distribution" ItemsSource="{Binding TimeGroups}">
                    <s:SciChartDonutSurface.ItemTemplate>
                        <DataTemplate DataType="s">
                            <s:DonutSegment SegmentValue="{Binding Path=Duration}" Text="{Binding Path=Name}"/>
                        </DataTemplate>
                    </s:SciChartDonutSurface.ItemTemplate>
                </s:SciChartDonutSurface>

And I have correctly created ObservableItems named TimeGroups, with properties Duration and Name.

I’m not seeing a thing…

What am I doing wrong?

Thnanks

0 votes
0 answers
15 views

I have a chart that uses datapoint selection on an XyScatterRenderableSeries. This series is defined as follows:

             <s:XyScatterRenderableSeries DataSeries="{Binding ChartData.SinglePointUnavailableResources}" 
                                    Stroke="CornflowerBlue" 
                                    StrokeThickness="4"
                                    modifiers:FilteringLegendModifier.IncludeSeries="False">
                <s:XyScatterRenderableSeries.PointMarker>
                   <s:EllipsePointMarker Fill="CornflowerBlue" Width="4" Height="4"/>
                </s:XyScatterRenderableSeries.PointMarker>
                <s:XyScatterRenderableSeries.SelectedPointMarker>
                   <s:EllipsePointMarker Fill="Yellow" Width="13" Height="13"/>
                </s:XyScatterRenderableSeries.SelectedPointMarker>
             </s:XyScatterRenderableSeries>

This works as expected, however I am getting broken binding warnings in my debug output window as follows:

System.Windows.Data Warning: 4 : Cannot find source for binding with reference ‘RelativeSource FindAncestor, AncestorType=’SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries’, AncestorLevel=’1”. BindingExpression:Path=Opacity; DataItem=null; target element is ‘EllipsePointMarker’ (Name=”); target property is ‘Opacity’ (type ‘Double’)
System.Windows.Data Warning: 4 : Cannot find source for binding with reference ‘RelativeSource FindAncestor, AncestorType=’SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries’, AncestorLevel=’1”. BindingExpression:Path=Stroke; DataItem=null; target element is ‘EllipsePointMarker’ (Name=”); target property is ‘Fill’ (type ‘Color’)
System.Windows.Data Warning: 4 : Cannot find source for binding with reference ‘RelativeSource FindAncestor, AncestorType=’SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries’, AncestorLevel=’1”. BindingExpression:Path=Stroke; DataItem=null; target element is ‘EllipsePointMarker’ (Name=”); target property is ‘Stroke’ (type ‘Color’)
System.Windows.Data Warning: 4 : Cannot find source for binding with reference ‘RelativeSource FindAncestor, AncestorType=’SciChart.Charting.Visuals.RenderableSeries.BaseRenderableSeries’, AncestorLevel=’1”. BindingExpression:Path=AntiAliasing; DataItem=null; target element is ‘EllipsePointMarker’ (Name=”); target property is ‘AntiAliasing’ (type ‘Boolean’)

You get the same warnings in your “PointMarkers Selection” sample.

They seem to be internal to scichart. I realise this doesn’t effect the functionality, but we generally try and avoid these in our codebase if possible, so ones that do occur are easily spotted and any potential bugs can be identified early.

Is there any way to prevent these warnings coming from scichart?

thanks

Bill

3 votes
0 answers
37 views

Hi there!
I successfully build trader chart from nice example “2D Charts -> Create Stock Charts -> Using SciStockChart”.
Then I had to draw line on the chart with candles, but the problem was, that the line didn’t have data on some dates (there is data for lots of candles, but for the red line there is only 4 points: A,B,C,D), and result i want in shown here (solved):
Result i want image

Axes:
XAxis: CategoryDateTimeAxis (Dates)
YAxis: NumericAxis (Prices)

Series:
Candles: FastCandlestickRenderableSeries (OhlcDataSeries<DateTime, double>)
Red Line: FastLineRenderableSeries (XyDataSeries<DateTime, double>)

Problem:
CategoryDateTimeAxis type ignores the XAxis values for computation of x-coordinate, and choosing only the index of the value instead. CategoryDateTimeAxis vs DateTimeAxis. I have N-number of candles and only 4 values for red line. How to receive line with no gaps, with points on their places (dates on X-axis) ? I can’t use simple DateTimeAxis, because candles don’t draws.

Solution:
1) Use double.NaN for each date (x-axis value) if no data for the red-line on date given.
2) In FastLineRenderableSeries set DrawNaNAs = LineDrawMode.ClosedLines (if don’t use this flag, you will receive something like this: WPF Chart Gaps (Nulls) in Series

Thanks a million to Julia Skorobogata from SciChart!

0 votes
41 views

I can’t seem to find any easy way to find all my questions.

0 votes
34 views

I’m currently trying to adapt an example to post here as an example repro– But in the meantime I figured I’d post and see if there are any fundamental problems with trying to do this.

The exception message states:

Additional information: Cannot get data-value from coordinate as the associated Axis is null
0 votes
34 views

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

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

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

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

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

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

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

Hi there,

I am having a few issue with an application using the SeriesBinding and IRenderableSeriesViewModel.

As a small back ground, I have an application which has a number of tabs, two of which have independent charts (one tab has 4 charts in it, the other just 1).

When I am focused on first (main) tab, and update the DataSeries, the chart in the other tab (secondary) is not updated. After this point it doesnt seem to matter if I focus on the secondary tab again, the data just wont refresh.

I was using 4.2.4.10343, but rolled back to 4.2.3.10206 (just a random step backwards) which seem to fix this issue, so maybe there is a bug that’s crept in in the last few releases? If so, it seems to be that the loss of focus / lack of visibility of the chart being updated means that the SeriesBinding is no longer valid?

Also, in my main chart (see below) I am using a CustomAnnotationChartModifier similar to that described here, and although the rollback to 4.2.3.10206 fixes the issue of the plots not redrawing, it is the case that the custom annotations are not automatically positioned when the control has no focus (more likely because it is not visible). This is the same going back to at least version 4.2.2.9381.

For info the SimulationResultViewModel.RenderViewModels object is an ObservableCollection of IRenderableSeriesViewModels populated with LineRenderableSeriesViewModels with simple XyDataSeries.

<SciChart:SciChartSurface Name="chart" Grid.Row="0" Grid.Column="0"
                              GridLinesPanelStyle="{StaticResource GridLinesPanelStyle}" SciChart:ThemeManager.Theme="BrightSpark"
                              RenderableSeries="{SciChart:SeriesBinding SimulationResultViewModel.RenderViewModels}"
                              viewModels:Injector.PassSurfaceToViewModel="True"
                              PreviewMouseDown="chart_MouseDown"
                              PreviewMouseUp="chart_MouseUp">

        <SciChart:SciChartSurface.XAxis >

            <SciChart:NumericAxis x:Name="xAxis" AxisTitle="Lap Number" DrawMajorBands="False" LabelProvider="{StaticResource CustomXAxisLabelFormatter}" GrowBy="0.02, 0.02" AutoRange="Once" VisibleRange="{Binding SimulationResultViewModel.XAxisVisibleRange, Mode=TwoWay}"/>
        </SciChart:SciChartSurface.XAxis>
        <SciChart:SciChartSurface.YAxis>
            <SciChart:NumericAxis x:Name="yAxis" AxisTitle="Time" DrawMajorBands="False"  AxisAlignment="Left" LabelProvider="{StaticResource CustomYAxisLabelFormatter}"  GrowBy="0.05, 0.05" AutoRange="Once" VisibleRange="{Binding SimulationResultViewModel.YAxisVisibleRange, Mode=TwoWay}"/>
        </SciChart:SciChartSurface.YAxis>


        <SciChart:SciChartSurface.ChartModifier>
            <SciChart:ModifierGroup>

                <viewModels:CustomAnnotationChartModifier x:Name="customAnnotations" LabelsSource="{Binding SimulationResultViewModel.ChartLabels}"/>

                <SciChart:RolloverModifier Name="rollover" SourceMode="AllSeries" DrawVerticalLine="True" ShowTooltipOn="{Binding SettingsManager.ShowToolTipOptions}"/>

                <SciChart:ZoomPanModifier ReceiveHandledEvents="True" ClipModeX="None"/>
                <SciChart:MouseWheelZoomModifier x:Name="mouseWheelZoomModifier"/>
                <SciChart:RubberBandXyZoomModifier x:Name="rubberBandZoomModifier" IsEnabled="True" IsXAxisOnly="False" ZoomExtentsY="False" IsAnimated="True" ExecuteOn="MouseRightButton"/>
                <SciChart:ZoomExtentsModifier x:Name="zoomExtentsModifier" ExecuteOn="MouseDoubleClick"/>

                <SciChart:TooltipModifier Name="tooltip" IsEnabled="True" UseInterpolation="False" TooltipLabelDataContextSelector="{Binding TooltipDataContext}" ShowTooltipOn="{Binding SettingsManager.ShowRollOver}" />


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


    </SciChart:SciChartSurface>
0 votes
50 views

Hi All,

Are there any examples of a 3D column chart where the Axis are prevented from overlapping the data? Also want to add a cursor and be able to select a column. I’m using NumericAxis3d and LogarithmicNumericAxis3D.

Thanks
Mark.

0 votes
56 views

Hi,

I have an application where I can potentially create, plot and export (as png) hundreds of graphs. It all runs smoothly but the “ExportToFile” method of the SciChartSurface. It seems to never de-allocate the memory it uses even after disposing the SciChartSurface itself. After a few hundred graphs, the application ends up using 70Gb+ of ram but if I just comment out the ExportToFile line, the application never uses more than 2Gb of ram (as expected).

I’ve tried putting:
GC.Collect();
GC.WaitForPendingFinalizers();
…both after the ExportToFile and after disposing the graphs, but it makes no difference.

Has anyone experienced this issue? Is there anything else that I can try?

Thanks
/Daniel

0 votes
49 views

I’m looking to either extend the RubberBandXyZoomModifier to provide this size growing behavior when the mouse has left the chart area (shown in the attached image) or build one from scratch (having to rebuild the normal box-zoom components (the box etc).

I assume from reading around the the latter option will be the only option.

Thanks!

0 votes
60 views

I have two charts (separate SciChartSurface via SciChartGroup) stacked on top of each other. Each chart has its own X-Axis and both charts’ mouse interaction are linked via MouseGroupId. All fine so far.

I then generate a lineseries ‘series1’ on the first surface, 1000 datapoints, time stamps are 1 minute apart. I also generate a second line series ‘series2′ on the second surface, but this series’ first time timestamp start 2 hours later than the first series.

Expected behavior is that the series2 will be shifted by 2 hours and not start at the same position as series1 but rather extend by 2 hours. That is, however, not the case on my chart.

What is wrong here and is this a potential bug?

I need both XAxes to be perfectly aligned, meaning the cross hair label on each XAxis displays the exact same time stamp. Please note that I customized the LabelProvider to display milliseconds also, but I use the same Label Provider for both charts, so no difference here.

Can someone please chime in what is going on?

Please see attached charts to illustrate what I have been describing (screenshot1 shows intended behavior but on the same chart, I want this behavior to occur on separate panes/charts). Screenshot 2 describes the problem I am having.

Thanks

  • bbmat asked 3 weeks ago
  • last active 2 weeks ago
1 vote
56 views

I have multiple series on a chart surface, each with their own y-axis. I do not want to display all y-axes as this would take up half the chart surface.

Is there a way to make the matching y-axis only visible when the mouse cursor hovers over a series (hit-test)? How would I go about that?

Thanks
Matt

  • bbmat asked 3 weeks ago
  • last active 2 weeks ago
0 votes
58 views

I’ve got a few questions about plotting Lat/Long coordinates in real time.

Situation
I’ve got two data series – (Timestamp, Latitude) & (Timestamp, Longitude) being updated 10 times/second. My goal is to graph car position in real time with a ScatterRenderableSeries and color each point according to other channels of data (temp, brake pressure, yaw rate, etc..).

How to best associate metadata?
In order to color the plotted points I need to be able to associate them with their respective timestamps. Do you have any advice on how best to do so? It seems the most obvious solution is using the PointMetaData API, but I’m curious if there would be a more efficient solution (like say somehow using an Xyz/Xyy DataSeries).

Dealing with the unsorted nature of the data?
I’m aware that SciChart performs much better when only inserting sorted data into a XyDataSeries. Seeing as I only receive GPS data 10 times/sec, I’m wondering if you think the lost performance will still pose a problem?

I’d appreciate any advice you could give!

0 votes
66 views

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

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

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

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

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

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

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

Thanks,
Ben

  • Bernd Held asked 3 weeks ago
  • last active 2 weeks ago
1 vote
68 views

Hi – I have a scrolling sine wave and would like to put a numeric value at the high point of each peak. Is this possible? I’ve attached a pic of what I need. ty

0 votes
62 views

DateTimes are represented with ticks equal to 100 nanoseconds– But using a DateTimeAxis I cannot plot points down to this level.

It appears that the axis is converting to doubles behind the scenes and thus loses the precision that a DateTime has. When zoomed in the chart pan and zoom has erratic behavior (freezing and not responding in what appears to be a non-systematic way).

I’ve attached a simple solution that reproduces the unexpected behavior.

0 votes
66 views

Is there an example of building a custom axis using a long or ulong?

So far I’ve tried implementing AxisBase and created necessary types for the given interfaces (IRange, IDeltaCalculator, IAxisDelta). But after implementing the minimum set of pieces, the chart comes up blank.

Also strangely the only two functions that get called on the AxisBase implementation are

GetDefaultNonZeroRange()
IsOfValidType() — This gets called with a DoubleRange rather than my ULongRange.. Somehow a DoubleRange is being introduced, but I can’t see how.

Is there any good documentation/design info out there about how to do this?

I have attached the solution I’ve been working with.

0 votes
65 views

I am trying to use a BoxAnnotation to put an image on my graph. I am using BelowChart AnnotationCanvas so I can have the graph on top of the image. However, doing so also puts the grid lines on top of the annotation as well. Is there a way to keep the annotation below the chart but still keep it above the grid lines?

0 votes
64 views

We are evaluating SciChart for use in our product which includes displaying higher precision date time information that the .NET framework DateTime can provide (1 tick = 100ns resolution).

I started by sub-classing the AxisBase class, but I am having issues finding documentation that could help in implement certain methods.

Some of the methods below are outlined–but a full, custom axis example (i.e. example of DateTimeAxis) would be of even greater help.


IRange CalculateYRange(RenderPassInfo renderPassInfo) — Is this only used for YAxis? How does orientation affect the range?

List GetSupportedTypes() — Is this supported IRange types? What types are these?

IRange GetDefaultNonZeroRange() — Is this just the smallest non-Undefined range? Else what is default?

void CalculateDelta() — This has no parameters or return values. The documentation is not clear on what members must need to be set here. Without any example it seem impossible to know how to implement this.

Why does IRange define Diff as type T? In the case of DateRange Diff becomes DateTime. Shouldn’t diff be of type TimeSpan? Are the ticks in the DateTime simply used as a TimeSpan type value? (Assuming Diff is the span of the range). I could implement IRange and use different types (DateTime and TimeSpan) respectively for Min/Max and Diff in this case (assuming I don’t need the templated version of the type.

0 votes
73 views

We are evaluating SciChart for use in our product which includes displaying digital signals. Our goal is to display thick(er) bars when the bit is on and a thin line when it is off. I’ve enjoyed your API so far and have found a simple way of achieving this with the FastBandRenderableSeries paired with the XyyDataSeries.

The issue I’m facing arises when the digital step change isn’t honored at some point during the rendering
(because the issue comes and goes with different states of zooming or panning).
Attached is a screenshot which shows the behavior we are seeing.

We are outputting the data-points as the diagram shows (not inserting extra points to dictate when the edge falls or rises). The following shows the data points we are outputting and the lines we want drawn.

1-------1------
              |
              0-------0

We could also potentially try outputting extra points to see if that could work around the issue–But as a part of our trial we would like to get a feel for SciChart support responsiveness.

1-------1----*1
              |
              0-------0

In this second diagram ‘*’ is the artificial point injected to potentially sidestep the issue.

Let me know if there is any additional information can provide.
Thanks!


Update — Added reproduction solution
Is there some kind of bug bounty? 😛 Just kidding.

0 votes
67 views

I have a project that shows some data series and their FFTs on a scichart.

Now I need the chart to only show an FFT from a portion of the data series. The overview control’s functionality is perfect for this, but as far as I understand it only shows the parent surface’s data and cannot be bound to ViewModel itself (I’m using MVVM pattern)? So if I bind the overview control to the parent (FFT) control, then the overview shows a part of an FFT, and that’s not what I want.

Is there any way I could use the overview control for limiting the data range of the original data and then processing the data manually? Or do I have to create a custom control for this?

Thanks.

  • Juho asked 1 month ago
  • last active 2 weeks ago
0 votes
79 views

i currently place my custom (templated) legend inside the Scichartsurface (via xaml).

How can I offer the feature to drag the legend with the mouse to any location on the surface? Please note that I also use mouse movements and clicks for several chart modifiers so most likely I would have to check whether the mouse is hovering over the legend when a left mouse click event is raised?

Could you please get me started with some ideas or thoughts as I am not sure how to approach this issue.

Thanks

  • bbmat asked 1 month ago
  • last active 2 weeks ago
0 votes
80 views

Do you have limitation on maximum of data points? my x = 151, z = 200. The chart would not populate.

0 votes
82 views

Hi

I have a TextAnnotation which is set up to edit, I use KeyUp event handler to inspect the Text property but this property does not get updated. If I set the Text value in code I can read it back with the value set in code no problem.

The KeyEventArgs parameter has the character typed but thinking I shouldn’t need to build up a string of entered text?

Looked through documentation and Q&A but nothing relevant.

Thanks
Miles

  • milesm asked 1 month ago
  • last active 2 weeks ago
0 votes
84 views

I try to add data series and have them rendered on a chart surface. The surface and entire chart library is wrapped in an mvvm-based api. The sci chart control and wrapping library are rendered on a document panel. I add new data series via the viewmodel and here is where I have some unexpected behavior:

a) When being on a different document panel, meaning the chart control is NOT visible, and when I add a new data series via view model and then view the document panel that hosts the sci chart control, no chart series are rendered on the chart but I do see the correct legend data (such as chart series name, color, stroke thickness). Please see below screen shot “Capture1.jpg” .

b) When I make the sci chart control visible by viewing the document panel that hosts the sci chart control and then via a button and command add the very same data series via my chart control’s view model the charts are correctly rendered. Please see “Capture2.jpg”.

My question is why is that the case? I basically expose a method in my chart library view model that lets me add data and if I invoke that methods while being on a document panel that does not host the chart control the added data series is not rendered on the chart. But strangely the correct chart legend data are displayed and also the chart control itself is correctly rendered. No problems when the hosting document panel is active and the very same method is invoked.

Basically what I currently observe is that the data series are not rendered at all as long as the chart control is not “in view” or the hosting document panel is not selected. I am sure programmatically all references and bindings are correct.

I have spend many hours debugging this issue and do not seem to find an answer. Any pointers?

Thanks a lot,
Matt

Edit:

Here is how I bind the content control to the view model of my sci chart charting library (user control)

<ContentControl Grid.Row="1" Content="{Binding ChartControl, Mode=OneWay}" />

…and the view model is instantiated in the hosting view model constructor:

public MainWindowViewModel()
{
   ChartControl = new SciChartControlViewModel();

    ExitApplicationCommand = new RelayCommand(OnExitApplicationCommand);
    LoadDataSeriesFromFilesCommand = new RelayCommand(OnLoadDataSeriesFromFilesCommand);
    RefreshDataSeriesFromFilesCommand = new RelayCommand(OnRefreshDataSeriesFromFilesCommand);


    Test();

}

…Test() performs the following action:

private void Test()
{
    var quotes = new List<Quote>();
    List<DateTime> timeStamps = new List<DateTime>();
    List<double> values = new List<double>();
    List<SciChartAnnotation> annotations = new List<SciChartAnnotation>();
    Random rand = new Random((int)DateTime.Now.Ticks);
    DateTime currentDt = DateTime.Now;
    double currentValue = 0;

    for (int index = 0; index <= 50000; index++)
    {
        var randomValue = rand.NextDouble();
        currentDt = currentDt + TimeSpan.FromSeconds(randomValue);
        currentValue = currentValue + randomValue - 0.5;

        if (index % 1000 == 0)
        {
            var buySell = rand.NextDouble() > 0.5 ? SciChartAnnotationDirection.Buy : SciChartAnnotationDirection.Sell;
            annotations.Add(new SciChartAnnotation(buySell, currentDt, currentValue, "Index:" + index));
        }

        timeStamps.Add(currentDt);
        values.Add(currentValue);

        quotes.Add(new Quote(){DataProviderId = "Provider1", SymbolId = "Symbol1", QuoteType = QuoteType.BidAsk, CompressionType = TimeCompressionType.NoCompression, CompressionUnits = 0, TimeStamp = currentDt, Bid = currentValue, Ask= currentValue + 0.05, });

    }

    ChartControl.AddDataSet("Pane1", "0.00000", quotes, annotations);
    //ChartControl.AddDataSet("MattSeries", ChartType.Scatter, 1, "0.00000", timeStamps, values);

}

…it basically tries to render chart series and annotations.

Strangely, as mentioned before, the series legends render correctly and the annotations also all render correctly but the chart series do not! Could this be a bug?

  • bbmat asked 1 month ago
  • last active 3 weeks ago
0 votes
92 views

Hi all,

I’ve programmed an interface with scichart 2D (Visual studio 2012)

when i run my program from debug mode, this is running perfect, when i run in release mode the program is shutdown and

i got this message :

An exception of type ‘System.OutOfMemoryException’ occurred in SciChart.Data.dll but was not handled in user code.

Any idea ?

Thanks a lot

0 votes
87 views

How do I create Context menu for the extended versions of the annotations? Please see my code below: I am getting an error PART is missing at runtime:

    <Style x:Key="LineArrowExdendedAnnotationStyle" TargetType="local:LineArrowExdendedAnnotation">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:LineArrowExdendedAnnotation">
                    <Grid x:Name="PART_LineArrowAnnotationRoot" Width="{TemplateBinding Width}"
                        Margin="{TemplateBinding Margin}">
                        <Grid.ContextMenu>
                            <ContextMenu>
                                <MenuItem Command="Cut">
                                </MenuItem>
                                <MenuItem Command="Copy">
                                </MenuItem>
                                <MenuItem Command="Paste">
                                </MenuItem>
                            </ContextMenu>
                        </Grid.ContextMenu>
                    </Grid>
                </ControlTemplate>

            </Setter.Value>
        </Setter>
    </Style>
  • Selva Arun asked 1 month ago
  • last active 2 weeks ago
0 votes
0 answers
90 views

I am using a CursorModifier with custom template to display tool tips with cross hairs on my scatter plots. Everything works as intended until the plot gets busy with points then the tool tip only shows for a few points. I am using ResamplingMode.None on my XyScatterRenderableSeries. Any ideas? Thanks

<s:CursorModifier IsEnabled="{Binding AreTooltipsEnabled}"
                  ReceiveHandledEvents="False" 
                  ShowTooltipOn="MouseOver" 
                  ShowAxisLabels="False"
                  SourceMode="AllSeries"  
                  ShowTooltip="True"                                      
                  TooltipContainerStyle="{StaticResource CursorTooltipStyle}"
                  LineOverlayStyle="{DynamicResource CursorLineStyle}"
                  UseInterpolation="True"/>
0 votes
127 views

Hello,

I need to plot an arrow line serie, that is, a fastLine rendearable serie where the point markers are connected by arrow
(in the middle or the end) lines.

Screenshots attached.

Thanks in advance.

  • argonte asked 2 months ago
  • last active 2 weeks ago
0 votes
122 views

Hello!
I need to show YValue of each point edded to Line series. I tryed to use SeriesValueModifier, but there was no effect. How can I do this?

0 votes
120 views

How do I serialize custom annotation, as I am not able to serialize using Annotation collection as it only serializes the iAnnotation properties and not extended properties like TEXT.

  • Selva Arun asked 2 months ago
  • last active 1 month ago
0 votes
107 views

I am trying to launch the demo application from VS 2017 but I get the error:
Severity Code Description Project File Line Suppression State
Error This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is C:\Users\\AppData\Roaming\SciChart SDK\.nuget\NuGet.targets. SciChart.Examples.Demo C:\Users\\AppData\Roaming\SciChart SDK\Examples\SciChart.Examples.Demo\SciChart.Examples.Demo.csproj 689

Failing section:

  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Manually restoring NuGet packages returns:
All packages are already installed and there is nothing to restore.

Clearing NuGet cache does not change anything.

Same issue goes for VS 2015

0 votes
129 views

Hi,

I recently made the switch from using RenderableSeries directly to using the RenderableSeriesViewModel. We used to add LegendData manually when we added a series to the graph (as we don’t want all the series to show up on the legend).

But looking at how legends are displayed, it requires the RenderableSeries object itself, which of course I no longer have access to.

How can I go about adding custom SeriesInfo without any RenderableSeries.

  • kewur asked 2 months ago
  • last active 2 months ago
0 votes
0 answers
111 views

Hi guys,
one of our customer see an issue similar to description of SC-2510 in release notes. Since we update the chart from 3.2 to 4.2.2 we expect the issue to be gone, but it is still reported. Do you have any detailed description of how axis templates should be reworking as noted in release notes? May be we are still missing something.
Regards Andreas

0 votes
134 views

Hi
I have to plot a column graph represents working time of tasks
The column width is between 0-1.
Is there any way to change the column width in order to specify the working time of the tasks
Open Attach file
Task 1(Yellow) : Working from 1-3, 10-15
Task 2 (Red): Working from 4-8 , 17-18

0 votes
135 views

Hi
How can i add a regular menu : File (open, save , save as….), Edit …
the motivation is the draw a graphs by choosing the File->open from the menu

0 votes
139 views

Is there a way to extend the trial version license?

0 votes
136 views

Hi,

How can I change the fontsize of a LegendModifier programmatically? By trying the code below changes the backgound color but not the font size:

var style = new Style(typeof(LegendModifier));
style.Setters.Add(new Setter(Control.BackgroundProperty, Brushes.DarkSlateGray));
style.Setters.Add(new Setter(Control.FontSizeProperty, 34d));
MainChart = new SciChartSurface
{
    HorizontalAlignment = HorizontalAlignment.Stretch,
    VerticalAlignment = VerticalAlignment.Stretch,
    Padding = new Thickness(30,20,16,0),
    Background = new SolidColorBrush(Color.FromRgb(32,32,33)),
    YAxis = new NumericAxis(),
    ChartModifier = new ModifierGroup
    {
        ChildModifiers = new ObservableCollection<IChartModifier>
        {
            new LegendModifier
            {
                Margin = new Thickness(10),
                VerticalAlignment = VerticalAlignment.Top,
                GetLegendDataFor = SourceMode.AllSeries,
                LegendPlacement = LegendPlacement.Inside,
                ShowLegend = true,
                ShowVisibilityCheckboxes = true,
                Style = style,
            }
        }
    }
};
0 votes
141 views

I’m trying to switch RolloverMarker template at runtime from code behind, with no luck.
I have ControlTemplate definitions in XAML.
I create FastLineRenderableSeries objects and assign RolloverTemplates to them dymanically in code behind.
I add the series into sciChartSurface.RenderableSeries.
All this works.

When user clicks a series, a selectionChanged eventHandler method tries to switch the RolloverMarkerTemplate of the selected series

ControlTemplate ylbl = (ControlTemplate)Application.Current.Resources["RolloverLabelTopTemplate"];
 flrseries.RolloverMarkerTemplate = ylbl;

The template object is created from Resources and assigned to the series, but the visible presentation is not changed.

Is there a better ( = working) way to do this or is it even possible ?

0 votes
142 views

I would like to be able to resize the TextAnnotation but couldn’t. The only thing I can do is move by clicking on the small circle at the top left corner of the Text annotation.

How can I resize text annotation manually with mouse like how I do a BoxAnnotation?

  • Selva Arun asked 2 months ago
  • last active 2 months ago
0 votes
0 answers
140 views

is it possible that chaging 3D Mesh’s X, Y Coordinate. (It’s just allow the grid coordinate)
and Line that point to point is straight, is it possible straight line changes the Curve line?

0 votes
130 views

XAxis Labels

I want to have a label on the x axis for each custom annotations. Is this possible. if so how do i do that.

Thanks

0 votes
142 views

I have modified the single ended ray as found in another answer to be an infinite ray that extends both ends of the line until the touch the sides of the plot.

I would like to implement a label similar to in VerticalLineAnnotation but am unsure how I go about adding additional elements to the annotation’s template.

I have included my modified version of the rayannotation below.

/// <summary>
/// Defines a read-only or editable Line annotation, which draws a Ray to the edges of the chart viewport, depending on two X,Y coordinates
/// e.g. if X Y coordinates are placed inside the chart, then the line extends until it hits the edge or the chart viewport
/// </summary>
public class RayAnnotation : LineAnnotation
{
    private Line _line;
    private Line _ghostLine;

    /// <summary>
    /// Initializes a new instance of the <see cref="RayAnnotation" /> class.
    /// </summary>
    public RayAnnotation()
    {
        // Reuse LineAnnotation control template from SciChart
        DefaultStyleKey = typeof(LineAnnotation);

    }

    /// <summary>
    /// When overridden in a derived class, is invoked whenever application code or internal processes call <see cref="M:System.Windows.FrameworkElement.ApplyTemplate" />.
    /// </summary>
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        AnnotationRoot = GetAndAssertTemplateChild<Grid>("PART_LineAnnotationRoot");
        _line = GetAndAssertTemplateChild<Line>("PART_Line");
        _ghostLine = GetAndAssertTemplateChild<Line>("PART_GhostLine");
    }

    /// <summary>
    /// Override in derived classes to handle specific placement of the annotation at the given <see cref="AnnotationCoordinates" />
    /// </summary>
    /// <param name="coordinates">The normalised <see cref="AnnotationCoordinates" /></param>
    protected override void PlaceAnnotation(AnnotationCoordinates coordinates)
    {

        // Calculate gradient of line
        double m = (coordinates.Y1Coord - coordinates.Y2Coord) / (coordinates.X1Coord - coordinates.X2Coord);
        double b = coordinates.Y1Coord - m * coordinates.X1Coord;

        if (double.IsNaN(m) || double.IsInfinity(m))
        {
            // Possible divide by zero above, just draw a single point for now
            _line.X1 = coordinates.X1Coord;
            _line.Y1 = 0;
            _line.X2 = coordinates.X1Coord;
            _line.Y2 = base.ParentSurface.ModifierSurface.ActualHeight;
            _ghostLine.X1 = coordinates.X1Coord;
            _ghostLine.Y1 = 0;
            _ghostLine.X2 = coordinates.X1Coord;
            _ghostLine.Y2 = base.ParentSurface.ModifierSurface.ActualHeight;
            return;
        }

        // Calulate projected X,Y point that touches the right/top edge, or left/bottom edge of the viewport
        double projectedX1 = 0;
        double projectedX2 = base.ParentSurface.ModifierSurface.ActualWidth;
        double projectedY1 = m * projectedX1 + b;
        double projectedY2 = m * projectedX2 + b;

        if (projectedY1 < 0 || projectedY1 > base.ParentSurface.ModifierSurface.ActualHeight)
        {
            bool isDown = projectedY1 < 0;
            projectedY1 = isDown ? 0 : base.ParentSurface.ModifierSurface.ActualHeight;
            projectedX1 = (projectedY1-b) / m;
        }

        if (projectedY2 < 0 || projectedY2 > base.ParentSurface.ModifierSurface.ActualHeight)
        {
            bool isDown = projectedY2 < 0;
            projectedY2 = isDown ? 0 : base.ParentSurface.ModifierSurface.ActualHeight;
            projectedX2 = (projectedY2-b) / m;
        }

        //Console.WriteLine("Projected x{0:0.00},y{1:0.00},x{2:0.00},y{3:0.00}", projectedX1, projectedY1, projectedX2, projectedY2);

        // Apply Calculated Line
        _line.X1 = projectedX1;
        _line.Y1 = projectedY1;
        _line.X2 = projectedX2;
        _line.Y2 = projectedY2;
        _ghostLine.X1 = projectedX1;
        _ghostLine.Y1 = projectedY1;
        _ghostLine.X2 = projectedX2;
        _ghostLine.Y2 = projectedY2;
    }
}
  • Hugoagogo asked 2 months ago
  • last active 2 months ago
0 votes
154 views

I am have a vertical stacked chart setup which shares the same x- axis ranges. I am trying to find a way to add vertical lines in both the charts at once and further I need the vertical lines to be dragged in sync. When one vertical line annotation is dragged, I need the same movement to happen in the other chart as well. I can share a prototype if you want. Please suggest a solution.

Showing 1 - 50 of 2k results
STAY UPDATED
Signup now and we’ll keep you updated with product developments and you will be notified the moment SciChart iOS Charts is released and available.
STAY UPDATED
Signup now and we’ll keep you updated with product developments and you will be notified the moment SciChart Android Charts is released and available.
THANK YOU
Your details have been received.
We like to make sure we only send information to clients who want to hear from us, so if you check your email now, you will find a confirmation email from us. Please click the confirm link and you'll will be added to our updates.