2016-11-07 77 views
0

我在D3中有一個條形圖,我想在x軸上顯示一些日期。我從數據庫中得到的是兩個字段,我必須連接才能獲得年份和月份。見下文。我的想法是,對於d.date字段,我得到了NaN,儘管我已將它轉換爲數字。D3:將數據轉換爲數字

data.forEach(function (d) { 
    d.date = "20" + d.yy + "/" + d.mm; 
    // coerce to number 
    d.value = +d.value; 
    d.date = +d.date; 
    console.log(d.value); 
    console.log(d.date); 
}); 

x.domain(data.map(function (d) { 
    console.log("HEelllppp!!!!",d.date); 
    return d.date; 
})); 

y.domain([0, d3.max(data, function (d) { 
    return d.value; 
})]); 

任何人有一些想法?提前致謝!

回答

1

可以使用unary plus字符串轉換爲數字:

console.log(+"12345") 
 
console.log(+true) 
 
console.log(+"17.9876")

但是,你想將字符串轉換用,這不是數字,如「2016/02字符」。它會返回楠:

console.log(+"2016/01") 
 
console.log(+"1a2b3c")

方案:使用順序量表的日期,將它們作爲字符串(懶惰溶液),或使用D3(優選地)解析日期:

var dateString = "2016/04";//this is a string 
 
var format = d3.time.format("%Y/%m"); 
 
var date = format.parse(dateString);//this is a date 
 
var dateTick = format(date); 
 
console.log("date is: " + date) 
 
console.log("but you can show it as: " + dateTick)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

+0

但最終我只是希望它以這種格式2016/01。我是否應用其他過濾器或其他? – blaa

+0

如果你正在談論蜱蟲,首先將它轉換爲*日期*,然後使用'tickFormat'按照你想要的方式顯示日期。再次檢查最後一個片段。 –

0

而是轉換爲數字,你應該合作nvert到日期

var dates = data.map(function(d){ return new Date(d.yy + "/" + d.mm); }) 
var xScale = d3.time.scale().domain(d3.extent(dates)) 

如果我使用var data = [ { yy: 2016, mm: 01}, {yy: 2016, mm: 02 }];我得到以下走出d3.min(xScale.domain())的:

Mon Feb 01 2016 00:00:00 GMT-0500 (EST) 
+0

我只是想要這個格式2016/01。我怎樣才能獲得這個? – blaa

+0

您可以使用'd3.time.format(「%Y /%m」)來格式化日期,例如'd3.time.format(「%Y /%m」)(新日期(「2016/01/03」))''會返回'「2016/01」'。 – mdml