2015-12-13 242 views
2

例如,我正在制作各种财务信息图表 - 线条,条形和饼图。数据以.csv作为客户端来源,其中一些空值由连字符表示。数据给我的格式不是我可以改变的。这里有一个例子:d3.js过滤嵌套数据中的空值

Month,Actual,Forecast,Budget 
    Jul-14,200000,-,74073.86651 
    Aug-14,198426.57,-,155530.2499 
    Sep-14,290681.62,-,220881.4631 
    Oct-14,362974.9,-,314506.6437 
    Nov-14,397662.09,-,382407.67 
    Dec-14,512434.27,-,442192.1932 
    Jan-15,511470.25,511470.25,495847.6137 
    Feb-15,-,536472.5467,520849.9105 
    Mar-15,-,612579.9047,596957.2684 
    Apr-15,-,680936.5086,465313.8723 
    May-15,-,755526.7173,739904.081 
    Jun-15,-,811512.772,895890.1357 

我用下面的代码被嵌套的数据,它工作正常,除了空值导致我各种各样的问题。

d3.csv("data/net.csv", function(error, data) { 
     var headers = d3.keys(data[0]).filter(function(head) { 
     return head != "Month"; 
    }); 

      data.forEach(function(d) { 
       d.month = parseDate(d.Month); 
    }); 

     var categories = headers.map(function(name) { 

     return { 
      name: name, 
      values: data.map(function(d) { 
      return { 
       date: d.month, 
       rate: +(d[name]), 
       }; 
      }), 
     }; 

     }); 

有没有问题,当我确定一条线,因为我可以用.defined,但在条形图上附加数据点或矩形圈,它导致NaN的这打破了可视化。

理想情况下,我希望嵌套的数据不包含空数据点,而不是尝试处理渲染后的形状。也就是说,从上面的数据中,我想'实际'和'预测'数组只有6个对象,而'预算'数组有12个。我还需要保留索引值。

是否有一种方法可以过滤嵌套过程以排除空值?

回答

2

添加过滤器去除所有NaN元素你喜欢嵌套在此之前:

return { 
       name: name, 
       values: data.filter(function(k){return !isNaN(+k[name]);}).map(function(d) { 
       return { 
        date: d.month, 
        rate: +(d[name]), 
       }; 
       }), 
      }; 

工作代码here

希望这有助于!

+0

嗨西里尔, 非常感谢,它过滤得很好,但不保留指数值。我怀疑这可能是不可能的。 – tgerard