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

0 votes
0 answers
16 views

Hello everyone,

I have a chart which has data added to its plots at inconsistent time intervals.
My intention is to be able to limit the displayed data by their x-values, for example only showing the last 60 seconds. At the same time I wish to be able to zoom/pan back to the old data, so I can not discard it, and from what I saw “VisibleRangeLimit” did not work this way either, as it limited every zoom or pan action to the given range limit. Mainly I need the auto ranging to limit the display to my limits (and return the graph to its scrolling mode), while every other zoom/pan interaction stops the scrolling without being limited.

The solution I came up with for this is to “move” the VisibleRange of the axis whenever new data points outside the current displayed range are added to the chart’s plots. (For example if a point is plotted at 61 seconds, the VisibleRange moves to min=1 and max=61.)

I made this into an axis class, which inherits the NumericAxis and uses DataRangeChanged to change the VisibleRange on data changes and VisibleRangeChanged to react to auto ranging and zooming/panning.

private void UpdateVisibleRange()
{
    DoubleRange visibleRange = (DoubleRange)GetMaximumRange();
    visibleRange.Min = visibleRange.Max > ViewLimit ? visibleRange.Max - ViewLimit : 0;
    VisibleRange = visibleRange;
}

// DataRangeChanged += DataRangeChangedHandler;
private void DataRangeChangedHandler(Object sender, EventArgs e)
{
    if (IsAutoRangeActive)
    {
        UpdateVisibleRange();
        IsAutoRangeActive = true;
    }
}

// VisibleRangeChanged += VisibleRangeChangedHandler;
private void VisibleRangeChangedHandler(Object sender, VisibleRangeChangedEventArgs e)
{
    if (base.AutoRange == AutoRange.Always)
    {
        base.AutoRange = AutoRange.Never;
        UpdateVisibleRange();
        IsAutoRangeActive = true;
    }
    else if (IsAutoRangeActive)
    {
        IsAutoRangeActive = false;
    }
}

(Only relevant code shown.)

How it works:
If the VisibleRange of the axis is changed through other means than new data being plotted or AutoRange being set to Always, a zoom/pan action is assumed and IsAutoRangeActive gets set to false.
If AutoRange is set to Always it causes the VisibleRange to change, which causes a VisibleRangeChanged event to trigger, activating IsAutoRangeActive and recalculating the VisibleRange to fit the desired view limit.
IsAutoRangeActive being true causes data range changes from new data to call UpdateVisibleRange, which moves the displayed range according to the view limit. As changes to the VisibleRange cause a VisibleRangeChanged event to trigger, which sets IsAutoRangeActive to false, IsAutoRangeActive needs to be reset to true after the VisibleRange has been updated in the handler.

The problem:
It all seemed to work fine until I noticed that this method does not update the actually displayed axis VisibleRange to the latest range. It uses the previous VisibleRange whenever the DataRange changes, despite VisibleRange apparently being set to the correct values. For example, if the previous range was at “min=1, max =61”, and the next is at “min=2, max=62”, the chart’s x-axis would display “min=1, max=61” instead.
It seems that “VisibleRange = visibleRange;” in UpdateVisibleRange, called from DataRangeChangedHandler, does not update the displayed range.
It works fine if the change is trigger by setting AutoRange to Always, and the x-axis’ VisibleRange corrects itself when the y-axis is modified.

(Overall this seems like quite a crude solution to me, and I wonder if there isn’t a better way of achieving this. Maybe I overlooked something?)

0 votes
32 views

Hello,

is it possible to color the curve with different color(s) after specific value(s)
to sumurise the idea, please see the illistustration in this image : https://i.stack.imgur.com/1MWKL.png

Thank you for your support

Regards

0 votes
34 views

Hi ,

Does scichart graph X-Axis supports datetime?

I am getting examples with only NumericAxis examples in internet.

So is it possible to send me some code snippet with datetime with X-Axis.

Thanks & regards,
Kartik K

  • kartik K asked 6 days ago
  • last active 6 days ago
0 votes
39 views

a) change y and z axis order , must be (x,y)->z,
b) the contour graph is sliced in rectangular form when colored, how to solve this?

a) we are trying product, but when I draw surface graph z data come to y axis or tooltip label,I use like this
int xSize = 15;
int ySize = 100;

        var meshDataSeries = new UniformGridDataSeries3D<double>(xSize, ySize)
        {



            SeriesName = "Uniform Surface Mesh",
        };


        int h = 0;

        for (int x = 0; x <xSize; x++)
            for (int y = 0; y < ySize; y++)
        {

            {

                double z =(double) shortArrayz[h];
             meshDataSeries[y, x] = z;

                h += sizeof(short);

            }

b) images attached, contour graph code is atteched

  • bar asked 6 days ago
  • last active 3 days ago
