Weedoze
Weedoze

Reputation: 13943

nvd3 data holes in charts

I am displaying a chart with data in the past represented by bars (observations) and data in the future represented by a line(forecast). Those are 2 separated sets of data.

The x axis uses dates and y axis use a float value.

My problem is that, for example, there is a hole with the forecast line in the past. The first data for observations is 5 days ago. Thus from this date until now, I don't have values for forecasts. If I do nothing the lines will be stretched to the whole charts.

I manually added some fake data by iterating all the observation data and pushing only the data to forecasts.

.push({ date: observations.date })

My problem is that I still see a tooltip for those data with NaN

chart

Here is the options of the 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
}

How can I hide those tooltip ? Is there another way to fill those data holes ?

EDIT

I also tried to add { date: observations.date, value : null } but it will display the lines at the bottom with 0 value.

EDIT 2

I also tried to change the y function

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

But I have the same problem

Upvotes: 0

Views: 250

Answers (1)

jeznag
jeznag

Reputation: 4723

Just use the tooltip valueFormatter to handle NaN values. e.g. here's what I do in a similar situation.

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

Upvotes: 1

Related Questions