Pre loader

Tag: Annotations

Welcome to the SciChart Forums!

  • Please read our Question Asking Guidelines for how to format a good question
  • Some reputation is required to post answers. Get up-voted to avoid the spam filter!
  • We welcome community answers and upvotes. Every Q&A improves SciChart for everyone

WPF Forums | JavaScript Forums | Android Forums | iOS Forums

1 vote
9k views

Hello,

I am trying to evaluate Scichart for purchase. I am using live data (17 Channels, many samples per second) to draw FastLineRenderableSeries (0-100% on the y axis, time on the x axis). I have everything working satisfactorily using the MVVM pattern. I have tried the HighQualityRenderSurface and Direct3D10RenderSurface.

Are these renderers actually working or am I still using the software renderer?

I need to draw a translucent rectangle on the chart to indicate a “Good” range of values of y values (say 40-50%).

If I use annotations to draw a rectangle, everything slows down and it is unusable. If I use immediate mode drawing and the HighQualityRendererSurface it is kind of OK. If i use immediate mode drawing and the Direct3D10RenderSurface the rectangle and the series lines alternately flash slowly and it is unusable.

How can I draw a rectangle on the screen using live data and get good performance? Do I need the license for this to work well?

Thanks.

1 vote
0 answers
11k views

Hi,

I’m having the same problem as corvex here: https://www.scichart.com/questions/question/problem-with-the-horizontal-line-annotations-on-vertically-stacked-axes, but I wasn’t sure if replying to his topic (which is older) would get the support team’s attention.

I am basically combining the VerticallyStackedAxes example with the SeriesTooltipsExample. The labels for the annotations are drawn in the wrong place below the chart. The main difference is that I am running 3.42.0.6778 (Runtime version v4.0.30319) and he was running an older version.

Attached is an image and my XAML

<Window.DataContext>

</Window.DataContext>

<Window.Resources>
    <Style x:Key="YAxisStyle" TargetType="s:AxisBase">
        <Setter Property="HorizontalAlignment" Value="Right" />
        <Setter Property="AutoRange" Value="Never" />
        <Setter Property="AxisAlignment" Value="Right" />
        <Setter Property="DrawMinorGridLines" Value="False" />
        <Setter Property="DrawMinorTicks" Value="False" />
        <Setter Property="DrawMajorGridLines" Value="True" />
        <Setter Property="DrawMajorBands" Value="False" />
    </Style>
    <ItemsPanelTemplate x:Key="YAxesPanel">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="10" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
        </Grid>
    </ItemsPanelTemplate>
