c# - 缩放级别上的 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 "
};
}
}
如果这种行为是不可能的,我还会问是否有办法在从几天放大时显示几个小时。在制作默认绘图时,这是我看到的行为。
谢谢!
解决方案
我知道我刚刚发布了这个问题,但也许还有其他人有兴趣获得这种行为。
为了动态更改轴,我使用了此处描述的 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;
}
}
推荐阅读
- ubuntu - 无法在 Ubuntu 20.04 WSL2 上安装 Visual Studio?
- ruby-on-rails - 查找两个活动记录项数组之间的共同项
- javascript - 为什么不能使用条件运算符来有条件地增加这样的属性?
- html - 在 div 的中心显示文本
- angular - 嵌套元素时如何使动画并行播放
- apache - Apache 可以将自动登录的授权数据缓存到隧道应用程序中吗?
- javascript - Javascript事件侦听器无法打开模式
- sql - 了解 postgresql 中的显式类型转换
- autodesk-forge - 从 Revit 文件进行 IFC 导出时,Forge WorkItem 有时会失败
- python - Appending a row with widgets and text to a QStandardItemModel