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

时间:2014-07-21 19:46:11

标签: javascript charts dc.js crossfilter stacked-area-chart

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

初始图表呈现并且工作正常,但在我的 chart.on('缩放',函数(c,f){..})我解析数据库再次获得一组新的,更准确的数据。

放大图表会从较小的时间间隔中选择数据,而缩小则会从较大的时间间隔中选择数据。

我了解需要从交叉过滤器中删除旧数据并需要添加新数据source from this thread.但是,当我将其实现到我的 chart.on('缩放& #39;,function(c,f){..}),在第一次缩放后返回 TypeError:group is undefined

我不明白此错误的来源, 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();
        });

1 个答案:

答案 0 :(得分:2)

我离开后想出来,第二天又回来了。我在某处读过没有任何参数的 chart.stack()会删除原始组顶部的所有堆叠组。我以为我必须做这样的事情,因为如果我没有,那么额外的堆栈会被添加到顶部,这是我不想要的。但结果是错误,如果你在没有任何参数的情况下调用 chart.stack()它会返回堆叠的组,但是,如果没有任何东西可以接收返回它尝试将新组添加到堆栈,未定义组

我只是删除了 stackedLine.stack(),并使用正确的数据更新了我的图表。我还删除了 stackedLine.x(...),因为再次设置域将不允许图表被多次缩放,这种情况违背了使用的目的(& #39;缩放")首先。