OxyPlot在缩放级别更改间隔

时间:2018-05-24 18:09:04

标签: c# oxyplot

我正在尝试让我的情节改变它的间隔类型,具体取决于缩放级别,但我不知道如何实现这一点。我正在使用DateTimeAxis并希望它能在Days开始。然后缩小将从几天变为几个月,最后变为几年。放大将从几天变为几小时,如果这种行为甚至可能是几秒钟。

目前我的轴设置如下:

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 :(得分:0)

我知道我刚刚发布了这个问题,但也许还有其他人对这种行为感兴趣。

要动态更改轴我使用了描述Here

的AxisChanged事件

从那里我创建了一个输出消息,以查看轴中的属性发生了变化。我发现ScaleMinor Step SizeMajor 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;
        }
    }