2016-04-07 22 views
0

我有以下的自定义功能降低自定义排序减少dc.js功能crossfilter.js

function reduceAdd(p, v) { 
    p.vol_t += v.oqt; 
    p.prc_t += v.it; 
    ++p.count; 
    // p.average = d3.round((p.total/p.count), 2); 
    return p; 
} 

function reduceRemove(p, v) { 
    p.vol_t -= v.oqt; 
    p.prc_t -= v.it; 
    --p.count; 
    // p.average = d3.round((p.total/p.count), 2); 
    return p; 
} 

function reduceInitial() { 
    return { 
    vol_t: 0.0, 
    prc_t: 0.0, 
    count: 0, 
    }; 
} 

我的数据模型如下:

[{cat:'a', oqt:23.0, it: 45.0}, 
    {cat:'b', oqt:25.0, it: 5.0}, 
    {cat:'b', oqt:22.0, it: 25.0}, 
    {cat:'c', oqt:17.0, it: 35.0}] 

我试图绘制用dc.js将vol_t表示为X(keyAccessor),将prc_t表示为Y轴(valueAccessor)并计为radiusAcessor。我如何找到所有组的最大值和最小值。我的群组基于类别'猫'维度。

谢谢!

回答

2

您可以定义任意排序基于其价值的一组:https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order

但是,如果您使用的是dc.js气泡图,我不认为有必要定义任何特定的顺序。你只需要定义适当的访问器。

+0

我需要它为我的轴的域和范围。我想我想按top(1)[0]的顺序计算最大值,最小值。所以对于X轴,我必须按体积订购,对于Y轴我必须按价格订购。 – bashhike

+0

如果您正在寻找一次设置域名,那么您不希望为此使用Crossfilter。只需将数据转换为数字列表(使用Array.map)并使用Math.min和Math.max即可。或者如果您愿意,也可以使用d3.extent。如果你使用的是elasticX/elasticY,那么我认为dc.js会为你处理。 –

1

通过使用d3.extent和传递类别组和accessor函数返回音量和价格来解决此问题。