2016-09-19 6 views
3

誰でも初心者を支援できますか?私はx軸上に(ドキュメントファミリの)提出日を示し、y軸上に#ファミリのメンバーを示すd3を使用して散布図を作成しました。ドットはすべて同じ半径であり、ステータスによって色分けされています。私はcsvファイル形式で300以上のデータレコードを持っていますが、最初の4つは完全にプロットしています。すべての日付は1900年以降です。d3日付/時刻を100年ごとにプロットする

以下にcsvデータセットの最初の9行が含まれています(ここでは改行を少し読みやすくしています)。最初の4つのレコードは、実際の日付で+100年にプロットされています。例えば1934年は2034年のようになっていますが、3月11日と75日には300人が予想どおりにプロットしています。データはExcelスプレッドシートから、すべての日付セルは同じ方法でフォーマットされ、すべてが4桁の正しい日付年を示し、日付の代わりにテキスト文字列として動作しません。 Excelの日付表示形式はdd-mmm-yyでした。

Num,Word,FilingDate,Status,Type,FamNum 
63872,Word1,23-May-34,Removed,Word,2 
69105,Word2,19-Oct-36,Registered,Word,1 
175164,Word3,31-Jul-62,Registered,Word,6 
207804,Word4,1-Feb-67,Registered,Word,6 
291765,Word5,3-Nov-75,Registered,Word,12 
381067,Word6,15-Sep-82,Removed,Word,2 
381069,Word7,15-Sep-82,Removed,Word,2 
402936,Word8,27-Jan-84,Removed,Word,2 
410476,Word9,20-Jun-84,Removed,Word,2 

私は最初の4つのレコードを除くすべてのレコードで動作するhtmlコードに以下を含めました。

// Parse the date/time 
var parseDate = d3.time.format("%d-%b-%y").parse; 

誰でも何が起こっている可能性がありますか?おかげさまで

答えて

3

希望する日付を生成するために少しハックする必要があります。

代わりの

var parseDate = d3.time.format("%d-%b-%y").parse; 

を使用して日付を解析するための新しい関数を作成:

var parseDate = function(d){ 
    var last2 = parseInt(d.slice(-2)); 
    var date = d3.time.format("%d-%b-%y").parse(d) 
    if(last2 < 69){//if year is less than 69 then change the year 
      date.setFullYear(1900 + last2);//will generate 1900 date 
    } 
    return date 
} 
+3

これは正しいです。しかし、説明と犯人への言及を見てうれしいです:['d3_time_expandYear()'](https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/locale/time-format.js #L300-L302) – altocumulus

+1

うわー! – Cyril

+0

普通のJSの日付は1970年1月1日のUnixのリファレンスタイムスタンプを使用していましたが、実際は68であるということは、私の心を真剣に捉えています。誰かがそれについて説明することができれば不思議です! – altocumulus