0 votes
46 views

Dear SciChart Team:

I want to have two vertical lines on the graph and get the spacing of the two lines as the mouse moves,
as shown in the attached picture.

Can you provide a simple example showing the architecture of this feature?

0 votes
44 views

I’d like to display the values of series data points using TooltipModifer.

However, if you hold the mouse cursor over the series, the tool tip will be displayed even if there are no data points.

Attach a movie to explain the phenomenon.

I would like to display the tool tip only when I hold the mouse cursor where I have the data point, how can I do it?

0 votes
50 views

As shown in the attached image, if you display a small value with TooltipModifier, it will be rounded to 0 and displayed.

I specified ContentStringFormat with Xaml, but the decimal point is not displayed.

How can I correctly display it?

0 votes
42 views

Hello, I have two questions. The first is we use the annotations to create threshold lines and labels on axis. We would like these lines to appear in the legend data. Is there a way to add them manually to the collection of seriesinfo? What do you recommend.

The second question is that we have a large amount of series data and we were rendering the chart to bitmap. When there is a lot of data the legend is in a scrollview and you cannot see all of it. What do you recommend do in this scenario. Is there a way to make the legend appear in wrap panel?

Thanks, Kurt

0 votes
43 views

Hello. I’d like to be able to double-click on a point, present a prompt to the user to enter in an X and Y value, and then set that point to the new value.

I can handle the prompt but I’m not too sure the best way to setup a double-click on a point to trigger a command.

Any help would be appreciated. Thanks!

  • Greg Knox asked 2 weeks ago
  • last active 1 week ago
0 votes
57 views

It seems like a memory leak of sciChartSurface. After call Dispose(), some sciChartSurfaces are also refrenced by MouseManager and can’t release.

I also use ants memory profiler, but this web page can’t upload images and attachments, it alerts Forbidden!

The leak instance reference chain is:
MouseManager.I -> Dictionary<string,IList<Mouse.IReceiveMouseEvents>> -> SciChart.Core.Utility.Mouse.IReceiveMouseEvents[] -> SciChart.Charting.ChartModifiers.ModifierGroup -> SciChart.Charting.Visuals.SciChartSurface .

Below is the key code:

