ScottPlot数据格式

ScottPlot固执己见,更喜欢将数据保存在文档中double[]总体安排我们经常收到与绘制源自其他格式的数据相关的建议和问题。这个话题经常出现在GitHub的问题、讨论甚至pull请求中(请参阅本页底部的链接)。

本页总结了ScottPlot支持的格式,说明了选择这些格式的原因,并为希望绘制来自其他格式的数据的用户提供了建议。

为什么ScottPlot更喜欢双人

ScottPlot的主要目标是简单性、性能和可维护性,我们发现,要求用户提供数据double[]为大多数用户实现这些优先级之间的最佳平衡。

绘图通常涉及将数据坐标转换为像素位置的搜索算法。这些算法是使用double为了进行比较和支持更多类型,需要复制这些算法以支持double[],float[],long[],int[]byte[],以及每种类型的重复打印类型和打印方法重载。

可以使用泛型,搜索算法可以进行比较T,但泛型不支持操作(+,-,<所以需要进行比较T.ConvertTo(double)这大大降低了这些关键搜索方法的性能。

如何绘制其他数据类型

可以使用LINQ将可迭代数据类型快速转换为双数组:

int[] originalData = { 5, 2, 7, 4, 9, 5 };
double[] myData = originalData.Select(x=>(double)x).ToArray();

如何绘制列表和列表<T>类型

可以使用LINQ将任何数字列表类型转换为双数组:

List<int> originalData = new List<int>() {5, 2, 7, 4, 9, 5};
double[] myData = originalData.Select(x=>(double)x).ToArray();

如果你的清单是List<double>你可以做得更简单:

List<double> originalData = new List<double>() {5, 2, 7, 4, 9, 5};
double[] myData = originalData.ToArray();

信号常数<T>

这个SignalConst打印类型会预处理数据,因此渲染性能不会因比较泛型类型而受到负面影响。AddSignalConst()接受任何数组类型,因此只要其元素可以转换为double,就可以使用此打印类型来显示其他类型的数据double[].

int[] data = { 2, 6, 3, 8, 5, 6, 1, 9, 7 };
plt.AddSignalConst(data);

散点图列表

试验地块类型包括:ScatterPlotList哪个用途List<T>而不是double[]在引擎盖下面。这些情节类型Add(),RemoveAt()Clear()方法,使其适用于数据类型不是double和/或数据点的数量预计会发生变化。

基于列表的绘图类型是实验性的,在当时的使用手册中没有记录。它们可以在ScottPlot.Plottable名称空间。要使用它们,可以使用new,将它们添加到带有plt.Add(),然后与他们的方法交互以添加和操作数据。

// instantiate an experimental plot type and add it to the plot
var plt = new ScottPlot.Plot();
var experimental = new ScottPlot.Plottable.ScatterPlotList();
plt.Add(experimental);

// interact with the plot type using public methods
experimental.Add(x, y);

资源

GitHub上的相关对话