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

2 votes
9k views

From your documentation:

4.9 Annotations

SciChart features a rich Annotations API, that allows you to place UIKit UIElements over the chart.
SciChat provides a number of built-in annotations, but you can also create your own.

SCIBoxAnnotation, SCILineAnnotation and SCITextAnnotation are cool, but sometimes it’s not enough.

Is it possible to render UIView on the chart (at least UIImage)?
Is it possible to draw dashed line annotation?
Could you provide an example of creating custom annotation class?

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.

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
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>

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?

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
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).

1 vote
3k views

Hello,
I’ve got Annotations ViewModels collection (BoxAnnotationViewModel, VerticalLineAnnotationViewModel, LineAnnotationViewModel) bound by AnnotationsBinding. Every Annotation ViewModel has properties set to:

CoordinateMode = AnnotationCoordinateMode.Absolute
IsEditable = true
DragDirections = XyDirection.XYDirection
ResizeDirections = XyDirection.XYDirection

My goal is to move and resize every annotation on SciChart surface only by integer value. Is there any way to achieve this?

Best regards,
Anna

1 vote
7k views

My chart has a black background, and I want to draw a shaded region but setting the alpha fairly low just makes it bleed into the black behind it and look rather ugly. I’d rather use a solid color for that region so it doesn’t blend with the black background, but then it blocks out the grid lines since it’s drawing above them. Is there any way to get annotations to draw below grid lines?

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
5k views

I need to serialize annotations. Not all the chart properties, but just Annotations.

I’ve tried to serialize the AnnotationCollection, as well as a List and neither works.

  • kelias asked 8 months ago
  • last active 7 months ago
1 vote
0 answers
9k 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 5 years ago
1 vote
12k views

Hello!

Please take a look at the attached screenshot first.

I have a chart configured to draw real-time trading data. X axis type is DateTime. Y axis type is Float. I need to draw vertical expiration time line.

I tried to draw coordinate relative line annotation as follows:

var date: NSDate = NSDate()

