nvd3使用(1)——多线图中的一个很隐蔽的bug

来源:互联网 发布:three.js全景图的原理 编辑:程序博客网 时间:2024/05/16 14:43
d3是一个非常强大的以数据驱动的基础图形库,其中封装了一系列的图形转化变形处理操作,欲知其强大在哪里,强大到什么地步,请参考http://d3js.orghttps://github.com/mbostock/d3/wiki/Api%E5%8F%82%E8%80%83.
而nvd3则是对d3的一层封装,其只要目的是绘制一系列的常用图——如线图、饼图、直方图等。
使用d3和nvd3实现数据可视化是非常方便的,几行js代码就能搞定。
而在我使用过程中去发现了nvd3的一个很隐蔽也很致命的bug。我为这个bug付出了整整两天的时间。
bug描述

开始的时候接触的nvd3的示例,这些当然是完美的没有任何bug的图。然后自己开始使用自己的实用数据画,也没问题,直到后来某一有点不太漂亮的数据出现了。如下图: bug就出现了,chrome报的错是:Uncaught TypeError: Cannot read property 'data' of undefined。报错的文件是nv.d3.js:11190 而且每次点击legend,选定分组,发现只有一条线条的时候,线条交互回复正常,但是只要两条线同时选定的时候,交互就会失败,而其会报出上述的错误。





这是什么鬼问题,更本无从下手啊!这次的线和nvd3的示例有什么区别?
通过对nv.d3.js文件报错点逐步调试,发现是在绘制nv-scatterWrap 的nv-point-paths时候失败的。
  
 
 
展开nv-point-paths节点


点击一个无数据的path节点,查看该节点对应的css



然后页面就会出现一些很奇怪的区域,这个明显是来划分每个点选择范围的(你的鼠标移入此区域后,该区域内的点会被激活)。




当发现只要两条线有重叠的时候,选择区域明显没有画完,这时我明白了,为什么会报错。因为当线条重叠的时候,数据点重叠了,所以其激活区域重叠了,从而没办法判断此区域到底属于谁,所以导致激活区域化不下去了。




这个明显是nvd3的一个bug,出现这出线图的情况比比皆是。不可能要求所以这种情况都要求规避吧!
解决方案
暂时没想到
0 0
原创粉丝点击