4

给所有可能相关的人:

我想创建一个 FastLineRenderableSeries 类型图表,我可以在其中添加均匀间隔的点标记,类似于将 StrokeDashArray 设置为特定的线型。

目前,据我所知,在 SciChart 中,您可以根据 DataSeries 设置 PointMarkers,以便在每个数据点出现的点上出现一个标记。然而,这不是我想要完成的。

缩放范围示例 - SciChart 虚线样式

放大示例 - SciChart 虚线样式

在提供的 2 个图像中,您可以看到由于使用 DashStrokeArray,虚线间距和长度保持一致,但是当我放大时标记会散开。我知道点标记与数据系列,但是有什么方法可以简单地制作均匀间隔的点标记,就像可以操纵线条的破折号一样?

除了仅使用颜色和破折号之外,这将使我能够更好地区分重度重叠图中的数据。

非常感谢任何建议。

4

1 回答 1

2

好问题,恐怕答案是否定的,SciChart 不提供开箱即用的等间距数据点标记的功能。正如您所指出的,它们与数据点相关联。

但是,SciChart 确实提供了创建自定义系列以绘制您想要的任何内容的能力。

在上面的示例/文章中,有代码示例向您展示如何在自定义系列中呈现 PointMarker。

下面是一个使用 RenderContext API 绘制 PointMarker 的 CustomRenderableSeries 的工作示例。这与我们的 Scatter 系列没有什么不同,但展示了该 API 工作原理的一些内部结构

public class CustomPointRenderableSeries : CustomRenderableSeries
{
    protected override void Draw(IRenderContext2D renderContext, IRenderPassData renderPassData)
    {
        base.Draw(renderContext, renderPassData);

        // Get the CustomPointRenderableSeries.PointMarker to draw at original points
        // Assumes you have declared one in XAML or code
        //
        // e.g. CustomPointRenderableSeries.PointMarker = new EllipsePointMarker();
        //
        var pointMarker = base.GetPointMarker();
        if (pointMarker != null)
        {
            // The resampled data for this render pass
            var dataPointSeries = renderPassData.PointSeries;

            var xCalc = renderPassData.XCoordinateCalculator;
            var yCalc = renderPassData.YCoordinateCalculator;

            // Begin a batched PointMarker draw operation
            pointMarker.BeginBatch(renderContext, pointMarker.Stroke, pointMarker.Fill);

            // Iterate over the data
            for (int i = 0; i < dataPointSeries.Count; i++)
            {
                // Convert data to coords
                double xCoord = xCalc.GetCoordinate(dataPointSeries.XValues[i]);
                double yCoord = yCalc.GetCoordinate(dataPointSeries.YValues[i]);
                int dataIndex = dataPointSeries.Indexes[i];

                // Draw at current location
                pointMarker.MoveTo(renderContext, xCoord, yCoord, dataIndex);
            }

            // End the batch
            // Note: To change point color, start a new batch
            pointMarker.EndBatch(renderContext);
        }
    }
}

因此,理论上,您可以修改此示例以将 X 坐标间隔为固定间隔,而不是在 dataPointSeries.XValues[i] 处。

请注意,此代码循环遍历 dataPointSeries.Count,它是视口中的 X、Y 值。如果您想在数据点之间放置额外的点标记,那么您将需要以某种方式插入 Y 值。

这对读者来说是一个练习,但是如何与 SciChart 的库交互以创建自定义系列是可能的。

在此处输入图像描述

于 2018-05-25T09:25:09.133 回答