在dc.js中自定义.y([yScale])方法

时间:2015-03-25 11:10:49

标签: reduce dc.js crossfilter

我试图在DC.js中创建一个条形图。在这里,我减少了一个字段的平均值,并希望在y轴上显示该字段。我不清楚如何做到这一点。有人可以帮我吗?

var dimByChannel = cf.dimension(function(d) { return d.channelUUID; });
var groupByChannel = dimByChannel.group().reduce(reduceAdd, reduceRemove, reduceInitial);

function reduceAdd(p, v) {
    p.bytesTxd = p.bytesTxd + v.bytesTxd;
    p.avg = (p.bytesTxd/total)*100;
    p.count = p.count + 1;
    return p;
}
function reduceRemove(p, v) {
    p.bytesTxd = p.bytesTxd - v.bytesTxd;
    p.avg = (p.bytesTxd/total)*100;
    p.count = p.count - 1;
    return p;
}
function reduceInitial() {
    return {
    bytesTxd: 0,
    avg: 0,
    count: 0
    };
}

我使用total计算了reduceSum()。直到现在一切都很好。现在如何在y轴上显示缩小的avg

chanUtil
    .dimension(dimByChannel)
    .group(groupByChannel)
    .x(d3.scale.ordinal().domain(data.map(function (d) { return d.channelUUID; })))
    .xUnits(dc.units.ordinal)
    //.y(d3.scale.linear().domain(data.map(function (d) { return d.avg; })))
    .yAxisLabel("Utilization %");

1 个答案:

答案 0 :(得分:1)

是的,.y()非常具有欺骗性(或模糊地)命名:一个用于比例尺,它将图表坐标映射到物理坐标。

您想要的是.valueAccessor()

.valueAccessor(function(d) { return d.value.avg; })