DynamicSlope在D3漏斗图中不起作用

时间:2018-09-19 05:49:47

标签: javascript d3.js

我尝试使用0值的d3漏斗图无法正常工作。我启用了dynamicSlope选项才是真正的漏斗图。

查看我的示例:

http://jsfiddle.net/3x265bLj/7/

我添加了六个值l0,l1,l2 .... L6和l3的值为0.一旦启用了dynamicSlope选项,则漏斗图仅显示L0,L1,L2的值,但需要L3,L4,L5。 / p>

const data = [
                ['l0', 13],
                ['l1', 7],
                ['l2', 12],
                ['l3', 0],
                ['l4', 8],
                ['l5', 3]
            ];
            const options = {
                chart: {
                    width: 200,
                    height: 450,
                    bottomWidth: 1 / 2,
                    bottomPinch: 1,
                    inverted: false,
                    horizontal: false,
                    animate: 0,
                    curve: {
                        enabled: true,
                        height: 20,
                        shade: -0.4
                    }
                },
                block: {
                    dynamicSlope: true,
                    dynamicHeight: true,
                    highlight: true
                }
            };

            const chart = new D3Funnel('#funnel');
            chart.draw(data, options);

控制台问题:

Error: <path> attribute d: Expected number, "MNaN,562.5 LNaN,5…".

1 个答案:

答案 0 :(得分:0)

Error: <path> attribute d: Expected number, "MNaN,562.5 LNaN,5…".

均值

该函数尝试将数据转换为高度格式,但是输入0表示高度为0,该函数拒绝您。

  

绘制0数据的目的是什么? axample,如果函数可以做到   它的数据不会显示在图表上,因为它的高度为0,   我正确吗?

thare是2个解决问题的方法,首先在绘制之前将数据值更改为0.01

var data = [
                ['l0', 13],
                ['l1', 7],
                ['l2', 12],
                ['l3', 0],
                ['l4', 8],
                ['l5', 3]
            ];
var newdata = data.map(function (d,i){
              var new_d = d
              if (new_d[1] == 0){
                 new_d[1] = 0.01
              }
              return new_d
            })
chart.draw(newdata, options);

第二,在绘制之前添加过滤器功能

var data = [
                ['l0', 13],
                ['l1', 7],
                ['l2', 12],
                ['l3', 0],
                ['l4', 8],
                ['l5', 3]
            ];
var newdata = data.filter(function (d,i){
              return d[1] !== 0
            })
chart.draw(newdata, options);