</Window.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <!--  Create the chart surface  -->
    <s:SciChartSurface x:Name="MassChart" Grid.Column="2" Grid.ColumnSpan="2" Grid.RowSpan="2"
                       s:ThemeManager.Theme="Chrome" LeftAxesPanelTemplate="{StaticResource YAxesPanel}" RightAxesPanelTemplate="{StaticResource YAxesPanel}">
        <!--  Create an X Axis with Growby  -->
        <s:SciChartSurface.XAxis>
            <s:NumericAxis GrowBy="0.1, 0.1" TextFormatting="#" ScientificNotation="None" MaxAutoTicks="30"
                           DrawMinorTicks="False" DrawMinorGridLines="False" AutoRange="Never"
                           VisibleRange="0,29" />
        </s:SciChartSurface.XAxis>

        <!--  Create a Y Axis with Growby. Optional bands give a cool look and feel for minimal performance impact  -->
        <s:SciChartSurface.YAxes>
            <s:NumericAxis x:Name="Precut" AxisTitle="Precut" Id="Precut" Style="{StaticResource YAxisStyle}" GrowBy="0.5, 0.5"
                           DrawMajorBands="True" TextFormatting="#.#" VisibleRange="14,22" Grid.Row="0" />
            <s:NumericAxis x:Name="Postcut" AxisTitle="Postcut" Id="Postcut" Style="{StaticResource YAxisStyle}" GrowBy="0.5, 0.5" 
                           DrawMajorBands="True" TextFormatting="#.#" VisibleRange="9.6,14" Grid.Row="2" />
        </s:SciChartSurface.YAxes>

        <s:SciChartSurface.RenderableSeries>
            <s:FastLineRenderableSeries DataSeries="{Binding WaferPrecutMassSeries}" SeriesColor="Blue" YAxisId="Precut" />
            <s:FastLineRenderableSeries DataSeries="{Binding WaferPostcutMassSeries}" SeriesColor="Blue" YAxisId="Postcut" />
        </s:SciChartSurface.RenderableSeries>
        <s:SciChartSurface.Annotations>
            <s:HorizontalLineAnnotation HorizontalAlignment="Stretch"
                                        FontSize="12"
                                        LabelPlacement="Axis"
                                        LabelTextFormatting="0.0"
                                        ShowLabel="True"
                                        Stroke="#E53333"
                                        StrokeThickness="2"
                                        YAxisId="Postcut"
                                        Y1="{Binding LowThreshold, Mode=OneWay}" />
            <s:HorizontalLineAnnotation HorizontalAlignment="Stretch"
                                        FontSize="12"
                                        LabelPlacement="Axis"
                                        LabelTextFormatting="0.0"
                                        ShowLabel="True"
                                        Stroke="#33C833"
                                        StrokeThickness="2"
                                        YAxisId="Postcut"
                                        Y1="{Binding HighThreshold, Mode=OneWay}" />
        </s:SciChartSurface.Annotations>
    </s:SciChartSurface>
</Grid>

I’m afraid I don’t know why the code boxes are nested in the question, but in any case, I think it gets the point across.

1 vote
15k views

Hello,
I’m using your package for price charting. And I need to put on one bar (or candlestick) several markers (for example several dots with different colours and sizes). Also sometimes I need to change size on some of these markers. Now I am doing this by putting CustomAnnotations. Is there a way to plot the same with for example XyScatterRenderableSeries to increase drawing speed?

Best regards,
Roman.

  • Roman asked 9 years ago
  • last active 9 years ago
1 vote
13k views

Hi.

I need to change CustomAnnotation visual view, when property IsSelected = true.

I tried next code:

<Style x:Key="CustomAnnotationStyle" TargetType="{x:Type sc:CustomAnnotation}">
    <Setter Property="IsEditable" Value="True"/>
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="BorderBrush" Value="Orange"/>
            <Setter Property="BorderThickness" Value="2"/>
        </Trigger>
    </Style.Triggers>
</Style>

But it has no effect.
When I select the Annotation by mouse click, then it still have LightGreen rectangle.

In the Goal I need the Orange circle around of the Content of the Annotation.

Thanks.

1 vote
10k views

Hi,

Basically, I want to draw line annotation and add over them the difference in percent between two Y points related to the axis. I tried this code:

    <s:LineArrowAnnotation Stroke="#555" StrokeThickness="2" X1="1.2" X2="2.5" XAxisId="XAxis1" Y1="3.8" Y2="6">
    <s:AnnotationLabel LabelPlacement="Top" LabelStyle="{StaticResource sideLabel}" Text="centered" />
</s:LineArrowAnnotation>

As you did in some of your examples but doesn’t seems to work with LineArrowAnnotation.

Please help me.

Thanks!

0 votes
8k views

I’ve seen lots of questions like that here but still can’t figure out how to work with UserControl in WPF and how can i dinamically arrange annotations on user events (lines, figures,text etc). Can you please provide links which may help to get started from scratch. Thank you!

0 votes
11k views

See the picture how my chart looks. The vertical line was created when pressing the stop button. It is a Fifo chart so the annotation will leave the view at some point in the future.

The code to create the annotation was taken from this sample: https://www.scichart.com/questions/question/add-vertical-line-annotation-programmatically

