Javascript 更改dc.js折线图中的数据组并重新绘制

Javascript 更改dc.js折线图中的数据组并重新绘制,javascript,charts,dc.js,crossfilter,stacked-area-chart,Javascript,Charts,Dc.js,Crossfilter,Stacked Area Chart,我已经根据从本地数据库输入的时间序列数据创建了一个初始dc.js堆叠面积折线图。所有计算都由数据库服务器处理,数据以时间间隔(几分钟到几小时)获取。所使用的交叉过滤器维度是日期(以毫秒纪元时间为单位),包括两组要一起绘制在一个图表上的数据。这两组中的值在所选的时间间隔内取平均值,这也是由db服务器完成的,我非常希望避免将整个数据集加载到脚本中 最初的图表呈现并运行良好,但在我的图表中。在('zoomed',function(c,f){..})上,我再次解析数据库以获得新的、更精确的数据集 即在图

我已经根据从本地数据库输入的时间序列数据创建了一个初始dc.js堆叠面积折线图。所有计算都由数据库服务器处理,数据以时间间隔(几分钟到几小时)获取。所使用的交叉过滤器维度是日期(以毫秒纪元时间为单位),包括两组要一起绘制在一个图表上的数据。这两组中的值在所选的时间间隔内取平均值,这也是由db服务器完成的,我非常希望避免将整个数据集加载到脚本中

最初的图表呈现并运行良好,但在我的图表中。在('zoomed',function(c,f){..})上,我再次解析数据库以获得新的、更精确的数据集

在图表上放大选择较小时间间隔的数据,缩小选择较大时间间隔的数据

我知道旧数据需要从交叉过滤器中删除,新数据需要添加到交叉过滤器中,但是,当我将其实现到我的图表中时。在('Zomed',函数(c,f){..})上,在第一次缩放后,它返回一个类型错误:组未定义

我不明白这个错误是从哪里来的,chart.group(..)是在页面首次加载时定义的。这是我的功能

    .on('zoomed', function(chart, filter) {
        var nextLower = stackedLine.x().domain()[0];
        var nextUpper = stackedLine.x().domain()[1];
        $.getJSON('/_try_db', {
            lower : Date.parse(nextLower),
            upper : Date.parse(nextUpper)
            }, function(data) {
            stackedLine.expireCache()
                .stack()
                .x(d3.time.scale().domain([Date.parse(nextLower), Date.parse(nextUpper)]))
            ;
            var new_arr = [];
            $.each(data.result, function() {
            new_arr.push({
                "timestamp" : ($.parseJSON(this)).timestamp,
                "running" : ($.parseJSON(this)).running,
                "waiting" : ($.parseJSON(this)).waiting
                });
            });

            dd.filter(null);
            ndx.remove();
            ndx.add(new_arr);

            dc.redrawAll();
        });

我是在离开后第二天再回来的时候发现的。我在某个地方读到,chart.stack()在不传递任何参数的情况下删除原始组顶部的所有堆叠组。我想我必须这样做,因为如果我不这样做,那么会在顶部添加一个额外的堆栈,这是我不想要的。但是,如果调用chart.stack()而不使用任何参数,则返回堆叠的组,但是,如果没有任何内容接收返回,则尝试将新组添加到堆栈中,未定义的组


我只是删除了stackedLine.stack(),然后用正确的数据更新了我的图表。我还删除了stackedLine.x(…),因为再次设置域将不允许图表被缩放多次,而这会破坏首先使用on('Zomed')的目的。

你能试着把这个问题复制成一个小提琴吗?的代码可以为你提供一个起点(它使用随机数据,而不是从服务器中提取数据)。是的,正如@DJMartin所说。上面的代码没有显示任何对组的引用。或者,如果您发布错误的上下文,可能会有所帮助,因为该“组”未定义“被扔了?谢谢你们的回复,伙计们,我是在玩jsfiddle@DJMartin链接时发现的。我会发布一个答案。”。