>

    private SciChartSurface sciTickPriceChartSurface;
    private FastLineRenderableSeries lastPriceLineRenderableSeries;
    private SciChartSurface sciTickVolumeChartSurface;
    private FastLineRenderableSeries volumeLineRenderableSeries;

    private void LoadSciTickCharts()
    {
        // set sciTickPriceChartSurface xAxis
        var nowDateTime = DateTime.Now; 
        var todayDate = nowDateTime.Date;

        // set sciTickPriceChartSurface
        sciTickPriceChartSurface = new SciChartSurface();
        sciTickPriceChartSurface.ViewportManager = new TickChartViewportManager(todayDate);

        var priceChartXAxis = new DiscontinuousDateTimeAxis
        {
            DrawLabels = false,
            MajorDelta = new TimeSpan(1, 0, 0),
            MinorDelta = new TimeSpan(0,12,0),
            MinimalZoomConstrain = new TimeSpan(1,0,0),
            AutoTicks = false,
            DrawMajorGridLines = true,
            DrawMinorGridLines = false,
            AutoRange = AutoRange.Never,
            LabelProvider = new TickDateTimeAxisLabelProvider(),
            //Calendar = new LSECalendar(), 
            VisibleRange = new DateRange(nowDateTime - new TimeSpan(1,0,0), nowDateTime + new TimeSpan(3,0,0)),
        };

        sciTickPriceChartSurface.XAxes.Add(priceChartXAxis);

        // set sciTickPriceChartSurface yAxis
        var priceYAxis = new NumericAxis
        {
            DrawMajorGridLines = true,
            DrawMinorGridLines = false,
            AutoRange = AutoRange.Always,
            GrowBy = new DoubleRange(0.2, 0.2)
        };
        sciTickPriceChartSurface.YAxes.Add(priceYAxis);

        // lastPriceLineSeries
        lastPriceLineRenderableSeries = new FastLineRenderableSeries
        {
            Stroke = Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF),
            StrokeThickness = 1,
            DataSeries = new XyDataSeries<DateTime, double>(),
        };
        sciTickPriceChartSurface.RenderableSeries.Add(lastPriceLineRenderableSeries);
        CursorModifier.SetSnapToSeries(lastPriceLineRenderableSeries, true);

        // sciTickVolumeChartSurface
        sciTickVolumeChartSurface = new SciChartSurface();

        // set sciTickVolumeChartSurface yAxis
        var volumeYAxis = new NumericAxis
        {
            DrawMajorGridLines = true,
            DrawMinorGridLines = false,
            AutoRange = AutoRange.Always,
            GrowBy = new DoubleRange(0, 0)
        };
        sciTickVolumeChartSurface.YAxes.Add(volumeYAxis);

        var volumeChartXAxis = new DiscontinuousDateTimeAxis
        {
            DrawLabels = true,
            MajorDelta = new TimeSpan(1, 0, 0),
            MinorDelta = new TimeSpan(0, 12, 0),
            MinimalZoomConstrain = new TimeSpan(1, 0, 0),
            AutoTicks = false,
            DrawMajorGridLines = true,
            DrawMinorGridLines = false,
            AutoRange = AutoRange.Never,
            LabelProvider = new TickDateTimeAxisLabelProvider(),
            //Calendar = new LSECalendar()
        };
        sciTickVolumeChartSurface.XAxes.Add(volumeChartXAxis);

        // Bind the VisibleRange of chart2.XAxis.VisibleRange to chart1.XAxis.VisibleRange TwoWay
        var xAxisVisibleRangeBinding = new Binding("VisibleRange")
        {
            Source = priceChartXAxis,
            Mode = BindingMode.TwoWay,
        };
        BindingOperations.SetBinding(volumeChartXAxis, SciChart.Charting.Visuals.Axes.AxisBase.VisibleRangeProperty, xAxisVisibleRangeBinding);

        // volumeLineSeries
        volumeLineRenderableSeries = new FastLineRenderableSeries
        {
            Stroke = Color.FromArgb(0xFF, 0x0, 0xFF, 0xFF),
            StrokeThickness = 1,
            DataSeries = new XyDataSeries<DateTime, long>(),
        };
        sciTickVolumeChartSurface.RenderableSeries.Add(volumeLineRenderableSeries);
        CursorModifier.SetSnapToSeries(volumeLineRenderableSeries, true);

        var grid = new Grid();
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(2, GridUnitType.Star) });
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Auto) });
        grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) });

        var gridSplitter = new GridSplitter
        {
            MinHeight = 4,
            HorizontalAlignment = HorizontalAlignment.Stretch,
            Background = new SolidColorBrush(Color.FromRgb(0xFF, 0xFF, 0x0))
        };

        Grid.SetRow(sciTickPriceChartSurface, 0);
        Grid.SetRow(gridSplitter, 1);
        Grid.SetRow(sciTickVolumeChartSurface, 2);

        grid.Children.Add(sciTickPriceChartSurface);
        grid.Children.Add(gridSplitter);
        grid.Children.Add(sciTickVolumeChartSurface);

        var priceChartSurfaceModifier = new ModifierGroup(

            // Allow pan on Left mouse drag
            new ZoomPanModifier { ExecuteOn = ExecuteOn.MouseLeftButton, ClipModeX = SciChart.Charting.ClipMode.None },
            // <!-- Allow Mousewheel Zoom -->
            new MouseWheelZoomModifier(),
            // <!-- Allow Zoom to Extents on double click -->
            new TickChartZoomExtentsModifier { ExecuteOn = ExecuteOn.MouseDoubleClick },
            // Alow cursor modifier
            new CursorModifier
            {
                SourceMode = SourceMode.AllSeries,
                ShowTooltipOn = ShowTooltipOptions.Always,
                ShowAxisLabels = true,
                ReceiveHandledEvents = true,
                ShowTooltip = true,
                IsEnabled = true,
            }
        );
        sciTickPriceChartSurface.ChartModifier = priceChartSurfaceModifier;

        var volumeChartSurfaceModifier = new ModifierGroup(

            // Allow pan on Left mouse drag
            new ZoomPanModifier { ExecuteOn = ExecuteOn.MouseLeftButton, ClipModeX = SciChart.Charting.ClipMode.None },
            // <!-- Allow Mousewheel Zoom -->
            new MouseWheelZoomModifier(),
            // <!-- Allow Zoom to Extents on double click -->
            new TickChartZoomExtentsModifier { ExecuteOn = ExecuteOn.MouseDoubleClick },
            // Alow cursor modifier
            new CursorModifier
            {
                SourceMode = SourceMode.AllSeries,
                ShowTooltipOn = ShowTooltipOptions.Always,
                ShowAxisLabels = true,
                ReceiveHandledEvents = true,
                ShowTooltip = true,
                IsEnabled = true,
            }
        );
        sciTickVolumeChartSurface.ChartModifier = volumeChartSurfaceModifier;

        var tickChartsMouseEventSharedGroupName = UUIDHelper.CreateUUIDString(false).ToString();
        MouseManager.SetMouseEventGroup(priceChartSurfaceModifier, tickChartsMouseEventSharedGroupName);
        MouseManager.SetMouseEventGroup(volumeChartSurfaceModifier, tickChartsMouseEventSharedGroupName);

        var tickChartSharedGroupName = UUIDHelper.CreateUUIDString(false).ToString();
        SciChartGroup.SetVerticalChartGroup(sciTickPriceChartSurface, tickChartSharedGroupName);
        SciChartGroup.SetVerticalChartGroup(sciTickVolumeChartSurface, tickChartSharedGroupName);

        this.ChartGrid.Children.Clear();
        this.ChartGrid.Children.Add(grid);
    }

    public void Dispose()
    {
        if (isDisposed == true) return;
        isDisposed = true;

        // Don't forget to clear chart grid child list.
        ChartGrid.Children.Clear();

        if (sciTickPriceChartSurface != null)
        {
            // Chart's Dispose method needs to be called when chart is 
            // no longer needed so that all unmanaged resources 
            // (DirectX etc.) are released.
            sciTickPriceChartSurface.ChartModifier?.OnDetached();
            sciTickPriceChartSurface?.Dispose();
            sciTickPriceChartSurface = null;

        }
        if (sciTickVolumeChartSurface != null)
        {
            // Chart's Dispose method needs to be called when chart is 
            // no longer needed so that all unmanaged resources 
            // (DirectX etc.) are released.
            sciTickVolumeChartSurface?.ChartModifier?.OnDetached();
            sciTickVolumeChartSurface?.Dispose();
            sciTickVolumeChartSurface = null;
        }
        GC.SuppressFinalize(this);
    }
