我已将折线图转换为累积折线图,但其y值未正确显示。 y轴的范围应为80.00 - 140.00,但我得到-0.08 - 0.20。有没有人设法调整下面的规范化代码,使其适用于各种范围?
line.values = line.values.map(function(point, pointIndex) {
point.display = {
'y': (lines.y()(point, pointIndex) - v) / (1 + v)
};
return point;
})
非常感谢任何帮助。
答案 0 :(得分:1)
我知道这个问题有些陈旧,但我确信累积折线图的规范化代码在概念上并不正确。此外,NVD3累积折线图实现实际上是一个索引图表实现(see Mike Bostock's example)。我认为,累积折线图更像this。使用NVD3折线图和对基础数据的一些快速修改,可以轻松实现累积图表。
如果我们认为Bostock是正确的,并且我们确实希望获得索引折线图,那么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;
})
}
我向NVD3的作者询问related question并计划提交拉取请求。 请注意,百分比变化图表仅在所有基础数据均为正数时才有意义。当您开始将负值投入混合时,百分比变化会失去其所有含义。
答案 1 :(得分:0)
我发现的工作是在点序列的开头插入y值为0的另一个点。
给出[[x1,y1],[x2,y2],... [xn,yn]]]形式的数据点列表, 像values.upshift([0,0])这样的东西适用于我(x值是任意的,但我只是使用0或值[0] [0])来插入列表的前面。
(我对该图表的看法与此相同。我仍然在研究它,但我希望这有所帮助。)