Highcharts:10个系列的一个xAxis作为日期时间,没有固定的间隔

Highcharts:10个系列的一个xAxis作为日期时间,没有固定的间隔,highcharts,highcharts-boost,Highcharts,Highcharts Boost,我已经找了好几天了。尝试许多不同的解决方案 我需要能够将xAxis指定为不总是连续的日期数组(因此没有pointInterval和pointStart)。否则,我的数据就会失控,因为我有超过10个可能的系列,跨越100k+点,一次只显示2或3个系列。如果我必须在每个系列中包括每个点的日期,那会浪费太多内存。一个简单的案例有320多万个数据点,有三个时间间隔(基于时间的数据的四个不同部分) 我找到的最接近的方法是解决方案。xAxis必须有自己的格式化程序才能将毫秒时间戳表示为日期 这并不能真正解决

我已经找了好几天了。尝试许多不同的解决方案

我需要能够将xAxis指定为不总是连续的日期数组(因此没有pointInterval和pointStart)。否则,我的数据就会失控,因为我有超过10个可能的系列,跨越100k+点,一次只显示2或3个系列。如果我必须在每个系列中包括每个点的日期,那会浪费太多内存。一个简单的案例有320多万个数据点,有三个时间间隔(基于时间的数据的四个不同部分)

我找到的最接近的方法是解决方案。xAxis必须有自己的格式化程序才能将毫秒时间戳表示为日期

这并不能真正解决问题,因为我不想重新发明highcharts用于根据图形的缩放级别格式化标签的日期时间的函数。我不希望所有缩放级别都使用单一的时间格式

所以我需要知道的是,有一种方法可以将datetime指定为xAxis的数组,而不需要将datetime添加到每个点,也不需要使用类别,因为这无法正确格式化与boost一起工作的日期

我玩过这把小提琴(非助力):


为什么不能为每个点使用时间戳?如果您不提供
x
值,则Highcharts会将索引号指定为
x
。例如
[15,10,5]
实际上将被视为
[[0,15],[1,10],[2,5]
。IMHO 320万点太多了,无法在小图表上显示;对于宽度为500px(每像素200点)的div来说,每个系列100k太多了。我建议使用Highstock,内置
数据分组
。刚刚测试了从一个简单格式(假设是从AJAX响应)生成序列所需的时间:-生成图表所需的时间不到400毫秒~1秒。对于带Boost模块的Highcharts,类似的结果是:在为每个10+系列分配x值时,必须构建一个x和y值乘以每个系列100k+点的数组,现在该数组的大小是传递给图表生成的大小的两倍。通过boost和缩放,用户可以看到相当于一天的数据,或者可以看到一秒钟的数据。虽然你提出了一个很好的观点。我可以在每次构建图表后添加一个序列,然后丢弃的生成数组将被垃圾收集,我可以创建下一个要添加到图表的序列。3.2M点来自11个系列和~275k点,可缩放至第二个系列。Highstock将是不错的选择,尽管在其他需要热图、仪表和条形图的情况下,成本再高出3000美元。这可能就是我在这张图表上的方法。Highcharts不会复制
系列。data
数组将其用作提高性能的参考(请参阅:),并且不会被GC'ed。不要使用相同的变量(数组)通过禁用内部数组来生成不同的系列(
系列[0]。data[index]=[…]
)。我在这里看到的唯一瓶颈是数据交付(AJAX?),它可以简单地传递简化的数据集(参见我的演示的第一部分)。该数据集可以预处理为Highcharts格式(我演示的第二部分)。好的,你可以升级Highcharts->Highstock。无需购买两个许可证(Highstock和Highcharts)
        xAxis: {
            type: "datetime",
        categories: xArray,
        labels: {
            formatter: function () {
                return Highcharts.time.dateFormat('%Y-%m-%d %H:%M:%S.%L', new Date(this.value));
            }
        }