0 votes
51 views

I making MVVM application.

I want to Bind SelectedPointMarkers of DataPointSelectionModifier.
But SelectedPointMarkers is readonly property.

Therefore, I couldn’t bind.

How can I bind it?

0 votes
51 views

I want to create a chart with Fixed number of column series with uniform width. For example, X Asis visible range is 0-100 and i want to have 5 column series, 1st column range is 0-20, 2nd columns is 20-40, 3rd column is 40-60 ,4th coulmn is 60-80 and 5th column is 80-100. and there should not be space between columns.I have attached a screen shot of chart that i expected. Please let me know whether its possible?
Thanks

  • deepak b asked 2 weeks ago
  • last active 2 weeks ago
0 votes
66 views

I’m trying to build a chart control that adheres to MVVM and noticed that I have the option to use NumericAxis or NumericAxisForMvvm, but I’m not sure exactly what the differences would be. I couldn’t really find anything in depth on them in the documentation but maybe I missed something.

Is anyone aware of any differences? I’m assuming NumericAxisForMvvm would be best for what I’m wanting but I’m not exactly sure why.

Thanks!

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

Hi,

we’ve just update scichart from 5.1.0.11425 -> 5.2.1.11757

Since this, the renderable series is not updating when the bound property change is notified.

anybody else seen this?

            <s:XyScatterRenderableSeries DataSeries="{Binding AcceptableDataPoints}" s:TooltipModifier.TooltipTemplate="{StaticResource XyTooltipTemplate}">
                <s:XyScatterRenderableSeries.PointMarker>
                    <s:EllipsePointMarker Width="9" Height="9"  Fill="#AAFFFFFF" Stroke="SteelBlue" StrokeThickness="2" ></s:EllipsePointMarker>
                </s:XyScatterRenderableSeries.PointMarker>
            </s:XyScatterRenderableSeries>
1 vote
87 views

I am making a waterfall 3D chart like the Simple Waterfall 3D Chart of SciChart WPF Example Suite.

The Simple Waterfall 3D Chart is not displayed when changing the window size repeatedly.

After that, it is displayed when moving the screen. I do not know why.

0 votes
98 views

I have a chart that has real-time data being added to it and I want to ensure the chart sizes up to show everything. This chart also displays series that have already been added and I would like to zoom in/out on those. How would I handle both of these at the same time?

0 votes
101 views

We are making SCIChart with MVVM.
For the Model layer, we use .NET Standard 2.0.
The View layer and the ViewModel layer use .Net Framework 4.7.1.

Since we want to aggregate into the logic in the Model layer,
I would like to use some of the parts SciChart provides with .NET Standard 2.0.

An example
SciChart.Charting.Model.DataSeries.IPointMetadata
SciChart.Charting.Model.DataSeries.IXyDataSeries

How can I decide whether the SCI offering class can be used in .NET Standard?