let lineAnnotation = SCILineAnnotation()
lineAnnotation.xAxisId = self.axisXId
lineAnnotation.yAxisId = self.axisYId
lineAnnotation.coordMode = .SCIAnnotationCoord_RelativeX
lineAnnotation.style.linePen = SCIPenSolid(color: Style.Chart.ExpirationDateLine.Color, width: Style.Chart.ExpirationDateLine.Width
lineAnnotation.xStart = SCI_constructGenericTypeWithInfo(&date, .DateTime)
lineAnnotation.xEnd = SCI_constructGenericTypeWithInfo(&date, .DateT            

self.chartSurface.annotation = lineAnnotation
self.chartSurface.invalidateElement()

I tried to play with different coordMode values. Line does not appear. Could you help me with this task?

1 vote
2k views

When I put localized text in my annotations, and the user selects a different language while the chart is showing, do I have to rebuild my annotations?
I had hoped that I could register ‘globalized’ texts in my annotation object, and localize them in the getter method, but it seems that the getter method is not called every time the annotation text is displayed in a ToolTip

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!

1 vote
15k 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 ?

1 vote
0 answers
775 views

I have a design where I want to show something like a box at the top of the chart and when hovering on it, it should show up a tooltip with some info, the issue I’m running into is the fact that I can’t seem to find way I can add tooltip to box annotation other than adding another box annotation when hover or hit, but it seem that it is not recommended base on my previous post before.

I also looked into scatterXY series or pointMarker, the issue with Point marker or scatter series is that I can only set one x and y, but my design require the box to be from a certain x1 point to x2 point. I can probably try to calculate the width and set the width to the point marker, but I would rather not if there is a better way.

Also looked into column chart, but that also have the same issue of only one x and y point and not sure about tooltip, but definitely seem more promising than annotation.

Please let me know if there is a better way to accomplish this, thank you!

The image below is the design.

  • Nung Khual asked 2 months ago
  • last active 2 months 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
16k 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
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

1 vote
7k views

Is it possible to disable editing annotations via user drag?

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
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
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?

1 vote
9k views

I am adding annotations to a chart that is bound to MVVM data and has multiple Y axes. The annotation data all applies to a single series/axis. I have seen that the IsHidden property can be used to toggle the visibility of an annotation. Is there a way to have the annotations tied to the visibility of a series/axis? So if the series is hidden by unchecking its box in the legend, can the associated annotations all be hidden also?

I realize that I can iterate my annotation collection and toggle the property when the series visibility changes, but it would be nice if there were a way for that to happen automatically.

  • sdamge asked 8 years ago
  • last active 2 years ago
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
0 votes
13k views

Hi,

I am working on a live graph similar to the sparse impulse series 3D and would like to add live annotations to the plotted data points to display the Y axis value.

Does the SciChart3DSurface support annotations?

If not I would like to instead use the TooltipModifier3D, but would like to force the tooltip to be displayed all the time and reduce the amount of data displayed to a single Y-Axis value. Does this sound reasonable.

Thanks

Marc

0 votes
0 answers
6k views

I have a strange margin in the end of the chart. But AxisMarkerAnnotations don’t have this margin. Only series and HorizontalLineAnnotation. Look at the picture:

enter image description here

Where did it come from?

And maybe I can add margins to max and mix values?

0 votes
12k views

Hello
I’m working on a WPF app. Everything is OK except that I don’t understand how to render the series above the annotations.
The XAML code is the following:

<s:SciChartSurface Name="sciChartSurface"
                   s:ThemeManager.Theme="SciChartv4Dark"
                   Annotations="{Binding Path=Annotations}"
                   ChartTitle="{Binding Path=GraphTitle}"
                   DataContext="{Binding Path=ChartViewModel,
                   RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type charts:ChartView}}}"
                   FocusVisualStyle="{x:Null}"
                   Focusable="True"
                   SeriesSource="{Binding Path=Series}"
                   Padding="0 5 8 0">

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


         [...]



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

    <!--  Create an X Axis  -->
    <s:SciChartSurface.XAxis>
        <s:NumericAxis AutoRange="{Binding Path=XAxis.AutoScaling,
                                           Converter={StaticResource BooleanToAutoRangeConverter}}"
                       AxisTitle="{Binding Path=XAxis.AxisTitle}"
                       DrawMajorGridLines="{Binding Path=XAxis.ShowGridLines}"
                       DrawMinorGridLines="False"
                       DrawMinorTicks="True"
                       GrowBy="0, 0.1"
                       AxisBandsFill="#1c1c1e" 
                       VisibleRange="{Binding Path=XAxis.AxisRange,
                                              Mode=TwoWay}"
                       MajorDelta="{Binding XAxis.MajorDelta, Mode=TwoWay}"
                       MinorDelta="{Binding XAxis.MinorDelta, Mode=TwoWay}"
                       AutoTicks="{Binding XAxis.AutoTicks}" 
                       />
    </s:SciChartSurface.XAxis>

    <!--  Create a Y Axis  -->
    <s:SciChartSurface.YAxis>
        <s:NumericAxis AutoRange="{Binding Path=YAxis.AutoScaling,
                                           Converter={StaticResource BooleanToAutoRangeConverter}}"
                       AxisAlignment="Left"
                       AxisTitle="{Binding Path=YAxis.AxisTitle}"
                       DrawMajorGridLines="{Binding Path=YAxis.ShowGridLines}"
                       DrawMinorGridLines="False"
                       DrawMinorTicks="True"
                       GrowBy="0.1, 0.1"
                       IsPrimaryAxis="True"
                       AxisBandsFill="#1c1c1e" 
                       VisibleRange="{Binding Path=YAxis.AxisRange,
                                              Mode=TwoWay}"
                       MajorDelta="{Binding YAxis.MajorDelta, Mode=TwoWay}"
                       MinorDelta="{Binding YAxis.MinorDelta, Mode=TwoWay}"
                       AutoTicks="{Binding YAxis.AutoTicks}"
                       />
    </s:SciChartSurface.YAxis>
</s:SciChartSurface>

Edit: this is the code that creates the horizontal annotation:

 /// <summary>
    /// Creates a chart annotation
    /// </summary>
    /// <param name="a"></param>
    /// <returns></returns>
    private AnnotationBase CreateChartAnnotation(Annotation a)
    {
        HorizontalLineAnnotation annotation;

        //not used??
        //ColorToBrushConverter brushConverter = new ColorToBrushConverter();

        annotation = new HorizontalLineAnnotation() { Y1 = a.ThresholdValue.Value };
        annotation.Stroke = new SolidColorBrush((Color)ColorConverter.ConvertFromString(a.Stroke));
        annotation.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
        annotation.IsEditable = false;
        annotation.LabelTextFormatting = string.Format("{0} 0.0", a.Label);
        annotation.StrokeThickness = 2;
        annotation.LabelPlacement = LabelPlacement.Axis;
        annotation.ShowLabel = a.ShowLabel;
        if (a.DashArray != null)
        {
            annotation.StrokeDashArray = new DoubleCollection(a.DashArray);
        }


        return annotation;
    }

