我知道這個問題是有點老了,但我相信,累積折線圖的標準化代碼在概念上不正確。此外,NVD3累積折線圖實現實際上是一個索引圖實現(see Mike Bostock's example)。我認爲累積折線圖會更像this。使用NVD3折線圖和基礎數據的一些快速修改,可以輕鬆實現累積圖表。
如果我們把博斯托克是正確的,我們確實希望實現索引線圖,然後在NVD3的indexify功能應改爲:
/* Normalize the data according to an index point. */
function indexify(idx, data) {
if (!indexifyYGetter) indexifyYGetter = lines.y();
return data.map(function(line, i) {
if (!line.values) {
return line;
}
var indexValue = line.values[idx];
if (indexValue == null) {
return line;
}
var v = indexifyYGetter(indexValue, idx);
// TODO: implement check below, and disable series if series
// causes a divide by 0 issue
if ((Math.abs(v) < 1e-6) && !noErrorCheck) {
// P.S. You may have to set a higher threshold (~1e-6?).
// I don't know I didn't run any tests...
line.tempDisabled = true;
return line;
}
line.tempDisabled = false;
line.values = line.values.map(function(point, pointIndex) {
point.display = {
'y': (indexifyYGetter(point, pointIndex) - v)/v
};
return point;
});
return line;
})
}
我問了related question到的作者NVD3並計劃提交拉取請求。 請注意,百分比變化圖表只有在所有基礎數據均爲正數時纔有意義。當你開始向組合中投入負值時,百分比變化失去了它的全部含義。