0

我正在使用 NVD3 的CumulativeLineChart来呈现一些财务数据(每日报价),例如:

2013-08-02    1.386317
2013-08-05    1.391471
2013-08-06    1.389597
2013-08-07    1.393294
2013-08-08    1.386240
2013-08-09    1.382552
2013-08-12    1.383685
2013-08-13    1.399916
2013-08-14    1.404787
2013-08-15    1.409127
2013-08-16    1.419608
2013-08-19    1.429470
2013-08-20    1.423128
2013-08-21    1.438342
2013-08-22    1.440490
2013-08-23    1.421211

因此,如果2013-08-02是图表上的第一个点,则 y 值为0。之后的每个点都有基于此计算的 y 值:

quote of day / quote of first day - 1

例如, 的 y2013-08-23值为0.02517029

问题是:我们的图表没有绘制正确的值——最后的正确值应该是 12%,但图表显示的是 7%。

在此处输入图像描述

我几乎可以肯定我没有以正确的方式使用 CumulativeLineChart,但我该如何解决呢?我打算切换到简单的折线图,但我不想失去当前图表的某些功能。有什么方法可以设置 NVD3 使用的自定义功能?

为了上下文化,是我们的实际数据集。图表的第一个和最后一个引号是:

20120830 | 1.232551500
20130730 | 1.383957600

正如我之前所说,最后一点的 y 值应该是0.1228396,或 12.28%。

4

1 回答 1

3

不幸的是,NVD3 的文档很糟糕,我发现最好还是看看源代码。对于累积折线图,归一化在文件的最后完成,在函数 indexify. 相关代码是

line.values = line.values.map(function(point, pointIndex) {
  point.display = {'y': (lines.y()(point, pointIndex) - v) / (1 + v) };
  return point;
})

其中v是该行的第一个值。这显然与您用来计算百分比的公式不同。因此,您必须为其提供值,以在源中给出公式的情况下产生正确的数字。

或者,您当然可以修改 NVD3 源以使用您需要的公式。

于 2013-09-04T12:50:25.103 回答