nvd3.js 图表 ajax 数据重绘 - 缺少悬停效果 + 前 yAxis 比例

Posted

技术标签:

【中文标题】nvd3.js 图表 ajax 数据重绘 - 缺少悬停效果 + 前 yAxis 比例【英文标题】:nvd3.js chart ajax data redraw - missing hovereffect + former yAxis scale 【发布时间】:2012-11-09 04:57:31 【问题描述】:

我正在使用 nvd3 绘制一个简单的折线图,其中数据通过 ajax 请求接收。它与第一个绘图请求完美配合,但不适用于重绘。图表通过调用相同的绘图函数但使用不同的数据 + 不同的最大/最小值来重绘。

使用新数据重新绘制图表时,不会出现“悬停圆圈”,而工具提示会出现。此外,当单击图表的图例并通过再次出现悬停来强制重绘时,yAxis 的值将更改为第一个绘制图表的值。

到目前为止,我假设重绘图表时仍保留旧的最大/最小值 - 但仅涉及“悬停”效果。到目前为止,一般图表在重绘时看起来也很好 - 问题只是悬停在上面,就是这样。

听起来很混乱,但希望你能明白这一点。

一些代码:

 d3.json(queryurl, function(data2)
  nv.addGraph(function(jsonData) 
    if(chart)
       chart.remove();
    
    chart = nv.models.lineChart()
                .x(function(d)  return d[0] )
                .y(function(d)  return d[1] )
                .color(d3.scale.category10().range());

    chart.xAxis
        .tickFormat(function(d) 
            return d3.time.format('%x')(new Date(d)) 
        );

    chart.yAxis
        .scale()
        .tickFormat(d3.format(''));

    chart.lines.yDomain([maxmin.max,maxmin.min]);

    d3.select('#chart1 #chartsvg')
      .datum(data2)
      .transition().duration(600)
      .call(chart);

    nv.utils.windowResize(chart.update);

);

);
  return chart;

【问题讨论】:

【参考方案1】:

在重绘之前尝试在 svg 元素上使用.empty()

【讨论】:

【参考方案2】:

我自己刚刚开始使用 NVD3 和 D3,但是我正在做类似的事情。对我有用的是将数据更新功能与图表创建功能分开。请注意下面的警告...

我有以下创建图表:

initGraph = function(url) 
  d3.json(url, function(data) 
    nv.addGraph(function() 
      chart = nv.models.multiBarChart();

      d3.select('#chart svg').datum(data).transition().duration(500).call(chart);
      nv.utils.windowResize(chart.update);

      return chart;
    );
  );
;

以及更新它的以下函数:

redrawGraph = function(url) 
  d3.json(url, function(data) 

    d3.select('#chart svg').datum(data).transition().duration(500).call(chart);
    nv.utils.windowResize(chart.update);
  );
;

我不知道这是否是推荐的解决方案,因为我仍处于“破解直到它起作用”阶段。这样,在调用redrawGraph() 后,图表的所有功能都可以工作(包括轴重绘和工具提示)。

警告:这似乎偶尔会导致重新计算时的刻度错误:

【讨论】:

见我的workaround for the tick issue - 本质上是重新绘制图表。

以上是关于nvd3.js 图表 ajax 数据重绘 - 缺少悬停效果 + 前 yAxis 比例的主要内容,如果未能解决你的问题,请参考以下文章

Nvd3.js - 向累积图表添加多个 y 轴

d3.js & nvd3.js -- 如何设置 y 轴范围

Kendo-UI图表中的刷新方法和重绘方法有啥区别?

在discreteBarChart nvd3.js中自定义带有数据的工具提示内容

来自 MYSQL PDO 的自定义格式 JSON,用于 NVD3.js

带有本地数据的剑道图表 - 重绘结束时触发事件