I tried to set AnnotationCanvas.BelowChart but the behaviour is very strange: the horizontal annotation line is no more continuous
I attached two jpegs

Regards
Gianpaolo

0 votes
8k views

Using MVVM, I have an AnnotationCollection databound to the SciChartSurface.Annotations. Individual LineAnnotations are added to the collection as the application code runs.

If annotations are added while the chart is displayed, they are all drawn correctly.

However, if the chart page is reloaded (say, the user navigates to a different page and then returns to the chart page), the annotations do not always redraw. If the annotations have AnnotationCanvas set to default (AnnotationCanvas.AboveChart, I believe) they redraw correctly about 50% of the time. If the annotations’ AnnotationCanvas is set to AnnotationCanvas.XAxis, they never redraw.

All the annotations still exist in the ObservableCollection in all these cases, so they shouldn’t need to be re-created.

Is this a bug in SciChart or is there something I may be doing wrong with the annotations?
(There is only one X-Axis so no axisID is necessary.)

LineAnnotation lAnno = new LineAnnotation();
lAnno.CoordinateMode = AnnotationCoordinateMode.RelativeY;
lAnno.Y1 = 0.0;
lAnno.X1 = DataPoints;
lAnno.Y2 = 1.0;
lAnno.X2 = DataPoints;
lAnno.YAxisId = "Counts";
lAnno.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 255));
lAnno.Stroke = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(96, 255, 0, 0));
lAnno.StrokeThickness = 2;
lAnno.AnnotationCanvas = AnnotationCanvas.XAxis;

Markers.Add(lAnno);
0 votes
0 answers
4k views

I create a real time chart and want to add line annotation which help to user to understand chart wave form.
However I can’t add fix position of annotation. I change annotation every time chart is update but the annotation is not fixed in one position. The x value is datetime axis and the visible range is 5 second. Data is added around 100 data per second.

0 votes
13k views

Hi all, how i can add annotation on the columns of a chart?

0 votes
2k views

Is there a way to draw an svg formatted annotation onto a chart for WPF?

I have found references/examples for it in javascript here . . .

https://www.scichart.com/documentation/js/current/Tutorial%2006%20-%20Adding%20Annotations.html

but not for any other platform.

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?

0 votes
9k views

Hi,

CompositeAnnotation works perfectly and easy to use, but I need it in MVVM. CompositeAnnotationViewModel looks the same, but it is not visible. This is my code:

AnnotationViewModels.Add(new CompositeAnnotationViewModel()
{
    Annotations = new ObservableCollection<IAnnotationViewModel>()
    {
        new VerticalLineAnnotationViewModel
        {
            VerticalAlignment = VerticalAlignment.Stretch,
            Stroke = Colors.Blue,
            StrokeThickness = 2,
            IsEditable = true,
            StrokeDashArray = new DoubleCollection() { 2, 2 },
            CoordinateMode = AnnotationCoordinateMode.Relative,
            X1 = 0
        },
        new VerticalLineAnnotationViewModel
        {
            VerticalAlignment = VerticalAlignment.Stretch,
            Stroke = Colors.Blue,
            StrokeThickness = 2,
            IsEditable = true,
            StrokeDashArray = new DoubleCollection() { 2, 2 },
            CoordinateMode = AnnotationCoordinateMode.Relative,
            X1 = 1
        }
    },
    IsEditable = true,
    X1 = 3,
    X2 = 5
});

What is my mistake?

0 votes
10k views

I am working on an MVVM application that has a dozen or so view models, each having multiple XY data series that are being displayed in a chart. Now I need to add annotations to the charts for some of the view models. I have some code up and running but am running into a few issues and I wanted to see if you have any suggestions for a way forward.

The first issue relates to performance. Each data series (~100K data points) can have several thousand annotations associated with it. In the app, the view models are all created in memory and the user can change between them by selecting one in a list box (see attached image). Once the number of annotations starts to get into the thousands, I start to notice a delay when switching between data models where one of them contains annotations. If I click a different item in the list box, it takes a few seconds before the selection actually changes and the chart is updated. The delay seems to be more pronounced when switching FROM a view model that has annotations TO one that does not contain them. The delay increases with the number of annotations. I’m not sure if there is anything that can be done about this but thought I would check.