By acquiring “SciChart (5.2.1.11757)” from NuGet in the library of the Model layer,
I could confirm that it work correctly.

What is the package for the .Net Standard 2.0 project?

Thank you.

0 votes
89 views

Hello,

I’m working on an analysis software that uses Scichart API for generating graphics in WPF.

I recently used Scichart IOS / Android apps and I really liked the graphics animations.

However, I did not find the way to do the same thing in WPF.

Is it possible to animate the loading of graphics or any other animation?

Thank you.

0 votes
95 views

I have an issue with the latest version of Scichart. I have a chart which we are exporting to an image after cloning. We are using the CreateCloneOfSurfaceInMemory API call to take the clone. The problem is that, the annotations are getting lost from the cloned surface. I spent some time debugging and found that this is getting lost when we have VerticalSliceModifier in the Modifier group. I have attached the SciChart_CreateAnnotationsDynamically example which is modified to replicate this issue.

0 votes
93 views

I am trying to add a VerticalLineAnnotation with a text at the bottom to my SciChart graph.

The similar thing works great when the XAxis is a NumericalAxis, but throws an Exception when it is a TimeSpanAxis.

var commentAnnotation = new VerticalLineAnnotationViewModel()
{
    // Setting the LabelValue only works when the XAxis is a NumericalAxis
    // and throws an Exception when it is a TimeSpanAxis
    LabelValue = "vertical line annotation",
    ShowLabel = true,
    // adjust this to '9' when trying it with a NumericalAxis
    X1 = TimeSpan.FromHours(9),
};
AnnotationViewModels.Add(commentAnnotation);

My SciChartSurface looks like this:

<s:SciChartSurface Annotations="{s:AnnotationsBinding AnnotationViewModels}">
    <s:SciChartSurface.XAxis>
        <s:TimeSpanAxis>
            <s:TimeSpanAxis.VisibleRange>
                <s:TimeSpanRange Min="00:00:00" Max="10:00:00" />
            </s:TimeSpanAxis.VisibleRange>
        </s:TimeSpanAxis>
    </s:SciChartSurface.XAxis>
</s:SciChartSurface>
0 votes
0 answers
109 views

Please see attached. My UI with SciChart and then the byte[] using ExportToBitmap() that is displayed on a Crystal Report. Is this a SciChart issue? My reports guy is not in today and I’m concerned that it could be a SciChart issue, but it could very well be Crystal Reports as well. Anyone seen anything like this before?

0 votes
103 views

Hi

Is it possible to achieve an effect like shown on the attached image – where the background color of the chart changes over time?

/Flemming Rosenbrandt

0 votes
96 views

Hi,

We have the WPF 2D version.

We have bound the VisibleRange on both X and Y axes to our viewmodel.
A combo-box selection triggers the OnPropertyChanged which will assign a default range depending on the type of data we want to display.
We also have allowed for the user to drag the axes and adjust the ranges as desired.

This all works as we’d expect, until the user does a manual adjustment, then the binding to the combo-box seems to be broken (the default ranges we set for the given data no longer update the X and Y axes).

0 votes
123 views

I have more than one chart in my UI, and they are on separate tabs. As soon as I call .ExportToBitmapSource() for one of the charts that is not shown (it’s tab is not selected) an exception is thrown… UIElement.Measure(availableSize) cannot be called with NaN size. Is there a way around this?

I saw yesterday in the documentation that it appears the product doesn’t support this. That would be a big bummer.

1 vote
129 views

Hello,

I recently migrated to SciChart from Telerik.
Passage more than excellent from the point of view of the architecture and, of course, of the performances.

A small note about the style of the SciChartScrollbar of an axis.

I can obtain a results similar to the attached image?
Main points are:

  • Put scrollbar between Axis and chart area
  • Styling scrollbar extremity with the little gray arrows.

Tanks very much,
marc.

0 votes
0 answers
97 views

I have a requirement to save a chart as an image to a Crystal Report. I can pass a byte[] of the image using ExportToBitmapSource() and then converting this to a byte array using a MemoryStream. However, quality is significantly lost in the process. Here is an example of my source.

MyChart.RenderPriority = RenderPriority.Immediate;
MyChart.ZoomExtents();
var bitmap = MyChart.ExportToBitmapSource();

using (MemoryStream stream = new MemoryStream())
{
    BitmapEncoder encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bitmap));
    encoder.Save(stream);
    byte[] bytes = stream.ToArray();
}

Later on I set the value of a blob field of the dataset passed to the Crystal Report to this byte array.

Quality of the image is pretty good when I save directly to file, but most important when I use the MyChart.ExportToFile() I actually lose some of the markup annotations when I set the “useXamlRenderSurface” to true. I.e. I have custom text markups that show a border and the border doesn’t get saved with the image.

