LightningChart数据可视化图形控件使用篇28-LineSeriesCursors

687 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

LineSeriesCursors

演示示例: Point line; Multi-channel cursor tracking; Segments with splitters; Logarithmic axes

线条系列游标可通过追踪X坐标值来对线条系列数据进行可视化分析。系列值只能用实现ITrackable接口(SampleDataSeries、SampleDataBlockSeries、 PointLineSeries、AreaSeries、HighLowSeries)的系列来求解。对于其他系列类型而言,光标不会自动追踪Y轴坐标。

将 LineSeriesCursor 对象添加到 LineSeriesCursors 集中。开启 SnapToPoints 可将光标从一点跳到另一点。用Style属性可设置光标追踪类型。当设置Style 为PointTracking后,可以使用任何追踪点的类型,甚至是位图图像。若使用 HairCrossTracking 类型,在线系列点的Y值处会绘制一条水平线。如果同一系列的多个点同时碰到光标位置,则线条绘制在最小点和最大值点的中间。

微信截图_20220509104410.png 图:线条系列游标:垂直点追踪光标(青色的线和十字),十字叉线追踪光标(红线)以及不带追踪的垂直全长光标(黄线)

开启 IndicateTrackingYRange 后,会绘制一条水平柱状,从碰到光标中间的点的最小值延伸到最大值。

微信截图_20220509104807.png 图:用Y轴区域指示的十字叉线光标(IndicateTrackingYRange = true).

解析LineSeriesCursor位置处的数据值

演示示例: Multi-channel cursor tracking

通过X屏幕坐标或Y轴值可求解实现ITrackable接口的系列。The series implementing ITrackable interface can be solved by X screen coordinate or by X axis value.

可跟踪的系列有精确和粗略两种数值求解方法。如果需要,精确的方法SolveYValueAtXValue循环遍历数据点并找到最近的数据点匹配。粗略法SolveYCoordAtXCoord使用缓存的系列渲染数据来求解匹配的Y屏幕坐标。

精确方法,用数据点数组根据X值求解Y值

LineSeriesValueSolveResult result =
        series.SolveYValueAtXValue(cursor.ValueAtXAxis);
if (result.SolveStatus == LineSeriesSolveStatus.OK)
{
        //PointLineSeries在同一个X值可能有两个或多个点,如果这样,将其置于最小与最大中心
      yValue =(result.YMax + result.YMin)/ 2.0;
      return true;
}

注意! 当禁用 cursor.SnapToPoints 后, SolveYValueAtXValue返回与其相邻的点之间的内插值 (光标线和系列线的交叉点)

微信截图_20220509105023.png 图:禁用SnapToPoints后,SolveYValueAtXValue 内插入相邻数据点之间的值

粗略方法,用数据点数组根据X坐标求解Y屏幕坐标

LineSeriesCoordinateSolveResult result = series.SolveYCoordAtXCoord((int)Math.Round(fCoordX));
if (result.SolveStatus == LineSeriesSolveStatus.OK)
{
        fCoordY = (result.CoordBottom + result.CoordTop)/ 2f;
        if (axisY.CoordToValue((int)Math.Round(fCoordY), out yValue)== false)
    {
                        return false;
        }
}

当系列包含很多数据点时,假设 > 100.000, 那么用粗略方法通常要快得多。如果图表的大小或Y段的像素高度很低,这种粗略方法可能非常不准确。.

通过调用X和Y轴的CoordToValue方法,粗略方法的屏幕坐标可转换为轴值。

使用一个AnnotationXY对象显示在光标旁边的值是一个不错的方法,可参阅# [LightningChart数据可视化图形控件使用篇21-Bands(带)、Constant lines(恒量线)、Annotations 注释](LightningChart数据可视化图形控件使用篇21-Bands(带)、Constant lines(恒量线)、Annotations 注释 - 掘金 (juejin.cn))章节。

微信截图_20220509105455.png 图:LineSeriesCursor用于追踪PointLineSeries;值显示在一个AnnotationXY 对象中。

从 FreeformPointLineSeries中求解数据值

FreeFormPointLineSeries实现精确和粗略的数值求解方法,非常类似于用以求解在LineSeriesCursor(用于实现ITrackable接口的系列)位置的数据值的方法。

注意! FreeformPointLineSeries 无法执行ITrackable 界面,因此无法用LineSeriesCursor追踪。

对于给定的X轴值,可用精确方法 SolveYValuesAtXValue 求解所有的Y值,并返回一个LineSeriesValueSolveResult结构的可迭代列表。

CN-LightningChart User's manual 10.jpg 对于给定的X屏幕坐标,可用粗略方法SolveYCoordsAtXCoord 求解所有Y屏幕坐标,并返回一个LineSeriesCoordinateSolveResult-结构的可迭代列表。

微信截图_20220509105658.png 如果给定的X轴值或X屏幕坐标在点之间碰上,结果将由插值值/坐标构成。

关于LightningChart数据可视化图形控件使用篇28-LineSeriesCursors 章节就分享到这里了。

如果在实际应用中遇到技术问题或需要帮助,可以添加下方微信号联系官方技术支持。

微信号:lightningchart_china

如果您想进一步使用LightningChart数据可视化图形控件,请添加后回复“学习”可免费领取一套全功能版LightningChart数据可视化控件。

后续我会不断更新LightingChart更详细的使用方法,写文不易,还望多多回复关注支持!谢谢!

最新版V10 LightningChart下载地址:猛击下载