Масштабирование SciChart в реальном времени с минимальным диапазоном осей

У меня есть диаграмма FIFO в реальном времени (в значительной степени взятая из их опубликованного примера) графика SciChart. При рендеринге он начинается с очень близкого увеличения, а по мере рисования линии масштаб уменьшается, чтобы соответствовать полному размеру линии.

        <s:SciChartSurface.XAxis>
            <s:NumericAxis x:Name="axisX" MinHeight="50" AutoRange="Always" AxisTitle="{Binding Path=XAxisTitle}" DrawMinorGridLines="False" DrawMinorTicks="False" TextFormatting="0.##">
                <s:NumericAxis.GrowBy>
                    <s:DoubleRange Max="0.1" Min="0.1" />
                </s:NumericAxis.GrowBy>
            </s:NumericAxis>
        </s:SciChartSurface.XAxis>

Однако я хотел бы, чтобы он уже начал уменьшаться на определенную величину - например. ось X уже будет отображаться (например) от 0 до 10, и по мере того, как линия рисуется, она перемещается по экрану, масштабируясь только в том случае, если линия становится больше, чем предоставленное пространство.

Я пытался установить VisibleRangeLimit, но хотя это позволяет мне определить диапазон области диаграммы, масштабирование не срабатывает, когда кривая становится слишком большой (поэтому она буквально выходит за пределы диаграммы)

Как это можно сделать?


person colmde    schedule 07.04.2016    source источник


Ответы (1)


Причина этого в том, что Пример Fifo в sciChart WPF использует XAxis AutoRange установлен на Всегда масштабировать ось в соответствии с данными. В начале примера, даже если буфер Fifo имеет емкость 10 000 точек, в нем нет данных, поэтому ось масштабируется для размещения данных.

Есть два способа обойти это:

  1. Предварительно заполнить ваш FIFO DataSeries X=xValue, Y=double.NaN. Учитывая достаточное количество значений, диаграмма будет думать, что должна нарисовать все эти точки, поэтому ось X будет масштабироваться соответствующим образом.

  2. Это взять под контроль XAxis.VisibleRange самостоятельно (не использовать AutoRange). В этом случае вам нужно задать для XAxis.VisibleRange размер окна, чтобы разместить N точек, и по мере обновления данных обновлять окно.

FAQ 'Как создать StripChart в SciChart' демонстрирует метод (2), как обновить видимый диапазон XAxis, чтобы добиться поведения прокрутки.

Раскрытие информации, я являюсь техническим руководителем группы SciChart WPF

person Dr. Andrew Burnett-Thompson    schedule 08.04.2016
comment
Спасибо за информацию. Что я сделал, так это привязал AutoRange к полю, которое меняется с Never на Always, когда количество точек становится достаточно большим, чтобы я хотел начать масштабирование. У меня это работает, но вы говорите не использовать AutoRange. Почему это? - person colmde; 08.04.2016
comment
Вы можете проигнорировать мое предложение «не использовать автодиапазон», если сделаете вышеперечисленное. ваше решение более простое и элегантное. Установив для Axis.VisibleRange фиксированное значение, используйте AutoRange.Never, затем измените на AutoRange, как только будет достигнуто количество точек, вы получите именно тот эффект, который хотите! Просто имейте в виду, что если вы устанавливаете AutoRange с помощью MVVM, используйте привязку TwoWay! :) - person Dr. Andrew Burnett-Thompson; 09.04.2016