My real code looks like this:

     private void OnStopChartCommand()
    {
        // create vertical line
        if (_chartSeries.Count > 0)
        {
            IXyDataSeries<double, double> dataSeries = _chartSeries[0].DataSeries as IXyDataSeries<double, double>;
            if (dataSeries != null && dataSeries.XValues.Count > 0)
            {
                double lastValue = dataSeries.XValues.Last();
                AnnotationCollection.Add(CreateVerticalLineAnnotation(lastValue));
            }
        }
    }

    public AnnotationCollection AnnotationCollection
    {
        get { return _annotationCollection; }
        set
        {
            _annotationCollection = value;
            OnPropertyChanged();
        }
    }

    private IAnnotation CreateVerticalLineAnnotation(double xPlacement)
    {
        var annotation = new VerticalLineAnnotation
        {
            VerticalAlignment = VerticalAlignment.Stretch,
            StrokeThickness = 2,
            Stroke = new SolidColorBrush(Colors.Black),
            CoordinateMode = AnnotationCoordinateMode.Absolute,
            IsEditable = true,
            X1 = xPlacement,
            XAxisId = ChartConfigVm.XAxis.AxisId,
            YAxisId = ChartConfigVm.YAxes[0].AxisId
        };

        return annotation;
    }

So far, so good. Everything works fine. But of course when pressing the button new annotations are added and the old ones are not removed.
I would like them removed when they are not visible anymore on this FiFo Chart. But not when pressing the button because I don’t know when that will happen.
Does someone have an idea how to do this once the annotation leaves the chart? This is not timecritical to me but it should happen at some point if possible automatically (or automatically triggered – I can write code to remove it).

  • Uwe Hafner asked 9 years ago
  • last active 9 years ago
1 vote
0 answers
11k views

Hi,

I made a chart with paired vertical axes showing 2 pairs of signals in parallel (see the first screenshot). I used an approach similar to the ‘vertically stacked axes’ example in the demo gallery. Then, I added two horizontal line annotations and assigned them to the different Y-axis via the YAxisId property. The first annotation at the top part is shown properly and can be dragged. The second annotation (with identical properties, save for the YAxisId) is shown in the correct Y position, but its label is missed and the line can not be dragged. Actually, the label is present too, but far below, with the offset equal to the half of the chart (see the second screenshot).

Is it a bug, or I miss some setting that can fix this problem? I use the version 3.1.0.4759.

Thank you in advance!
Ilia

  • corvex asked 9 years ago
  • last active 9 years ago
0 votes
13k views

I have an unfinished project using the trial version on Visblox. I did not buy the licence since the performance was not good enough. Now Visiblox stopped support and so I am migrating to SciCharts. I have some questions though hope you can help.

  1. The chart is DateTime,Double type, and there are multiply datapoints on some dates. When editing I need to delete particular points but the Remove method seems to remove all Y values for specific X value. So is it possible to remove a particular X,Y datapoint only from the chart?

  2. I need to give each datapoint a name and I was using TextAnnotations on Visiblox (which had a datapoint property). However on SCIcharts the TextAnnotations does not have Datapoint property. How can I do this please?

  3. I have 2 charts showing audio waveforms. One showing the full time and one showing a zoomed section. When I hit Play I need the zoomed chart to follow the music waveform. With Visiblox I was using a dispatcher timer and on every tick(20ms) I update the Xaxis range, however the performance was not very good.
    What best method to use for SCI charts please?

1 vote
11k views

As usual the basics of SciChart seem to be eluding me and I can’t get the simplest of features to work (hence the reference to it in the title).

All I want is an annotation in the top left of the screen in which I can dynamically change the text from the code behind – but no matter what I do it just wouldn’t do it. I therefore started a test project to see if I could work out what was going on and have recreated the problem only using XAML.

It would seem the annotation will only appear if the XAxis is defined as a “CategoryDateTimeAxis” AND it’s defined within “SciChartSurface.XAxes” tags. Any other combination and it won’t work.

