1

日付が重複しているデータがありますが、値は常に同じです。発生を 1 回だけカウントして棒グラフに反映するにはどうすればよいですか?

グループ化でフィルター機能を設定する必要があると思いますが、これについてどうすればよいかわかりません。

データ:

var jsonStr = ([
   {"date": "2011-11-14", "value": 0.1121},
   {"date":"2011-11-25", "value": -0.0231},
   {"date":"2011-11-25", "value": -0.0231},
   {"date":"2011-11-25", "value": -0.0231}
]);

コード:

//setup dimensions
var dateDimension = ndx.dimension(function (d) {
    return d.value;
});

var fluctuation = ndx.dimension(function (d) {
    return Math.round(d.value *10)/10;
});

var fluctuationGroup = fluctuation.group();

フィドル: http://jsfiddle.net/wbott70/xtjJn/

4

2 に答える 2

3

これはおそらくこれを行うための最も効率的な方法ではありませんが、マップを使用すると簡単で短時間です。

var uniqueValues = d3.map([])
jsonStr.forEach(function(d){ uniqueValues.set(d.date, d); });

newJsonStr = []
uniqueValues.forEach(function(d){ newJsonStr.push(uniqueValues.get(d)); });

結果:

[{"date":"2011-11-14","value":0.1121},{"date":"2011-11-25","value":-0.0231}]
于 2013-06-13T00:33:27.177 に答える
1

Crossfilter ライブラリを使用する前に、 の定義の直後に次のコードを使用して、データ内の重複を削除することをお勧めします (この情報が不要な場合) jsonStr

var newJson = [];
for (var i = 0; i < jsonStr.length; i++) {
    var found = false;
    for (var j = 0; j < newJson.length; j++) {
        if (jsonStr[i].date === newJson[j].date) {
            found = true;
            break;
        }
    }
    if (!found) {
        newJson.push(jsonStr[i]);
    }
}
jsonStr = newJson;
于 2013-06-13T00:24:04.310 に答える