2016-04-10 3 views
1

Полная скрипта JS с примером данных приведена здесь: https://jsfiddle.net/ojrhn96y/2/.dc.js/Crossfilter - Создать стандартную гистограмму со средними значениями размеров?

У меня есть данные с двумя значениями: Achievement и Balance. В настоящее время я создал два текстовых элемента с dc.js, которые отслеживают среднее значение обоих значений. Тем не менее, я хотел бы иметь гистограмму с осью x ['Achievement', 'Balance'], которая затем имеет [achievement_sum, balance_sum] в качестве ее значений y, с баром для каждой метрики.

Как бы я начал создавать этот тип гистограммы?

у меня средние значения, которые создаются с помощью что-то вроде:

achievementAvg = achievement.groupAll().reduceSum(
    function(d) { 
     return d.achievement; 
    }), 

, но я не знаю, как присвоить каждому из этих значений для разделения полос.

ответ

1

Поскольку вы в основном вращаете данные, поведение напрямую не поддерживается перекрестным фильтром, который хочет фильтровать и группировать строки, а не столбцы.

Но для этого вы можете использовать "fake group", если вы не хотите фильтровать эти категории. (Что бы это значило? Я не хочу об этом думать.)

Сначала нам нужно создать абсолютно бесполезный объект измерения, потому что dc.js хочет его. Если выяснить способ фильтрации по этим категориям, это где вы бы реализовать:

var bogus_dimension = {}; 

Тогда вот поддельная группа, объект, который реализует all метод, возвращающий массив {key,value} пара так же, как реальные группа:

var fake_group = { 
    all: function() { 
     return [{key: 'Achievement', value: achievementAvg.value()/ndx.size()}, 
       {key: 'Balance', value: balanceAvg.value()/ndx.size()}]; 
    } 
} 

инициализируется гистограмма с порядковой шкалой:

dc.barChart('#bar-chart') 
    .width(200) 
    .height(200) 
    .dimension(bogus_dimension) 
    .group(fake_group) 
    .xUnits(dc.units.ordinal) 
    .x(d3.scale.ordinal()) 

Вот вилка вашой скрипки со всеми код на месте: https://jsfiddle.net/gordonwoodhull/x03f37bk/8/