简体   繁体   中英

NVD3 chart shows tooltip for wrong data

I have a chart in NVD3 with a date on the X axis and a float on the Y axis. It displays fine, but when I hover over the chart to make the tooltip pop up, it doesn't show it for the dataset I'm currently hovering over. Here's a GIF to make it more clear, hopefully: 工具提示的数据错误

This is the code I've used:

<script>
  var data = function() {
    return [
      {
        values: [
          {x:"2018-09-08", y:19.98},{x:"2018-09-07", y:11.99},{x:"2018-09-06", y:9.98},{x:"2018-09-05", y:4.99},{x:"2018-09-03", y:9.98},{x:"2018-09-02", y:14.99},            ],
        key: 'Turnover'
      }
    ];
  }
  nv.addGraph(function() {
    var chart = nv.models.lineChart()
      .useInteractiveGuideline(true)
      .xScale(d3.time.scale())
      .x( function(d){return d3.time.format('%Y-%m-%d').parse(d.x);} );
      ;

    chart.xAxis
      .axisLabel('Date')
      .tickFormat(function(d) {return d3.time.format("%Y-%m-%d")(new Date(d))});
      ;

    chart.yAxis
      .axisLabel('Sales')
      .tickFormat(d3.format('.02f'))
      ;

    chart.showLegend(false);

    d3.select('#nvd3 svg')
      .datum(data())
      .transition().duration(500)
      .call(chart)
      ;

    nv.utils.windowResize(chart.update);

    return chart;
  });
</script>

Edit 1: When I do not use the .useInteractiveGuideline(true) function, it does work and the tooltip is presented on the correct set of data. However, I do want to use this function. So any help here?

Looking at the examples of the NVD3 site they work with a Linear Scale for time axis.

Converting the code to this too shows the requested behavior.

You have to set the tick positions yourself because the automatic ticks for a linear scale are not on dates

var data = function() {
  return [
    {
      values: [
        {x:"2018-09-02", y:14.99},
        {x:"2018-09-03", y:9.98},
        {x:"2018-09-05", y:5.99},
        {x:"2018-09-06", y:9.98},
        {x:"2018-09-07", y:11.99},
        {x:"2018-09-08", y:19.98}
      ],
      key: 'Turnover'
    }
  ];
};
var formatDate = d3.time.format("%Y-%m-%d");
nv.addGraph(function () {
  var chart = nv.models.lineChart()
    .useInteractiveGuideline(true)
    ;
  var mydata = data();
  mydata[0].values.forEach(e => { e.x = Date.parse(e.x); });

  chart.xAxis
      .axisLabel('Date')
      .tickFormat(function(d) {return formatDate(new Date(d))})
      .tickValues(mydata[0].values.map( d => d.x ))
      ;

  chart.yAxis
      .axisLabel('Sales')
      .tickFormat(d3.format('.02f'))
      ;

  chart.showLegend(false);

  d3.select('#nvd3 svg')
      .datum(mydata)
      .transition().duration(500)
      .call(chart)
      ;

  nv.utils.windowResize(chart.update);

  return chart;
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM