[英]How do I get Y values from all series at a particular X value (OxyPlot)
我正在使用 OxyPlot。 我有一個帶有 PlotModel 的 PlotView。 有 2 個軸:yAxis 是 LinearAxis,xAxis 是 DateTimeAxis。 我有多個 LineSeries。 這是一個示例程序:
public MainWindow()
{
InitializeComponent();
PlotModel plotModel = new PlotModel();
plotView.Model = plotModel;
plotModel.Axes.Clear();
var yAxis = new LinearAxis();
var xAxis = new DateTimeAxis();
yAxis.IsZoomEnabled = false;
yAxis.AbsoluteMinimum = -50;
yAxis.AbsoluteMaximum = 450;
yAxis.MajorGridlineStyle = LineStyle.Solid;
xAxis.MajorGridlineStyle = LineStyle.Solid;
xAxis.AbsoluteMinimum = DateTimeAxis.ToDouble(DateTime.Today);
xAxis.AbsoluteMaximum = DateTimeAxis.ToDouble(DateTime.Today.AddDays(1));
yAxis.IsPanEnabled = false;
yAxis.IsZoomEnabled = false;
plotModel.Axes.Add(yAxis);
plotModel.Axes.Add(xAxis);
var series1 = new LineSeries();
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today), 0));
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(4)), 100));
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(8)), 150));
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(12)), 50));
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(16)), 200));
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(20)), 150));
series1.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(24)), 300));
plotModel.Series.Add(series1);
var series2 = new LineSeries();
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today), 0));
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(4)), 200));
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(8)), 200));
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(12)), 150));
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(16)), 300));
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(20)), 50));
series2.Points.Add(new DataPoint(DateTimeAxis.ToDouble(DateTime.Today.AddHours(24)), 100));
plotModel.Series.Add(series2);
}
當我按住左鍵單擊時,我只能從我當前懸停的 LineSeries 中看到 Y 值。 我想獲取與鼠標指針當前所在的 X 值相對應的所有 Y 值。 我不需要自定義跟蹤器,我想在 plot 旁邊的 label 中顯示值。 還值得注意的是,這只是一個示例程序; 在我的主程序中,LineSeries 每個包含大約 50k 個點,這就是為什么我不能遍歷所有點來找到我想要的值。 這樣做最有效的方法是什么?
您可以對每個系列使用GetNearestPoint
來獲取給定 X 的 Y 值。例如,
PlotModel.TrackerChanged += (sender, eventArgs) =>
{
if (eventArgs.HitResult != null)
{
var currentPoint = eventArgs.HitResult.Position;
var allYValuesForX = PlotModel.Series.Select(x => x.GetNearestPoint(currentPoint, true).DataPoint.Y);
CurrentTrackerValue = $"X = {currentPoint.X}, Y ={string.Join(",", allYValuesForX)}";
}
UpdateLabel(CurrentTrackerValue);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.