2016-04-07 5 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) и count как radiusAcessor. Как найти значения max и min во всех группах. Мои группы основаны на измерении категории «кошка».

Спасибо!

ответ

2

Вы можете задать произвольный порядок для группы на основе его стоимости: https://github.com/crossfilter/crossfilter/wiki/API-Reference#group_order

Однако, если вы используете dc.js пузырь график, я не думаю, что это необходимо для определения какого-либо конкретного заказа. Вам просто нужно определить подходящие аксессоры.

+0

Мне это нужно для домена и диапазонов для моих осей. Я думал, что хочу рассчитать максимум, минимум с порядком сверху (1) [0]. Поэтому для оси X мне придется заказывать по объему, а для оси Y - заказывать по цене. – bashhike

+0

Если вы хотите установить домен один раз, то вы не хотите использовать Crossfilter для этого. Просто преобразуйте данные в список чисел (используя Array.map) и используйте Math.min и Math.max. Или используйте d3.extent, если хотите. Если вы используете elasticX/elasticY, то я думаю, что dc.js справится с этим для вас. –

1

Решил его с помощью d3.extent и передачи группы категорий и функции доступа, возвращающей объем и цену.