Anyway – if someone could cast their eye over my test code and explain what’s happening I’d be most grateful.

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="http://schemas.abtsoftware.co.uk/scichart" x:Class="AnnotationTest.MainWindow"
    Title="MainWindow" Height="350" Width="525">
<Grid>

    <s:SciChartSurface HorizontalAlignment="Stretch" VerticalAlignment="Stretch" s:ThemeManager.Theme="Chrome">

        <!-- Works - Slimmed down from the "Annotations are easy" example 
        <s:SciChartSurface.XAxes>
             <s:CategoryDateTimeAxis AxisAlignment="Bottom" AxisTitle="XAxis 1" Id="XAxis1" TextFormatting="0.0#" AutoRange="Always"/>
        </s:SciChartSurface.XAxes> 
        -->
        <!-- Doesn't Work and this is from the "Interactions with Annotations" example 
        <s:SciChartSurface.XAxis>
            <s:CategoryDateTimeAxis AutoRange="Always"/>
        </s:SciChartSurface.XAxis>   
        -->

        <!-- Doesn't Work - Slimmed down from the "Create Annotations Dynamically" example
        <s:SciChartSurface.XAxis>
            <s:CategoryDateTimeAxis/>
        </s:SciChartSurface.XAxis>
        -->

        <!-- Doesn't Work - How our Axis are currently defined and what I would like to put a text annotation on
        <s:SciChartSurface.XAxis>
            <s:DateTimeAxis AxisTitle="Date" Id="XAxis1" AxisAlignment="Bottom"></s:DateTimeAxis>
        </s:SciChartSurface.XAxis>
        -->

        <s:SciChartSurface.YAxis>
            <s:NumericAxis TextFormatting="0.0#" VisibleRange="0, 10"/>
        </s:SciChartSurface.YAxis>

        <s:SciChartSurface.Annotations>
            <s:TextAnnotation HorizontalAnchorPoint="Center" Text="Anchor Center (X1, Y1)" VerticalAnchorPoint="Bottom" X1="5.0" XAxisId="XAxis1" Y1="8.0"/>
        </s:SciChartSurface.Annotations>

    </s:SciChartSurface>

</Grid>

2 votes
12k views

Hi, in the Dynamically Create Annotations demo, the method on how annotations are created is by (for example a line):

1) First Click on the annotation button
2) Click on the SciChart Surface. This creates the first point of a line
3) Click again on the end point of the line.

Instead of having to do two clicks, is there a way to click and drag instead? eg.

1) First Click on the annotation button
2) Click on the SciChart Surface. This creates the first point of a line
3) drag to the end point of the line.

I just want to mimic Microsoft power point behaviour as our users are more familiar with it.

Thanks

  • Azrin Sani asked 9 years ago
  • last active 2 years ago
0 votes
11k views

Hi,

Was hoping you could point me in the right direction. I’m trying to create horizontal line annotations on demand using MVVM but have become stuck. I’ve have them working in MVVM when the chart loads but not when a button is clicked although I have achieved this using code behind.

I’ve tried using an observable collection of AnnotationCollection type but am struggling to add the horizontal lines annotations to it as they are of a different type.

Any pointers in the right direction would be much appreciated!

Thanks,
Tim

Example of MVVM

TradeAnnotations = CreateHorizontalAnnotations();

private AnnotationCollection _annotations;

    public AnnotationCollection TradeAnnotations
    {
        get { return _annotations; }
        set
        {
            _annotations = value;
            OnPropertyChanged("TradeAnnotations");
        }
    }

    private static AnnotationCollection CreateHorizontalAnnotations()
    {
        //var annotations = new AnnotationCollection();

        var annotations = new AnnotationCollection();

        Color strokeColor = (Color)ColorConverter.ConvertFromString("#008B45");
        Brush strokeBrush = new SolidColorBrush(strokeColor);

        HorizontalLineAnnotation annotation = new HorizontalLineAnnotation();

        annotation.ShowLabel = true;
        annotation.LabelPlacement = LabelPlacement.Axis;
        annotation.HorizontalAlignment = HorizontalAlignment.Stretch;
        annotation.IsEditable = true;
        annotation.SnapsToDevicePixels = true;
        annotation.Stroke = strokeBrush;

        annotation.X1 = DateTime.Now;
        annotation.Y1 = 129;

        annotations.Add(annotation);

        return annotations;          
    }

