图形绘制:仅保留最相关的数据

Syn*_*r0r 8 algorithm graph

为了节省带宽以便不自己生成图片/图表,我计划使用Google的图表API:

http://code.google.com/apis/chart/

它只需发出(可能很长的)GET(或POST),然后Google自己生成并提供图表.

截至目前,我已经有大约两千个条目的图表,我想将其减少到一些任意数量的条目(例如,仅保留原始条目的50%,或原始条目的10%).

如何确定应保留哪些条目以使我的新图形与原始图形最接近?

这是某种曲线拟合问题吗?

请注意,我知道我可以使用高达16K的数据对Google的图表API进行POST,这可能足以满足我的需求,但我仍然很好奇

Mas*_*rat 6

Flot JavaScript图形库的flot-downsample插件可以满足您的需求.

目的是尝试使用相当少的数据点保留原始线的视觉特征.

该算法背后的研究记录在作者的论文中.

请注意,根据我的经验,它不适用于任何类型的系列,并且当您希望下采样因子超过10时,不会给出有意义的结果.

问题是它在相同大小的窗口中切割系列,然后每个窗口保持一个点.由于某些窗口中的数据可能比其他窗口更密集,因此结果不一定是最佳的.但它很有效(以线性时间运行).

  • [README](https://github.com/sveinn-steinarsson/flot-downsample/#the-algorithm-lttb-adapted-for-other-programming-语言或框架)。 (2认同)

Pau*_*l R 4

您想要做的事情称为下采样抽取。本质上,您过滤数据,然后从每 N 个样本中删除 N - 1 个(按 N 因子进行抽取或下采样)。粗过滤器只是采用局部移动平均线。例如,如果您想按 N = 10 进行抽取,则将每 10 个点替换为这 10 个点的平均值。

请注意,使用上述方案,您可能会丢失图中的一些高频数据(因为您实际上对数据进行了低通滤波) - 如果看到短期变化很重要,那么另一种方法是将每 N 个点绘制为单个垂直点条形代表这 N 个点的范围(即最小..最大)。