Интервал изменения OxyPlot на уровне масштабирования - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь заставить свой график изменить его тип интервала в зависимости от уровня масштабирования, но я не уверен, как этого добиться.Я использую DateTimeAxis и хотел бы начать с Дней.Тогда уменьшение масштаба будет меняться от дней к месяцам, в конце концов к годам.Увеличение может измениться от Дней до часов, возможно, секунд, если этот тип поведения даже возможен.

В настоящее время у меня есть настройки осей следующим образом:

public DateTimeAxis HorizontalAxis
    {
        get
        {
            return new DateTimeAxis
            {
                Position = AxisPosition.Bottom,
                Minimum = DateTimeAxis.ToDouble(Start),
                Maximum = DateTimeAxis.ToDouble(End),
                MajorStep = double.NaN,
                MinimumMajorStep = 0,
                MinorStep = double.NaN,
                MinimumMinorStep = 0,
                AbsoluteMinimum = DateTimeAxis.ToDouble(Start),
                AbsoluteMaximum = DateTimeAxis.ToDouble(End),
                MinorIntervalType = DateTimeIntervalType.Hours,
                IntervalType = DateTimeIntervalType.Days,
                Title = " Date Time Axis Title "
            };
        }
    }

public LinearAxis VerticalAxis
    {
        get
        {
            return new LinearAxis
            {
                Position = AxisPosition.Left,
                Minimum = SetPoint - 4,
                Maximum = SetPoint + 4,
                MajorStep = double.NaN,
                MinimumMajorStep = 0,
                MinorStep = 0.5,
                MinimumMinorStep = 0,
                AbsoluteMinimum = SetPoint - 4,
                AbsoluteMaximum = SetPoint + 4,
                MinorTickSize = 0,
                Title = " Linear Axis Title "
            };
        }
    }

Если этот тип поведенияне возможно, я бы также спросил, есть ли способ получить часы, чтобы показать при увеличении от дней.При создании графика по умолчанию это было поведение, которое я видел.

Спасибо!

1 Ответ

0 голосов
/ 24 мая 2018

Я знаю, что только что опубликовал этот вопрос, но, возможно, есть другие люди, которые заинтересованы в получении такого типа поведения.

Для динамического изменения оси я использовал описанное событие AxisChanged Здесь

Оттуда я создал выходное сообщение, чтобы увидеть, какие свойства менялись в осях.Я обнаружил, что Scale, Minor Step Size и Major Step Size - это то, что изменяется при масштабировании.Реализуя простое выражение if для проверки масштаба, я смог получить желаемое поведение.

    private async void Horizontal_AxisChanged(object sender, AxisChangedEventArgs e)
    {
        DateTimeAxis horizontal = sender as DateTimeAxis;

        if(horizontal.Scale > 100)
        {
            horizontal.IntervalType = DateTimeIntervalType.Hours;
        }

        else if(horizontal.Scale < 100)
        {
            horizontal.IntervalType = DateTimeIntervalType.Days;
        }
    }
...