私は6つのカテゴリの1つであるデータの束を持っており、各データには関連する時間があります。ヒストグラムを使ってこれらのデータを毎月のビンにビンする必要がありますが、これは簡単ですが、各カテゴリをスタックする必要もあります。積み重ねたヒストグラムの例を探していましたが、見つけ出すことができるのはd3 v3からのものだけです。スタッキングAPIでは明らかに違いがあります。今すぐ私はstack()
を呼び出した後でそれにこだわっています。無意味なデータが戻ってきます。私は積み重なった棒グラフを生成することができません。d3 v4:スタックにヒストグラムデータを使用していますか?
var data = this.data;
var margin = {top: 20, right: 20, bottom: 30, left: 50},
width = this.width - margin.left - margin.right,
height = this.height - margin.top - margin.bottom;
data.forEach(function(d) {
d.date = d3.isoParse(d.createdDate);
});
// set the ranges
var x = d3.scaleTime()
.domain(d3.extent(data, function(d) { return d.date; }))
.rangeRound([0, width]);
var y = d3.scaleLinear()
.range([height, 0]);
var colours = d3.scaleOrdinal(d3.schemeCategory10);
var svg = d3.select(this.$.chart);
var svg2 = svg.select("#canvas");
var histogram = d3.histogram()
.value(function(d) { return d.date; })
.domain(x.domain())
.thresholds(x.ticks(d3.timeMonth));
var dataGroupedByType = d3.nest()
.key(function(d) {
return d.type;
})
.object(data, d3.map);
var histDataByType = [];
for (var key in dataGroupedByType) {
var histData = histogram(dataGroupedByType[key]);
histDataByType.push({type: key, values: histData});
}
var stack = d3.stack()
.keys(["A","B","C","D","E","F"])
.value(function(d, key) {
return d.values;
});
var stackedHistData = stack(histDataByType);
dataGroupedByType
各データオブジェクトの配列を含む6つのキー付きオブジェクト(FスルーA)を持つオブジェクトです。次に、を作成して、それぞれがtype
というプロパティ(AからF)とvalues
の配列を持つ6個のオブジェクトの配列を作成します。これは常に同じ長さです(私のデータは91ヶ月間で91です)。その配列内にbinデータ(存在する場合)を持つ別の配列と、x0
とx1
の値があります。この時点で、ビニングが完了しました。必要なのはすべてをスタックしてy0
とy1
の値を取得することだけです。
私はstack
と呼んでいますが、それは私にゴミを出してくれます。 stackedHistData
は6の配列で、各配列は0のプロパティ、0のプロパティ、 'NaN'に等しい1のプロパティ、および91の長さの配列、インデックス、およびキー(A〜F)を持つdata
プロパティを持ちます。スタックコールによって生成されることになっているy0
とy1
の値も表示されません。この種のヒストグラムデータをどのように使用するのですか?