为了节省带宽以便不自己生成图片/图表,我计划使用Google的图表API:
http://code.google.com/apis/chart/
它只需发出(可能很长的)GET(或POST),然后Google自己生成并提供图表.
截至目前,我已经有大约两千个条目的图表,我想将其减少到一些任意数量的条目(例如,仅保留原始条目的50%,或原始条目的10%).
如何确定应保留哪些条目以使我的新图形与原始图形最接近?
这是某种曲线拟合问题吗?
请注意,我知道我可以使用高达16K的数据对Google的图表API进行POST,这可能足以满足我的需求,但我仍然很好奇
Flot JavaScript图形库的flot-downsample插件可以满足您的需求.
目的是尝试使用相当少的数据点保留原始线的视觉特征.
该算法背后的研究记录在作者的论文中.
请注意,根据我的经验,它不适用于任何类型的系列,并且当您希望下采样因子超过10时,不会给出有意义的结果.
问题是它在相同大小的窗口中切割系列,然后每个窗口保持一个点.由于某些窗口中的数据可能比其他窗口更密集,因此结果不一定是最佳的.但它很有效(以线性时间运行).
您想要做的事情称为下采样或抽取。本质上,您过滤数据,然后从每 N 个样本中删除 N - 1 个(按 N 因子进行抽取或下采样)。粗过滤器只是采用局部移动平均线。例如,如果您想按 N = 10 进行抽取,则将每 10 个点替换为这 10 个点的平均值。
请注意,使用上述方案,您可能会丢失图中的一些高频数据(因为您实际上对数据进行了低通滤波) - 如果看到短期变化很重要,那么另一种方法是将每 N 个点绘制为单个垂直点条形代表这 N 个点的范围(即最小..最大)。