dc.js - 每天来自组的最小值

标签 dc.js crossfilter

我有以下数据结构,想显示一个折线图,其中最小值为“金额”(组)按天(日期)(维度)。

var data = [
 {date: "2014-01-01", amount: 10},
 {date: "2014-01-01", amount: 1},
 {date: "2014-01-15", amount: 0},
 {date: "2014-01-15", amount: 10 },
 {date: "2014-02-20", amount: 100 },
 {date: "2014-02-20", amount: 10 },
];

我通常会按照以下几行做一些事情,但我不确定如何在组中找到最小值。

var dateDim = facts.dimension(function (d) {return d3.time.day(d.date);});
var dateDimGroup = dateDim.group().reduceSum(function (d) { return d.amount; })

这可能吗?我似乎找不到任何这方面的例子,所以非常感谢任何帮助。

谢谢!

最佳答案

您将需要保留自定义分组。基本思想是维护一个组中所有值的数组(最好是有序的)。在您的添加函数中,您将当前值赋给数组并将第一个值分配给该组的“最小”属性。在删除函数中删除值,从数组中删除当前值,然后将第一个值分配给“min”属性(并检查列表是否为空,在这种情况下将其设置为未定义或类似的内容) .

你的函数看起来像这样:

function add(accessor) {
    var i;
    var bisect = crossfilter.bisect.by(function(d) { return d; }).left;
    return function (p, v) {
        // Not sure if this is more efficient than sorting.
        i = bisect(p.valueList, accessor(v), 0, p.valueList.length);
        p.valueList.splice(i, 0, accessor(v));
        p.min = p.valueList[0];
        return p;
    };
};
function remove(accessor) {
    var i;
    var bisect = crossfilter.bisect.by(function(d) { return d; }).left;
    return function (p, v) {
        i = bisect(p.valueList, accessor(v), 0, p.valueList.length);
        // Value already exists or something has gone terribly wrong.
        p.valueList.splice(i, 1);
        p.min = p.valueList[0];
        return p;
    };
};
function initial() {
    return function () {
        return {
            valueList: [],
            min: undefined
        };
    };
}

'accessor' 是一个函数,用于获取您想要的最小值,例如在 reduceSum 中。调用这些函数中的每一个以返回您在 .group(add, remove, initial) 函数中相应位置使用的函数。

这段代码几乎是直接从 reductio 中提取出来的,因此您也可以使用 reductio 并执行以下操作:

var dateDim = facts.dimension(function (d) {return d3.time.day(d.date);}); var dateDimGroup = reductio().min(function (d) { return d.amount; })(dateDim.group());

您的 dateDimGroup 将有一个“min”属性,它应该为您提供每个日期的最小金额。

关于dc.js - 每天来自组的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547347/

相关文章:

javascript - 服务器端 Crossfilter : replicate filterfunction. 如何从函数闭包访问变量

javascript - dc.js 重新选择已渲染的图表

javascript - 获取 crossfilter.js 错误 "too much recursion"

javascript - 是否可以通过使用 dc.js 选择表格元素来过滤数据?

javascript - 如何使用 crossfilter 和 dc.js 过滤、分组和绘制数据

javascript - Crossfilter 是否需要平面数据结构?

javascript - 使用链接过滤 DC.js 表?

javascript - 无法使用维度对象外部的数据呈现系列图表

nvd3.js - Crossfilter 兼容图表库/DC.js 替代方案

d3.js - d3 onclick 获取具体路径/栏引用