Oxyplot 从 'X Axis Value' 中查找 'Y Axis Value' C#
Oxyplot Find 'Y Axis Value' From 'X Axis Value' C#
我使用 Oxyplot 绘制我的绘图,我对绘制绘图没有任何问题。
我的 Y 轴是 'LinearAxis',X 轴是 'TimeSpanAxis'。
我想做的是从给定的 X 值中获取 Y 值。
例如我想从 TimeSpan(0,0,0,1).
中获取 Y 值
我无法使用鼠标位置或任何其他事件。 X 值将由用户作为时间跨度给出。
这应该很容易,但我找不到任何东西。
我不太确定这是最有效的方法,但这里有一个关于如何从 X 中找到 Y 值的建议。请注意,这不是 100% 测试过的代码,但你会得到要点的想法。
思路是根据搜索点前后的"defined point"来计算Slope。然后,您可以使用斜率找到问题点的缺失坐标。
Slope = (y2-y2)/(x2-x1)
假设您有一个轴作为 LinearAxis,另一个轴作为 TimeSpanAxis,并且您将获得需要找到 Y 的 TimeSpanAxis。
var timeSpanToSearch = new TimeSpan(8, 30, 0);
var timeSpanToSearchAsDouble = TimeSpanAxis.ToDouble(timeSpanToSearch);
var series = MyModel.Series.First() as LineSeries;
double result = 0;
// If the point is a defined point, you can find Y easily
if (series.Points.Any(x => x.X.Equals(timeSpanToSearchAsDouble)))
{
result = series.Points.First(x => x.X.Equals(timeSpanToSearchAsDouble)).Y;
}
else
{
var floorValue = series.Points.Where(x => x.X < timeSpanToSearchAsDouble).Last();
var ceilingValue = series.Points.Where(x => x.X > timeSpanToSearchAsDouble).First();
var slope = (ceilingValue.Y - floorValue.Y) / (ceilingValue.X - floorValue.X);
result = slope * (timeSpanToSearchAsDouble - floorValue.X) + floorValue.Y;
}
我使用 Oxyplot 绘制我的绘图,我对绘制绘图没有任何问题。 我的 Y 轴是 'LinearAxis',X 轴是 'TimeSpanAxis'。
我想做的是从给定的 X 值中获取 Y 值。
例如我想从 TimeSpan(0,0,0,1).
我无法使用鼠标位置或任何其他事件。 X 值将由用户作为时间跨度给出。
这应该很容易,但我找不到任何东西。
我不太确定这是最有效的方法,但这里有一个关于如何从 X 中找到 Y 值的建议。请注意,这不是 100% 测试过的代码,但你会得到要点的想法。
思路是根据搜索点前后的"defined point"来计算Slope。然后,您可以使用斜率找到问题点的缺失坐标。
Slope = (y2-y2)/(x2-x1)
假设您有一个轴作为 LinearAxis,另一个轴作为 TimeSpanAxis,并且您将获得需要找到 Y 的 TimeSpanAxis。
var timeSpanToSearch = new TimeSpan(8, 30, 0);
var timeSpanToSearchAsDouble = TimeSpanAxis.ToDouble(timeSpanToSearch);
var series = MyModel.Series.First() as LineSeries;
double result = 0;
// If the point is a defined point, you can find Y easily
if (series.Points.Any(x => x.X.Equals(timeSpanToSearchAsDouble)))
{
result = series.Points.First(x => x.X.Equals(timeSpanToSearchAsDouble)).Y;
}
else
{
var floorValue = series.Points.Where(x => x.X < timeSpanToSearchAsDouble).Last();
var ceilingValue = series.Points.Where(x => x.X > timeSpanToSearchAsDouble).First();
var slope = (ceilingValue.Y - floorValue.Y) / (ceilingValue.X - floorValue.X);
result = slope * (timeSpanToSearchAsDouble - floorValue.X) + floorValue.Y;
}