Javascript-数据集太大,最多只需要包含1000个';它的间隔是均匀的

Javascript-数据集太大,最多只需要包含1000个';它的间隔是均匀的,javascript,math,conditional,Javascript,Math,Conditional,基本上,我只能在图表上绘制1000个值,但我的数据集通常有1000多个值 所以。。。假设我有3000个值-这很简单,每3个点都会被绘制(如果I/3==1)。如果是2106这样的数字呢?我正试着均匀地画 for(var i = 0; i < chartdata.node.length; i++){ //something in here } for(var i=0;i

基本上,我只能在图表上绘制1000个值,但我的数据集通常有1000多个值

所以。。。假设我有3000个值-这很简单,每3个点都会被绘制(如果I/3==1)。如果是2106这样的数字呢?我正试着均匀地画

for(var i = 0; i < chartdata.node.length; i++){
  //something in here
}
for(var i=0;i
您可以尝试以下方法(在伪代码中):

var所需数据长度=1000;
对于(变量i=0;i<所需数据长度;i++)
{
var actual_i=int(浮点(i)/浮点(所需的数据长度)*浮点(chartdata.length));
//用实际的_i作为索引
}

这将使用
所需的数据长度
索引数,并将从
[0,所需的数据长度)
线性插值到
[0,chartdata.length)
,这就是您想要的。

您可以尝试类似的方法(在伪代码中):

var所需数据长度=1000;
对于(变量i=0;i<所需数据长度;i++)
{
var actual_i=int(浮点(i)/浮点(所需的数据长度)*浮点(chartdata.length));
//用实际的_i作为索引
}
这将使用
所需的数据长度
索引数量,并将从
[0,所需的数据长度)
线性插值到
[0,chartdata.length)
,这就是您想要的。

正好1000个点,间距稍不规则 设A为您拥有的数据点数量(即2106),B为您想要使用的数据点数量(即1000)。在连续的情况下,您将在每个a/B数据点上间隔绘图点。对于离散数据点,您可以执行以下操作:保持计数器C,初始化为零。对于每个a输入数据点,您将B添加到该计数器。如果结果值大于a,则绘制数据点并从计数器中减去a。总的来说,将值B乘以A,再减去A乘以B,因此应该再次得到一个零计数器,精确地绘制了B个数据项

您可以对此进行调整,以在端点处获得不同的行为,例如始终包含第一个和最后一个数据点。只需无条件绘制第一个点,然后对其余点执行上述方案,即A=2105和B=999。整个方法的一个好处是,所有这些都在整数运算中工作,因此舍入误差你不必担心

完美规则的间距,但数据点较少 如果偶数间距更重要,那么您可以简单地计算使用楼层(A/B)为每个地块增加索引的数量。由于楼层功能,这将是一个比分数资源更小的数字。在最坏的情况下,几乎为2的数字将被舍入为1,导致实际绘制的数据点仅略多于500个。但这些数据点将均匀分布。

正好1000个点,间距稍不规则 设A为您拥有的数据点数量(即2106),B为您想要使用的数据点数量(即1000)。在连续的情况下,您将在每个a/B数据点上间隔绘图点。对于离散数据点,您可以执行以下操作:保持计数器C,初始化为零。对于每个a输入数据点,您将B添加到该计数器。如果结果值大于a,则绘制数据点并从计数器中减去a。总的来说,将值B乘以A,再减去A乘以B,因此应该再次得到一个零计数器,精确地绘制了B个数据项

您可以对此进行调整,以在端点处获得不同的行为,例如始终包含第一个和最后一个数据点。只需无条件绘制第一个点,然后对其余点执行上述方案,即A=2105和B=999。整个方法的一个好处是,所有这些都在整数运算中工作,因此舍入误差你不必担心

完美规则的间距,但数据点较少
如果偶数间距更重要,那么您可以简单地计算使用楼层(A/B)为每个地块增加索引的数量。由于楼层功能,这将是一个比分数资源更小的数字。在最坏的情况下,几乎为2的数字将被舍入为1,导致实际绘制的数据点仅略多于500个。但这些数据点将均匀分布。

因为您的I可能多于或少于1000个用这样的东西

var inc = Math.floor(chartdata.node.length / 1000);

if ( inc==0 )
   inc=1;

for ( var i=0; i<chartdata.node.length; i+=inc )
 { 
 }
var inc=Math.floor(chartdata.node.length/1000);
如果(inc==0)
inc=1;

对于(var i=0;i,因为你的值可能大于或小于1000,所以我会选择这样的值

var inc = Math.floor(chartdata.node.length / 1000);

if ( inc==0 )
   inc=1;

for ( var i=0; i<chartdata.node.length; i+=inc )
 { 
 }
var inc=Math.floor(chartdata.node.length/1000);
如果(inc==0)
inc=1;

对于(var i=0;i如果数据是纯数字的,您可以尝试。

如果数据是纯数字的,您可以尝试。

您的
chartdata.node是否对数组/列表排序?是的,按日期,chartdata是数组。chartdata.node.value是number@ShazboticusSShazbot也看看我的答案!我不想感到被冷落:)您的
chartdata.node
array/list是否已排序?是的,按日期,chartdata是数组。chartdata.node.value是数组number@ShazboticusSShazbot也看看我的答案!我不想感到被冷落:)