首页 > 解决方案 > 缩放级别上的 OxyPlot 更改间隔

问题描述

我试图让我的情节根据缩放级别改变它的间隔类型,但我不确定如何实现这一点。我正在使用 aDateTimeAxis并希望它从 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 "
            };
        }
    }

如果这种行为是不可能的,我还会问是否有办法在从几天放大时显示几个小时。在制作默认绘图时,这是我看到的行为。

谢谢!

标签: c#oxyplot

解决方案


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

为了动态更改轴,我使用了此处描述的 AxisChanged 事件

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

推荐阅读