图表

时间:2017-03-20 07:53:31

标签: javascript d3.js nvd3.js angular-nvd3

我正在显示一个图表,其中过去的数据由条形(观察)表示,未来的数据由一条线(预测)表示。这些是两组独立的数据。

x轴使用日期,y轴使用浮点值。

我的问题是,例如,过去有预测线的漏洞。观测的第一个数据是5天前。因此,从这一天到现在,我没有预测值。如果我什么也不做,那么这些线将被拉伸到整个图表。

我通过迭代所有观察数据并仅将数据推送到预测中手动添加了一些虚假数据。

.push({ date: observations.date })

我的问题是,我仍然会看到NaN

的数据的工具提示

chart

以下是图表的选项

chart: {
    type: "linePlusBarChart",
    focusEnable: false,
    margin: {
        top: 50,
        right: 50,
        bottom: 30,
        left: 70
    },
    xAxis: {
        staggerLabels: true,
        tickFormat: function(d) {
            return dateFormat(new Date(d));
        },
        showMaxMin: false
    },
    y1Axis: {
        tickFormat: function(d) {
            return d3.format('.02f')(d);
        }
    },
    y2Axis: {
        tickFormat: function(d) {
            return d3.format('.02f')(d);
        }
    },
    bars: {
        forceY: [0]
    },
    lines: {
        forceY: [0]
    },
    x: function(d) {
        return d.date.millis;
    },
    y: function(d) {
        return d.value;
    },
    duration: 500
}

如何隐藏这些工具提示?还有其他方法来填补这些数据漏洞吗?

修改

我还尝试添加{ date: observations.date, value : null },但它会在底部显示0值的行。

编辑2

我还尝试更改y功能

y: function(d) {
    if(d.value === undefined) return null;
    return d.value;
}

但我有同样的问题

1 个答案:

答案 0 :(得分:1)

只需使用工具提示valueFormatter来处理NaN值。例如这是我在类似情况下所做的事情。

  multiChart.interactiveLayer.tooltip.valueFormatter((value, i, datum) => {
    if (
      datum.key === keyForActualGreaterThanPredicted ||
      datum.key === keyForActualLessThanPredicted
    ) {
      const diff = Math.abs(datum.data.y0 - datum.data.y1);
      if (diff === 0) {
        return '-';
      }
      return diff;
    }
    return value;
  });