检索当前显示的数据间隔

Retrieve interval of data currently shown

我正在使用 OxyPlot 来显示数据图表并允许用户select他想要计算的数据区间。

看起来像这样:

现在,我希望用户能够通过调整图表大小自行设置用于计算的数据间隔。例如,如果他在此特定时间间隔内调整图表的大小,它只会采用屏幕上最左边和最右边之间的点。

我已经找到每当调整图表大小时触发的事件:

 plotModel.Updated += (s, e) =>
        {
            //reset interval used for calculation
        };

我在 OxyPlot 文档中找不到的是检索当前显示的一组特定点的方法。不需要特别点,我也可以只用每个极值的x分量。

您可以在使用 Transform() 方法转换您的点后使用 Series.GetScreenRectangle().Contains() 方法来检测该点当前是否在显示中。

例如,

model.Updated += (s,e)=> 
{
    if(s is PlotModel plotModel)
    {
        var series = plotModel.Series.OfType<OxyPlot.Series.LineSeries>().Single();
        var pointCurrentlyInDisplay = new List<DataPoint>();
        foreach (var point in series.ItemsSource.OfType<DataPoint>())
        {
            if (series.GetScreenRectangle().Contains(series.Transform(point)))
            {
                pointCurrentlyInDisplay.Add(point);
            }
        }
    }
};

您正在迭代点集合并验证转换点(转换方法将数据点转换为屏幕点)是否落在系列使用的屏幕矩形内。

更新

如果您使用 Series.Points.AddRange()/Add() 而不是 Series.ItemSource 添加点,请使用以下方法检索点。

foreach (var point in series.Points.OfType<DataPoint>())
{
            if (series.GetScreenRectangle().Contains(series.Transform(point)))
            {
                pointCurrentlyInDisplay.Add(point);
            }
}