The thing about the Crystal Report is that our report designer can set the actual size of the image to be shown in terms of inches. If I am able to save/export the chart image in those same proportions I believe the image would look fine since it wouldn’t be getting stretched in the report.

Suggestions?

1 vote
0 answers
120 views

Hello, I am currently importing and displaying a .obj file as a ObjectModel3D object similar to the following syntax of the code provided in the AddObjectsToA3DChart.xaml example:

object:ObjectModel3D TextureSource=”{StaticResource BlackTexture}” Source=”{StaticResource KnightLowObj3DSource}” Position=”0.0625, 0.6, 0.8125″ CoordinateMode=”Relative” Scale=”0.2, 0.2, 0.2″ Rotation=”{StaticResource ObjRotationState}”

Where ObjRotationState is : object:Rotation3D x:Key=”ObjRotationState” Axis=”YAxis” Angle=”180″

The above code excerpt sets the rotation angle at 180 degrees on the Y-axis only for the ObjectModel3D object.

However, I would like to set the rotation angle for the X, Y, and Z axis of the ObjectModel3D object at the same time. Is it possible to set the rotational angle for multiple axis as described? If not, are there suggested workarounds to achieve the same behavior?

Thank you for your assistance.

0 votes
135 views

Hi,

After updating to 5.2.1.11757, all axis labels are missing when exporting graph using SciChartSurface.ExportToBitmapSource(true, size). Reverting back to 5.2.0.11680 solves the issue.

Thanks,
Kawai

  • Kawai Lo asked 2 months ago
  • last active 1 month ago
0 votes
0 answers
123 views

Hi,

When using the SciChartSurface.ExportToBitmapSource(useXamlRenderSurface: true) to export graph at large size for printing (e.g. at 600 DPI, when the screen is at 96 DPI), the grid lines and axis tick lines do not scale, and point markers are missing. Text, StrokeThickness of line series and legends are shown correctly.

Is it an issue in the renderer? Or is there any setting for the renderer to render them correctly?

Params of the attached graph:

LineSeriesStyle.StrokeThickness = 2,

MajorTickLineStyle.StrokeThickness = 1,
MinorTickLineStyle.StrokeThickness = 1,
MajorGridLineStyle.StrokeThickness = 1,

EllipsePointMarker.StrokeThickness = 1, Width = 6, Height = 6

Thanks,
Kawai

0 votes
131 views

I want to convert XorYAxis value to total chart surface coodinate Point(X, Y), that includes the axises width too.
(Not chart modifier surface coodinate)

How can I get it?

0 votes
126 views

I’m trying to make sure I can get the full extents of the image before converting to something is useful for inclusion in a report; however, when I run the following code the image is not showing the entire zoomed out chart. The chart is however zoomed out when this function is complete.

Dispatcher.Invoke(() => CrosslineGraph.DoseChart.ZoomExtents());           
        BitmapSource bitmap = CrosslineGraph.DoseChart.ExportToBitmapSource();
        byte[] bytes;

        using (MemoryStream stream = new MemoryStream())
        {
            BitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bitmap));
            encoder.Save(stream);
            bytes = stream.ToArray();
        }
0 votes
107 views

I want to zoom the chart using mouse wheel. But not zoom at mouse point center, but at the specified point center I set.

How can I do it?
Is there any properties for MouseWheelZoomModifier?

0 votes
113 views

Hallo,

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

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

            communicationBus.Publish(landMarks);

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

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

I hope you can me help.

  • Tim Nowak asked 2 months ago
  • last active 2 months ago
0 votes
143 views

Hi,

I have a very long horizontal polygon of rectangular shape made with 4 points (corners), when I zoom so that I don’t see the corners it disappears. I think is getting clipped because none of it’s points are inside the viewport, how do I solve this?

I have a CustomRenderableSeries and I tryed to:
override GetIsValidForDrawing = return true;
override GetLayoutClip return null;
Set ClipToBounds= false everywere I could think of

I’ve attached an image showing what happens as I zoom further and further.

Thank you.

0 votes
195 views

I have to show multiple charts in the UI. so, I’m using a ListView and adding SciChart in the DataTemplate.
Please refer the files for more details

After the data is loaded, there is a lot of lag in zoom in, zoom out and Rubberband functionality.

Note: I’ve to load more than 4000 XY values in the series.

Could you please take a look at the same and provide some tips for improving the performance and also let me know if there is any alternative for what I’m doing?

Thanks,
Manoj

0 votes
197 views

