0

@SamSelikoff がここでUpdate the y-axis of a brushed area chartに遭遇したのとまったく同じ問題に遭遇しました。彼が取り組んでいた例は、http://bl.ocks.org/mbostock/1667367 の単一データ シリーズの面グラフでしたが、私はhttp://bl.ocksのような複数線グラフに取り組んでいます。 .org/mbostock/3884955 .

複数折れ線グラフのより複雑なデータ マッピングに合わせてデータ フィルターを適用するにはどうすればよいですか? つまり、そのようにマップされたデータで

var cities = color.domain().map(function(name) {
return {
  name: name,
  values: data.map(function(d) {
    return {date: d.date, temperature: +d[name]};
  })
};
});

そして y.domain は次のように設定されます

y.domain([
d3.min(cities, function(c) { return d3.min(c.values, function(v) { return v.temperature; }); }),
d3.max(cities, function(c) { return d3.max(c.values, function(v) { return v.temperature; }); })
 ]);

これに似たフィルターを作成するにはどうすればよいですか (Sam の一変量データ ソリューション)

// Use x.domain to filter the data, then find the max and min duration of this new set, then set y.domain to that
x.domain(brush.empty() ? x2.domain() : brush.extent());
var dataFiltered = data.filter(function(d, i) {
   if ( (d.date >= x.domain()[0]) && (d.date <= x.domain()[1]) ) {
      return d.duration;
   }
})
y.domain([0, d3.max(dataFiltered.map(function(d) { return d.duration; }))]);

完全なデータセットのy軸の最小値と最大値に使用されるのと同じ構文内にフィルターを配置しようとしました

x.domain(brush.empty() ? x2.domain() : brush.extent());
var testMin = d3.min(cities.filter(function(c) { return c.values, function(v) {if ( (v.dates >= x.domain()[0]) && (v.dates <= x.domain()[1]) ){ return v.temperature; } }}))

これまでのところ運がありません。何か案は?

4

0 に答える 0