2016-05-14 16 views
1

d3を使用して、multiplineグラフのthis exampleを再現しようとしています。 私はd3がごくわずかであることを知っています。d3を使用してデータをグループ化する

x軸に(1995、1996、...、2010)、y軸に0〜3000の数値を持つグラフが表示されます。 csv内のさまざまなデータカテゴリを表す行。

これは私のコードの一部です:

// Get the data 
d3.csv("./data/df_out.csv", function(error, data) { 
    data.forEach(function(d) { 
     d.year = d.year; //parseDate(d.year); 
     d.value = +d.value; 
    }); 

    // Scale the range of the data 
    x.domain([1995, 2010]); 
    y.domain([0, 3000]); 

    // Nest the entries by death 
    var dataNest = d3.nest() 
     .key(function(d) { return d.death;}) 
     .entries(data); 

    // Loop through each symbol/key 
    dataNest.forEach(function(d) { 
     svg.append("path") 
      .attr("class", "line") 
      .attr("d", valueline(d.values)); 
    });  
}); 

私はそれを実行すると、私はエラーを取得:

エラー:属性D:予想される数、 "MNaN、NaNLNaN、NaNL ..."。 attrConstant @ d3.js:663(匿名関数)@ d3.js:962d3_selection_each @ d3.js:968d3_selectionPrototype.each @ d3.js:961d3_selectionPrototype.attr @ d3.js:652(無名関数)@ script.js:56(匿名関数)@ script.js:53(無名関数)@ d3.js:1996event @ d3.js:504respond @ d3.js:1949

問題はnest機能ですが、なぜわかりません。

誰かが私を助けることができますか?

コード全体:http://plnkr.co/edit/kiU1KwdvsC7e1rrjAuCM?p=preview

ありがとうございます。

答えて

4

は、まずあなたのCSVが正しくありません:

",""year"",""death"",""value""" 
"1,2003,""Acute poliomyelitis"",0" 
"2,2006,""Acute poliomyelitis"",0" 
"3,2007,""Acute poliomyelitis"",0" 
"4,2008,""Acute poliomyelitis"",0" 
"5,2009,""Acute poliomyelitis"",0" 
"6,2010,""Acute poliomyelitis"",0" 
"7,1995,""Acute poliomyelitis"",0" 
"8,1996,""Acute poliomyelitis"",0" 
"9,1997,""Acute poliomyelitis"",0" 
"10,1998,""Acute poliomyelitis"",0" 
"11,1999,""Acute poliomyelitis"",0" 
"12,2000,""Acute poliomyelitis"",0" 
"13,2001,""Acute poliomyelitis"",0" 
"14,2002,""Acute poliomyelitis"",0" 

それは(二重引用符を削除)第二に

,year,death,value 
1,2003,Acute poliomyelitis,0 
2,2006,Acute poliomyelitis,0 
3,2007,Acute poliomyelitis,0 
4,2008,Acute poliomyelitis,0 
5,2009,Acute poliomyelitis,0 
6,2010,Acute poliomyelitis,0 
7,1995,Acute poliomyelitis,0 
8,1996,Acute poliomyelitis,0 
9,1997,Acute poliomyelitis,0 
10,1998,Acute poliomyelitis,0 
11,1999,Acute poliomyelitis,0 
12,2000,Acute poliomyelitis,0 
13,2001,Acute poliomyelitis,0 
14,2002,Acute poliomyelitis,0 

あなたはこのように日付を解析する必要がありますされている必要があります。

data.forEach(function(d) { 
    d.year = parseDate(d.year); 
    d.value = +d.value; 
}); 

第三

設定し、このようなXドメイン:

x.domain(d3.extent(data, function(d){return d.year})); 

最後にラインデータを渡す前にソートしてデータw.r.t.年。コードに助けをhere

+0

おかげで作業

// Loop through each symbol/key dataNest.forEach(function(d, i) { d.values = d.values.sort(function(a,b){return a.year -b.year});//sort by year svg.append("path") .attr("class", "line") .attr("d", valueline(d.values)) .style("stroke", color(i)) ; }); 

。なぜ私は年ごとにデータを並べ替える必要がありますか? – marielle

+1

年がソートされていない場合、行はジグザグになります。行にコメントを付けてみて、自分自身でその効果を確認してください。 – Cyril

関連する問題