I have a chart that has a DateTime XAxis and a NumericYAxis. I want to do something such as FastLineRenderableSeries.GetYValueAt(datetime) yet i can’t find a suitable extension method for such thing. Seems like a fairly simple thing but the documentation does not cover it.

0 votes
193 views

All i can find is v5 documentation for wpf charts. Is there an archive for where to find the v4 charting documentation?

0 votes
194 views

Hi

I have a XyScatterRenderableSeries series with point markers.

As show on the attached image – the point markers are clipped at the edge – even though the data point is within the visible range.

I do not want to expand the visible range.

Is there a way to achieve this?

/Flemming

0 votes
205 views

Hi,
I am drawing real-time chart(512 points per second/ 1 line).
My memory usage shape is like a serrated shape…
I just want to use a certain amount that I set.

Is there any solution or option??

  • CholJin Ko asked 2 months ago
  • last active 2 months ago
0 votes
211 views

Hi,
I am binding a huge collection of series (say 10000 series) from viewmodel to RenderableSeries property of ChartSurface
as below,
RenderableSeries=”{s:SeriesBinding ListOfRenderableSeries}”

public ObservableCollection ListOfRenderableSeries
{
get { return listOfRenderableSeries; }
}

I observed that it takes huge amount of time for loading . Is there any way to bind asynchronously from viewmodel( like we have property IsAsync in wpf property binding engine)?

Thanks
deepak

  • deepak b asked 2 months ago
  • last active 2 months ago
0 votes
183 views

We have Scichart 2.32 version software. In this version, we are using DateTimeAxis format on XAxis. We are showing XAxis Labels in this Text Formatting as “yyyy-MM-dd HH:mm:ss”.
But now, we need to changing the TextFormatting of XLabels.
We need to show time representation of XLabels in Minutes format. We need to show only minute representation during the Time span in the live chart.

How can we achieve this TextFormatting in 2.32 version software? If not, can we achieve this Formatting in the newer versions?

  • gamze asked 2 months ago
  • last active 2 months ago
0 votes
0 answers
198 views

Hi.

I am using BoxAnnotation in my project. When IsEditable attribute is set to true, there are four resizing grips available on the corners of the box.

The problem is that these grips are only visible when we click on the BoxAnnotation. I couldn’t find any available property to permanently display those resizing grips.

You can view this behavior in the Interaction With Annotations example.

Looking forward to a solution.
Thanks.

  • Ali asked 2 months ago
1 vote
209 views

I need to put a text box annotation that is located in the top left of the chart. It should remain at the top left even when the chart is zoomed, moved, etc. This should likely be some sort of anchor?

0 votes
216 views

Hi,

A problem appears changing Axis Alignment if Annotations exists, look this simple example:

NumericAxis x, y;
    SciChartSurface c;
    public Sci()
    {
        InitializeComponent();

        c = new SciChartSurface();


        c.XAxes.Add(x = new NumericAxis() { Id = "x" });
        c.YAxes.Add(y = new NumericAxis() { Id = "y" });

        //some limits
        y.VisibleRange = new DoubleRange(-5, 5);
        y.VisibleRangeLimitMode = RangeClipMode.MinMax;

        //a series
        var s = new FastLineRenderableSeries() { XAxisId="x", YAxisId="y"};
        c.RenderableSeries.Add(s);

        //some datapoints
        var ds = new XyDataSeries<double>();
        ds.Append(1, 1);
        ds.Append(2, 2);
        ds.Append(3, 1);
        ds.Append(4, 2);
        s.DataSeries = ds;

        //Add an annotation
        var a = new HorizontalLineAnnotation() { Y1 = 1.5d, YAxisId = "y", Stroke = Brushes.Red, StrokeThickness = 1 };
        c.Annotations.Add(a);

        //appending the chart on a grid
        mG.Children.Add(c);


    }

If you run it all works good. Now, add a button that flip chart, with this code:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        c.Annotations.Clear();

        if (x.AxisAlignment == AxisAlignment.Left)
        {
            x.AxisAlignment = AxisAlignment.Bottom;
            y.AxisAlignment = AxisAlignment.Left;

            var a = new HorizontalLineAnnotation() { Y1 = 1.5d, YAxisId = "y", Stroke = Brushes.Red, StrokeThickness = 1 };
            c.Annotations.Add(a);
        }
        else
        {
            x.AxisAlignment = AxisAlignment.Left;
            y.AxisAlignment = AxisAlignment.Bottom;


            var a = new VerticalLineAnnotation() { Y1 = 1.5d, YAxisId = "y", Stroke = Brushes.Red, StrokeThickness = 1 };
            c.Annotations.Add(a);
        }

    }

Now nothing works good…
Can you solve it?

Thanks.
marc.

0 votes
239 views

