2017-10-12 5 views
1

をY軸として、私はこのようなデータセットを有する:D3のヒートマップの列ヘッダー

CT, CA, GA, TX, Year, Month 
1, 1, 2, 4, 2016, 03 
2, 1, 3, 5, 2016, 03 

状態列の下の数字は、出現の数に対応します。 そして私はD3にデータをロードしますが、どのように私はこのようなわずか4列であるようにデータを再編成することができます

d3.csv("states.csv", function(error, Data){ 

      Data.forEach(function(d){ 
       d.CT = +d.CT; 
       d.CA = +d.CA; 
       d.GA = +d.GA; 
       d.TX = +d.TX; 
       d.Year = +d.Year; 
       d.month = +d.month; 

     }); 

答えて

1

私は理解している場合:

state, count, year, month 
CT, 1, 2016, 03 

ここで私はこれまで持っているものです正しくご希望の出力配列、forEachfor...inのこの組み合わせは、それを作成することができます。

var csv = `CT,CA,GA,TX,Year,Month 
 
1,1,2,4,2016,03 
 
2,1,3,5,2016,03`; 
 

 
var data = d3.csvParse(csv); 
 

 
var newData = []; 
 

 
data.forEach(function(d) { 
 
    for (var key in d) { 
 
    if (key != "Year" && key != "Month") { 
 
     newData.push({ 
 
     state: key, 
 
     count: d[key], 
 
     year: d.Year, 
 
     month: d.Month 
 
     }) 
 
    } 
 
    } 
 
}); 
 

 
console.log(newData);
<script src="https://d3js.org/d3.v4.min.js"></script>

実際のCSVをスタックスニペットで読み込むことができないため、サンプルデータセットを変数に格納し、d3.csvParseを使用して解析しています。しかし、その原則は同じです:その関数をd3.csvコールバックの中に入れてください。

PS:所望の出力のあなたの例に基づいて...

state, count, year, month 
CT, 1, 2016, 03 

...私はあなたがが同じ年と月を持つオブジェクトを合計したくないと仮定しています。あなたが実際にそれらを合計したい場合は、それを行う方法を尋ねる別の質問を投稿してください(またはそれは一般的な問題であるので、検索は行います)。

+0

ありがとう!私は自分のデータを読み込んでログを確認しましたが、コンソールに空の配列が表示されています。それを表示しようとすると、newData [0]は未定義です。 .push関数で何か別の必要があるのでしょうか? – ajax2000

+0

まあ、私は正確なコードを見なければなりません。コードとCSVを使用してPlunkerまたはBlockbuilderをセットアップします。 –

+0

http://blockbuilder.org/ajax2000/87c95d6706e43a868df5cc035c49f9ab – ajax2000

関連する問題