0

平行座標を使用して、データの異なる列に異なるスケールの最大/最小を割り当てる方法を見つけようとしています。http://bl.ocks.org/jasondavies/1341281からコードを採用しましたが、d3.extent を使用したくありません。さまざまな方法を試しました (for ループ、if ステートメント) が、d3 は気に入らないようです。

これにどのようにアプローチすべきかについてのアイデアはありますか?

 d3.json("HW3/scores.json", function(error, scores){
  x.domain(dimensions = d3.keys(scores[0]).filter(function(d){
    return d != "Country" && (y[d] = d3.scale.linear()
        .domain(d3.extent(scores, function(p) { return +p[d]; }))
        .range([height, 0]));
  }));

6 つのスケールのドメイン (score.json から取得、列形式のすべての数値) をデータ型に固有になるように変更しようとしています。

  • パーセント (1 列目と 6 列目) は 1 から 100 の範囲である必要があります。
  • スコア (列 3 と 4) は 200 からである必要があります - 両方のスコア列の最大値、
  • 時間 (2 列目と 5 列目) は、両方の時間列の 0 から最大までの値である必要があります。

d3 n00b に提供できるあらゆる支援に感謝します。

4

1 に答える 1

0

フィルター関数からスケールを作成するコードを削除し、仕様に従って手動で y スケールを作成するだけです。

x.domain(dimensions = d3.keys(data[0]).filter(function(d) {
  return d != "name";
}));

y['percent 1'] = d3.scale.linear()
    .domain([1, 100])
    .range([height, 0]));
y['hours 1'] = d3.scale.linear()
    .domain([0, d3.max(data, function(p) { return Math.max(+p['hours 1'], +p['hours 2']); }])
    .range([height, 0]));
// etc
于 2015-02-26T08:56:46.323 に答える