2015-12-13 183 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