The second issue relates to how the view models are created. Because I am loading data for ALL of the view models into memory, I am trying to create them asynchronously in a background thread as much as possible so the UI remains responsive. That was fine when I was just dealing with the XY data, but it is causing problems for the annotations. If I try to create the CustomAnnotation objects in a background thread I get an error “The calling thread must be STA, because many UI components require this.” Do you have any suggestions for how to create lots of annotations while keeping the UI responsive?

Thanks,
Scott

  • sdamge asked 8 years ago
  • last active 8 years ago
0 votes
7k views

Hello Everyone,

I have set up a few annotations in my project and set their visibility to hidden.
I am displaying only the selected one from a combobox I have set up for the user.
But each time the chart does ZoomExtents. all the annotations appear and their visibility resets to visible.
Is this intentional?
Can I disable this option?

Thank you in advance.

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.

0 votes
9k views

Hi,

I’m looking for an annotation that have text and a line or rectangle (like in commix speech balloon) that are anchored to a point on the chart.
Is there such a build in annotation or do I have to build it myself?

0 votes
10k views

Hello SciChart-Team,
we had the requirement to show the zero line when there are negative values ​​in the chart.
We noticed the following things, especially in connection with the main grid lines.
There are some side effects at certain sizes of the window:
When the gridlines are on(see screenshot 1):
1. Grid line and tick are not on the same level (Only for certain sizes)
2. The grid line and horizontal annotation line (green) are not aligned either (Only at certain sizes)
3. The axis line (defined via BorderThickness) is also not aligned with the grid line (regardless of the size of the control).And the bottom tick is never aligned with the major grid line

If the major grid lines are switched off, the zero annotation line is not aligned to the ticks for certain sizes of the control (see screenshot 2)

It looks like different algorithms were used to calculate the line position of the ticks, grid lines and line annotations.

The problem was detected on the monitor with 100% scaling. On a 4K monitor with scaling > 100%, the problem became even more apparent

Do you have any suggestion how to solve the problem?

I’ve attached a modified example project in which the behavior can be reproduced.

Regards
Silvester Schneidt

0 votes
12k views

Is it possible to scale annotations? I’ve included a couple screenshots. The first is our old, ugly legacy chart. The next few are SciChart. One challenge we have is to place labels on a chart at different locations relative to specific locations on the series. They need to be annotations that the user DOES NOT have permission to edit before he saves the chart to a PNG.

The purple and red lines on my chart look exceptional and “scale” correctly because their XY values scale as the chart is resized matching the series as it scales.

The red, purple and orange annotations however do not. I understand why it’s happening as I’m placing the annotations at exact locations via XY. So as I magnify or resize the window the XY doesn’t change; however, the original location of my annotation “appears to the user” to move. I understand that it’s not really moving as it is still located at the same exact XY where it was placed.

Is there a simpler way to scale it to a relative position during a window resize? Or am I stuck having to redraw the annotations as this happens?

0 votes
12k views

I am working on an application where I have multiple XY data series. For one of the series, we are producing annotation data for some of the points. There are 8 different types of annotations that can be created. Based on the response you gave to a previous question, I am creating the annotations as separate data series instead of as actual annotation objects since there are thousands of them. Performance starts to suffer as the number of annotations increases.

The issue I’m running into now is the number of series is now 14 which is unwieldy for displaying in a legend. My current legend is horizontally oriented as shown in the attached image. I would prefer that the user not have to scroll to view all of the legend items and am trying to figure out how to achieve that.

Is there a way to specify a fixed width for the legend and have items wrap to a new line if there is not enough room for them? I didn’t see that as being an option for the standard legend template.

Also, is there a way to use multiple legends for a chart? Ideally it would be nice to split the series that are associated with annotation data into their own legend instead of mixing them in with the legend for the normal data. The SeriesInfo object doesn’t appear to have any property that would allow me to categorize the data.

Thanks,
Scott

  • sdamge asked 8 years ago
  • last active 8 years ago
0 votes
0 answers
7k views

I have created a composite annotation that consists of four elements: two VerticalLineAnnotations, a BoxAnnotation, and a TextAnnotation. When I first add the annotation, everything appears correctly. However, when I change between tabs in my TabControl… the BoxAnnotation disappears. The box will reappear when I move the composite annotation a few pixels.

Note: Calling ZoomExtents() or InvalidateElement() does not fix the issue.

I’ve created a simple app to reproduce the issue.

PeakAnnotation.xaml

<s:CompositeAnnotation x:Class="WpfPresentation.Views.PeakAnnotation"
                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"
                Canvas.ZIndex="1" 
                DragDirections="XDirection"
                ResizeDirections="XDirection"
                IsEditable="True">