Example of code behind

        private void CreateHorizontalAnnotations(object sender, System.Windows.RoutedEventArgs e)
    {
        //var annotations = new AnnotationCollection();

        var annotationCollection = new AnnotationCollection();

        Color strokeColor = (Color)ColorConverter.ConvertFromString("#008B45");
        Brush strokeBrush = new SolidColorBrush(strokeColor);

        HorizontalLineAnnotation annotation = new HorizontalLineAnnotation();

        annotation.ShowLabel = true;
        annotation.LabelPlacement = LabelPlacement.Axis;
        annotation.HorizontalAlignment = HorizontalAlignment.Stretch;
        annotation.IsEditable = true;
        annotation.SnapsToDevicePixels = true;
        annotation.Stroke = strokeBrush;

        annotation.X1 = DateTime.Now;
        annotation.Y1 = 129;

        this.priceChart.Annotations.Add(annotation);
    }
0 votes
15k views

Here we use a TextAnnotation as follows

 var textAnnotation = new TextAnnotation
                                 {
                                     Name = seriesAnnotationParameter.Name,
                                     Text = seriesAnnotationParameter.Text,
                                     ToolTip = seriesAnnotationParameter.ToolTip,
                                     XAxisId = XAxisId,
                                     YAxisId = YAxisId,
                                     X1 = seriesAnnotationParameter.X1,
                                     Y1 = seriesAnnotationParameter.Y1,
                                     HorizontalAnchorPoint = HorizontalAnchorPoint.Center,
                                     VerticalAnchorPoint = VerticalAnchorPoint.Center,
                                     TextAlignment = TextAlignment.Center,
                                     Foreground = new SolidColorBrush(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)),
                                     Opacity = 0.5,
                                     BorderThickness = new Thickness(1),
                                     CornerRadius = new CornerRadius(1),
                                     IsEditable = false
                                 };

It works perfectly all-rite when you attach it to the chart the first time as in attached image TextAnnotation_Good.png. However, after zooming in or zooming out, the annotation is resized to undesirable sizes as in attached image TextAnnotation_Bad.png.

How to make TextAnnotation to resize itself based on the size of text inside it ?

This is a very special TextAnnotation centered around a x,y coordinate. There is never X2,Y2 for this use case.

2 votes
14k views

I want to have a BoxAnnotation where Y1 (- double.Infinity) and Y2 (+ double.Infinity). Basically I wanna specify only X1 and X2. And the behaviour must ensure always the box annotations Y1 & Y2 stretch to visible area even when I resize (zoomout) the chart.

In the screen shot its not stretched.

1 vote
14k views

How to create custom annotation which has BoxAnnotation with a VerticalLine Annotation at one end.

At present I’m achieving this by creating both annotations and synchronizing them in ChartModifier.
Look at the attached image where you can see two BoxAnnotations both having a VerticalLineAnnotation at one end. I’m disabling editing for BoxAnnotation and enabling editing only for VerticalLineAnnotation.

When VerticalLineAnnotation is dragged in X-Direction, I get the X1 value from it and manually set it to BoxAnnotations X2.

This is not good implementation. I can see lag between sync events. Is it possible to create a custom annotation which incorporates both Box and Vertical line annotations ? Or is it possible to set IsEditing for BoxAnnotations One End only ?

0 votes
13k views

How to change IsEditable behaviour for a annotation ?

Requirement is to allow Editing (Allow resizing box annotation only on X1 or X2 or Y1 or Y2 side).

It must be possible to specify which sides we can resize. (IsEditable on X1 or X2 or (X1 and X2) all combinations ). Because I’m programmatically creating box annotations.

1 vote
17k views

