2016-11-07 9 views
0

私はD3に棒グラフを持っており、x軸にいくつかの日付を表示したい。私がデータベースから得たものは、年と月を取得するために連結しなければならない2つのフィールドです。下記参照。アイデアは、私が数値に変換したにもかかわらず、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」のように、数値ではありません文字で文字列を変換しようとしています" (怠惰なソリューション)文字列として渡す、日付の順序尺度を使用するか、またはD3(好ましくは)使用して日付を解析:

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

ソリューション:それははNaNを返します

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でそれをしたい日付にnvert。別のフィルタなどを適用しますか? – blaa

+0

あなたがダニについて話しているならば、まずそれを* date *に変換し、次にあなたが望む方法で日付を表示するために 'tickFormat'を使います。最後のスニペットをもう一度チェックしてください。 –

0

代わりの番号に変換する、あなたは協力すべきです

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

関連する問題