2015-03-25 63 views
0

我試圖在DC.js中創建一個條形圖。在這裏,我減少了一個字段的平均值,並希望在y軸上顯示它。我不知道如何去做。有人可以幫助我嗎?在dc.js中自定義.y([yScale])方法

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 
    }; 
} 

我使用reduceSum()計算total。直到現在,一切都很好。現在如何在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

是,.y()是相當欺騙性(或隱約)命名爲:一個是用於規模,它映射圖表座標到物理座標。

你想要的這裏是.valueAccessor()

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

是的,它聽起來就像你是在正確的軌道上。 – Gordon 2015-03-25 12:25:21

+0

謝謝..我可能沒有通過'.valueAccessor()'在API中。當然,這完全難以理解。你必須是'dc.js'和'crossfilter.js'的主人,我經常在堆棧溢出中找到你的答案。 – Greenhorn 2015-03-25 14:19:43

+0

我是當前的維護者,但不是原作者。確實,沒有全面的文件。大多數人從[註釋庫存示例](http://dc-js.github.io/dc.js/docs/stock.html)和其他示例開始。 – Gordon 2015-03-25 16:58:00