Javascript dc.js:将线和面积延伸到图表的末尾

Javascript dc.js:将线和面积延伸到图表的末尾,javascript,d3.js,charts,dc.js,crossfilter,Javascript,D3.js,Charts,Dc.js,Crossfilter,我正在尝试使用dc.js绘制一个面积图,图的最右边的结束日期基于当前日期,而不是数据集中的最后一个日期。如果数据点之间存在日期间隔,我希望区域从一个点延伸到下一个点,而不是在0处绘制 鉴于这些数据: var data = [ {domain: "foo.com", project: "pdp", repo: "myrepo", commit_date: "6/1/2014", lines_added: 100, lines_deleted: 50}, {domain: "

我正在尝试使用dc.js绘制一个面积图,图的最右边的结束日期基于当前日期,而不是数据集中的最后一个日期。如果数据点之间存在日期间隔,我希望区域从一个点延伸到下一个点,而不是在0处绘制

鉴于这些数据:

    var data = [
    {domain: "foo.com", project: "pdp", repo: "myrepo", commit_date: "6/1/2014", lines_added: 100, lines_deleted: 50},
    {domain: "foo.com", project: "pdp", repo: "myrepo", commit_date: "7/1/2014", lines_added: 100, lines_deleted: 50}
        ];
var ndx = crossfilter(data);
图表的线条/区域目前结束于2014年7月1日的数据点,但我希望它能延伸图表的整个长度

绘制图表的相关代码为:

var dateDim = ndx.dimension(function(d) {return d.commit_date;});
var minDate = dateDim.bottom(1)[0].commit_date;
var maxDate = new Date();
var domainGroup = dateDim.group().reduceSum(function(d) {return d.cumulative_lines;});

unshippedlineChart
    .width(500).height(200)
    .dimension(dateDim) 
    .group(domainGroup)
    .renderArea(true)
    .x(d3.time.scale().domain([minDate,maxDate]))
    .brushOn(false)
    .interpolate('step-after')
    .yAxisLabel("Unshipped Value");

完整的例子是在

您实际上没有问一个问题:-,但我认为您可能正在寻找方法对数据进行预筛选,以便将其扩展到今天,并删除任何零

这些东西没有内置到dc.js中,但是有一些可能会有所帮助。具体来说,有一个函数remove_empty_bins,用于调整组以删除任何零

您可以类似地定义一个函数来添加未经测试的最终点:

function duplicate_final_bin(source_group, key) {
    return {
        all:function () {
            var ret = Array.prototype.slice.call(source_group.all()); // copy array
            if(!ret.length) return ret;
            ret.push({key: key, value: ret[ret.length-1].value});
            return ret;
        }
    };
}
您可以使用“删除\u空\u垃圾箱”组合此文件:


其思想是创建一个包装器对象,该对象可根据需要动态地添加或删除始终更改的源组中的内容。dc.js将在重绘时调用group.all,这些包装器将拦截该调用并调整交叉过滤器组返回的数据。

最好有一个交叉过滤器适配器库,但目前只有这样的特殊代码。
var super_group = duplicate_final_bin(remove_empty_bins(domainGroup), maxDate);