我有一个大型数据集(大约50000个点),它在折线图中可视化。画布的大小可能会根据数据集的大小而变化。大量的点使得绘图太慢。由于绘制了几个彼此接近的点,也会导致点的混乱和重叠。因此,数据的可视化表示将是不令人满意的。如何显示可提高性能的可用点子集?任何人都可以建议我使用合适的算法来提取实际点数的子集吗?
答案 0 :(得分:0)
我能想到的一切都是妥协......:
为了保持简单,让我们说你有一个包含50k条目的列表来进行vizualize, 但出于性能原因你只想画1k点......
一些不同的方法是......:
每隔一分钟,你就得到1k瓦:
List<double> src = ... //50k entries
List<double> viz = new List<double>();
for(int i=0;i<1000;i++)
viz.Add(src[(int)(i * (src.Length / 1000d))];
另一种方法是获得平均值。到了......:
List<double> src = ... //50k entries
List<double> viz = new List<double>();
for(int i=0;i<1000;i++) {
int from = (int)(i * (src.Length / 1000d));
int to = (int)((i+1) * (src.Length / 1000d));
double avg = 0;
for(int j=from;j<to;j++)
avg += src[j];
viz.Add(avg/(to-from));
}
未经测试的代码 - 只是一些想法...