I am trying to develop a realtime moving chart which reads data and plots. It has four channels. Both X and Y axis intervals are dynamic. ie, required to change the axis interval runtime so that graph plots accordingly.
I implemetd it. Y axis is ok. As it is an moving chart I need to reset the visible range so as to move the chart along X axis . Even if I change the interval of X axis, when I reset the visible it changes to old value.

Following is the code:

On Load:
double SclX=10; // no of intervals in x axis(major ticks)

sciChartSurface.XAxis.AutoTicks = false;
sciChartSurface.XAxis.AutoRange = AutoRange.Never;
sciChartSurface.XAxis.MajorDelta = 100; //Convert.ToDouble(trackFactorX[XCur, 1])
sciChartSurface.XAxis.MinorDelta = 20; //((Convert.ToDouble(trackFactorX[XCur, 1]) /SclX)*2)
XCurMin = 100; // Convert.ToDouble(trackFactorX[XCur, 1]);
XCurMax = 1000; //SclX * Convert.ToDouble(trackFactorX[XCur, 1]);
sciChartSurface.XAxis.VisibleRange = new DoubleRange(XCurMin, XCurMax );

Resetting visible range to implement moving chart

timer.Interval = TimeSpan.FromMilliseconds(1);
timer.Tick += (s, e) =>
{
if (i > XCurMax)
{
XCurMin = XCurMin + Convert.ToDouble(trackFactorX[XCur, 1]);
XCurMax = XCurMin + (SclX * Convert.ToDouble(trackFactorX[XCur, 1]));
sciChartSurface.XAxis.VisibleRange = new DoubleRange(XCurMin, XCurMax);
}
};

Changing interval from 100 to 200 (button click)

sciChartSurface.XAxis.AutoTicks = false;
sciChartSurface.XAxis.MajorDelta = 200; //Convert.ToDouble(trackFactorX[XCur, 1]);
sciChartSurface.XAxis.MinorDelta = 40; // ((Convert.ToDouble(trackFactorX[XCur, 1]) / SclX) * 2);
XCurMin = XCurMin;
XCurMax = XCurMin + (SclX * Convert.ToDouble(trackFactorX[XCur, 1]));

sciChartSurface.XAxis.VisibleRange = new DoubleRange(XCurMin, XCurMax);

Please check any thing else is required.

  • Sophiya K asked 2 months ago
  • last active 2 months ago
0 votes
0 answers
215 views

Tooltips from my TooltipModifier were being clipped at the SciChartSurface’s boundaries when they were long, which I didn’t like. I poked around a bit and discovered SciChartSurface.ClipModifierSurface. After setting this to false, the tooltips were allowed to spill over the boundaries as desired. Yay! However, certain elements including (but perhaps not limited to) the GridLinesPanel’s border lines and gridlines from adjacent plots end up rendering on top of the tooltip (see screenshot; it’s showing two surfaces stacked vertically, with a tooltip from the top one spilling over onto the one below it). Is there anything I can do to prevent this? Things that didn’t work were using a custom TooltipContainerStyle with the new container’s opacity set to 1.0 and its Panel.ZIndex to 100.

1 vote
221 views

We are considering using SciChart (WPF), but only if its performance is ‘reasonable’ across Remote Desktop / or via Citrix Server. Have you addressed the known problems of using WPF applications across RDP / Citrix? If so, could you provide some stats as to the performance across RDP?

The reason we are asking is that our current software in which we are using our own high speed rendering is doing fine with a lot of data on the local machine, but is not doing so well across RDP. This is not a huge surprise given the known issues of WPF and RDP (for example see https://stackoverflow.com/a/1005739/246758). We may need to deal with this slowness as more of our customers are using Citrix-servers to run our software.

Any feedback on performance of SciChart across RDP / or using Citrix would be much appreciated!

0 votes
237 views

Hey,

I have followed the 50 EEG example in creating a group of graphs which is populated using a listbox and a data template. The graphs are created and populated correctly. The issue arises when creating graph modifiers (eg Rollover, Zoom). Is there an issue with selecting these graphs or adding modifiers.

Thank You

0 votes
256 views

Hi,

I am trying to show a 2D Scatter series having 4 points that form a square. Like (0;0), (1;0), (1;1) and (0;1). Is there a way to tell the chart to keep this thing square when I resize the surface, use zoom extent, rubber zoom etc? I basically need X/Y ratio to be fixed.

Thanks

0 votes
234 views

I’m using a rollover tooltip to display series info.
Tooltips are shown in the same order data points are hit, so it changes while i would like to fix it so the user always see the series in the same position throughout the chart.

Thank you

Showing 1 - 50 of 2k results