I am considering applying server-side licensing for my javerScript application.

In the document below, there is a phrase “Our server-side licensing component is written in C++.”
(https://support-dev.scichart.com/index.php?/Knowledgebase/Article/View/17256/42/)

However, there is only asp.net sample code on the provided github.
(https://github.com/ABTSoftware/SciChart.JS.Examples/tree/master/Sandbox/demo-dotnet-server-licensing)

I wonder if there is a sample code implemented in C++ for server-side licensing.

Can you provide c++ sample code?
Also, are there any examples to run on Ubuntu?

1 vote
15k views

Hi, I’m trying to position vertical line annotations on a chart. I want to position them on a visible part of the chart, but I need to use the Absolute coordinate mode as I want the annotation to move with the data as the chart is panned or zoomed.

My question is then: how can I find the currently visible extents of the X axis? If the chart is zoomed or panned I need to know what the left and rightmost visible X-axis values are (independent of the data).

0 votes
53k views

I want to add annotations programmatically. I need to add line with arrow and textbox at Y1 and X1 of a line. It creates pointed annotation.

1 vote
16k views

I have a chart with multiple dataseries, with each dataseries having annotations on top (like in the Trade Markers example). I have a legend which already shows or hides dataseries using a checkbox, but how can I make this checkbox also show or hide the annotations for that dataseries? Can I hook an event when this checkbox is triggered, or when the dataseries visibility changes?

0 votes
10k views

Hi there,

I created a simple map application. The map itself is displayed as a custom annotation (image) below the chart. The problem is, I can’t zoom into the custom annotation (map). The map will keep it’s original dimensions when zoomed. Is there a way to zoom in/out a custom annotation?

Tim

  • Tim asked 9 years ago
  • last active 9 years ago
1 vote
20k views

I have got a CustomTextAnnotation like in this example CustomTextAnnotation
I added a Rendertransform like this.

<s:TextAnnotation.RenderTransform>
    <RotateTransform Angle="90"/>
</s:TextAnnotation.RenderTransform>

But the AnchorPoint is not used as rotation center.
I thought of using ToCoordinate() but need a calculator for that which is not available within CustomTextAnnotation.

What is best practice to achive the requested rotation in sciChart?

0 votes
12k views

I’m trying to create a few ChartSurface’s which show same elements but with different visible ranges.
If i share DataSeries by binding to SeriesSource this works. But if i try to binding Annotations to a few ChartSurface’s i see annotations only on last chart. If i manually create copy of annotations that everything works but takes a long time.
Is there any way to binding Annotations to a few Charts?

  • l1pton17 asked 10 years ago
  • last active 5 years ago
1 vote
18k views

Hi,

I’m using the following code to create a text annotation:

private void AddLabel(DateTime StartTime, DateTime EndTime, string label)
{
    TextAnnotation text = new TextAnnotation();
    text.YAxisId = "LeftAxis";
    text.HorizontalContentAlignment = System.Windows.HorizontalAlignment.Center;
    text.Text = label;
    text.CoordinateMode = AnnotationCoordinateMode.RelativeY;
    text.X1 = StartTime;
    text.X2 = EndTime;
    text.Y1 = .05;
    text.Y2 = 0;
    text.TextAlignment = TextAlignment.Center;
    text.TextStretch = Stretch.UniformToFill;
    text.Background = new SolidColorBrush(Color.FromArgb(0x80, 0x80, 0x80, 0x80));
    text.BorderBrush = new SolidColorBrush(Color.FromArgb(0xC0, 0xD0, 0xD0, 0xD0));
    text.BorderThickness = new Thickness(2);
    sciChart.Annotations.Add(text);
}

Unfortunately the text doesn’t scale like I want it to though. The size of the text stays the same even when the chart is small, making the height greater than .05. Is there a way to make the text get smaller as the chart is shrunk so that it stays within the .05 Y boundary?

I attached 2 images to illustrate the issue.

Thanks,
Greg

Showing 51 - 74 of 74 results