<s:CompositeAnnotation.Annotations>
    <s:VerticalLineAnnotation CoordinateMode="Relative" Stroke="#FFBADAFF" StrokeThickness="2" X1="0" X2="0" Y1="0" Y2="1"/>
    <s:VerticalLineAnnotation CoordinateMode="Relative" Stroke="#FFBADAFF" StrokeThickness="2" X1="1" X2="1" Y1="0" Y2="1"/>
    <s:BoxAnnotation x:Name="box" Opacity="0.2" CornerRadius="2" Background="#FFBADAFF" BorderBrush="#1964FF" CoordinateMode="Relative" X1="0" X2="1" Y1="0" Y2="1"/>
    <s:TextAnnotation x:Name="AnnotationTextLabel" CoordinateMode="Relative" X1="0" Y1="0.95" FontSize="12" Foreground="White"/>
</s:CompositeAnnotation.Annotations>

PeakAnnotation.xaml.cs

public partial class PeakAnnotation : CompositeAnnotation
{
    public PeakAnnotation()
    {

    }

    public PeakAnnotation(string annotationText)
    {
        InitializeComponent();
        AnnotationTextLabel.Text = annotationText;
    }

    public string StyleKey { get; set; }

    public Type ViewType => throw new NotImplementedException();
}

MainViewModel.cs

public MainViewModel()
    {
        ChartTitle = "Testing";

        Annotations = new AnnotationCollection();

        var myAnnotation = new PeakAnnotation("My Annotation Title")
        {
            X1 = 40,
            X2 = 50,
            Y1 = 0,
            Y2 = 100
        };

        Annotations.Add(myAnnotation);
    }
    public string ChartTitle { get; set; }
    public AnnotationCollection Annotations { get; set; }
}

MainWindow.xaml

<Window x:Class="SciChartTesting.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:SciChartTesting" xmlns:s="http://schemas.abtsoftware.co.uk/scichart"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">

<Window.Resources>
    <local:MainViewModel x:Key="MainViewModel"/>
</Window.Resources>

<Grid DataContext="{StaticResource MainViewModel}">
    <TabControl>
        <TabItem Header="TabOne">
            <Label Content="This is TabOne"/>
        </TabItem>
        <TabItem Header="TabTwo">
            <s:SciChartSurface ChartTitle="{Binding ChartTitle}" Annotations="{Binding Annotations}">
                <s:SciChartSurface.XAxis>
                    <s:NumericAxis VisibleRange="0,100"/>
                </s:SciChartSurface.XAxis>
                <s:SciChartSurface.YAxis>
                    <s:NumericAxis VisibleRange="0,100"/>
                </s:SciChartSurface.YAxis>
            </s:SciChartSurface>
        </TabItem>
    </TabControl>
</Grid>

0 votes
7k views

Hi;

If I remember good, in a old version of SciChart it was possible to draw custom annotation in chart with a “pen”, like in Paint.

In the current version is it possible? And if yes, how do it please?

Regards;
Damien

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
0 votes
6k views

When showing a new view, there are some annotations (from an AnnotationCollection) on the panel, but the RenderableSeries is empty. Is it possible to use the scrollbar to zoom in details of annotations?

  • yi zheng asked 5 years ago
  • last active 5 years ago
0 votes
10k views

Hi,

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

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

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

Thanks for your help
Jean-Charles

0 votes
7k views

I am trying to build an application with multiple charts on one screen (3) and each chart annotated with 20-25 annotations.
In total I have 6 FastLineRenderableSeries at once – 2 per chart.
I found serious performance issues after adding more than 10 annotations.

When a user presses a key I go to another set of data. Annotations are created on each data change. I create temporary collection and assign it to the surface annotations collection at once. I also suspend updates through Viewport Manager.

Creation of annotations does not seem to affect the performance, but the rendering of them does.

Most of them are derivatives of AxisMarkerAnnotation and apply a different label template. I tested adding standard Text Annotations instead, just to see whether the custom template had to do something with the performance drop, but it was more or less the same case.
The custom templates are also really simple, it is either a text block or a filled shape, always one component.

Do you have any advises for using a bigger number of annotations?
How to make their rendering faster?

When I remove all annotations the “scrolling” of data goes really smooth.

I am running out of ideas of how to improve.

Best regards,
Paulina

PS Is there any way to try out the other renders before buying a license?

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
5k views

Hi,

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

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


        image.Source = icon;

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

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

Thank you!

  • Ilan Rozen asked 4 years ago
  • last active 1 year ago
Showing 1 - 50 of 74 results