2015-03-25 3 views
0

Я пытаюсь создать гистограмму в DC.js. Здесь я уменьшил avg поля и хочу отобразить это по оси y. Я не знаю, как это сделать. Может ли кто-нибудь помочь мне в этом?Настроить .y ([yScale]) метод в dc.js

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(). До сих пор все хорошо. Теперь, как показать уменьшенный avg по оси Y?

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

Да, .y() довольно обманчиво (или неопределенно) под названием: что одна для шкалы, которая отображает диаграмму координат к физическим координатам.

То, что вы хотите здесь .valueAccessor():

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

Да, это звучит, как вы на правильном пути. – Gordon

+0

Спасибо .. Я, вероятно, не прошел через .valueAccessor() 'в API. Конечно, это было трудно понять полностью. Вы должны быть мастером 'dc.js' и' crossfilter.js', я часто нахожу ur ответы в Stack Overflow. – Greenhorn

+0

Я нынешний сопровождающий, но не оригинальный автор. Это правда, нет подробной документации. Большинство людей начинают с примера [аннотированного запаса] (http://dc-js.github.io/dc.js/docs/stock.html) и других примеров. – Gordon