2016-05-11 6 views
1

私は棒グラフを生成するためにd3を使用しています。私は、2015年の各日のデータを含む4つの列を持つCSVデータをいくつか持っています。d3 .csvデータが多い1か月だけを描画

  • バー1
  • バー2
  • ライン

私が達成したい事は、それはバー1とバー2のためにわずか12小節を表し、追加することですそれらの上にライン(私はそれを行う方法を知っている)。

誰かが、データを変更せずに毎月ではなく、月の初めにバーを表示する方法を教えてもらえますか?

+0

月の平均を1バーで表示しますか?または平均、中央値? – murli2308

+0

月平均、yes – Hiero

答えて

1

nestフィーチャーd3が役に立ちます。テーブルの各エントリ(ここではキーは月)にキーを与え、同じキーを持つエントリの束ごとに関数を実行します(ここでは、Bar AとBar Bの平均を取る)。これによりテーブルkey -> valueが得られます。

私はこの時点で

あなたの日付が標準の文字列 "YYYY-MM-DD" として表現され
var monthdata = d3.nest() 
.key(function(d) { 
    //get month from data (first 7 characters): 
    return d.date.substring(0,7);}) 
.rollup(function(d) { 
    //run this function where d is a set of entries with same month 
    return { 
     bar1: d3.sum(d, function(g) {return g.bar1; })/d.length, //average of bar1 
     bar2: d3.sum(d, function(g) {return g.bar2; })/d.length //average of bar2 
    } 
}) 
.entries(csv_data); 

を仮定している、monthdataは次の形式持っている必要があります。

[{ key: "2015-01", values: {bar1: 123.4, bar2: 32.10} }, 
    { key: "2015-02", values: {bar1: 1234, bar2: 132.10} }, 
    .. ] 

を.. d3棒グラフにプラグインする準備ができています。

+0

[ボーナス]ネスティング機能をテストするための非常に良いリンク:http://bl.ocks.org/shancarter/raw/4748131/ – tarulen

関連する問題