我有大量数据集(10 Hz 数据,因此每 24 小时有 864k 个点),我需要实时绘制这些数据集。这个想法是用户可以缩放和平移到非常详细的散点图。
数据不是很连续,有尖峰。由于数据集太大,我无法在每次绘图刷新时绘制每个点。
但我也不能只绘制每个第 n 个点,否则我会错过主要特征,例如大而短的尖峰。
Matlab 做对了。您可以给它一个全为零的 864k vector ,只需将任何一个点设置为 1,它就会通过缩放和平移实时正确绘制。
Matlab是怎么做到的?
我的目标系统是 Java,所以我会在 Swing/Java2D 中生成这个图的 View 。
请您参考如下方法:
您应该尝试来自 MATLAB Central 的文件:
https://mathworks.com/matlabcentral/fileexchange/15850-dsplot-downsampled-plot
来自作者:
此版本的“绘图”将使您能够可视化具有大量元素的数据。绘制大型数据集会使您的图形变慢,但大多数时候您不需要图中显示的所有信息。您的屏幕只有这么多像素,您的眼睛将无法检测到屏幕上未捕捉到的任何信息。
此函数将对数据进行下采样并仅绘制数据的一个子集,从而提高内存需求。放大绘图时,会显示更多信息。已完成一些工作以确保捕获异常值。
语法:
dsplot(x, y)
dsplot(y)
dsplot(x, y, numpoints)
示例:
x =linspace(0, 2*pi, 1000000);
y1=sin(x)+.02*cos(200*x)+0.001*sin(2000*x)+0.0001*cos(20000*x);
dsplot(x,y1);