2016-04-25 3 views
0

この例ではYスケールを動的に設定できません。誰かが助けてくれるのなら大好きです! 私はX軸の設定を完全に取得することができますが、私の軸の範囲を定義するためにYデータを参照する方法を見つけることができません。今はスケールが-2から500になるようになっていますが、機能していないコードの部分はコメントアウトされた行です。 お時間をありがとう!ここ正しいd3.extentアクセサを設定できません

Plunk: https://plnkr.co/edit/eQ4HgxQC49CZIPVBXjQX

data.forEach(function(d) { 
    d["year"] = parseDate(d["year"]) 
    }); 

    var subset = data.filter(function(el) { 
    return el.metric === "rank" 
    }); 


    var concentrations = productCategories.map(function(category) { 
     return { 
     category: category, 
     datapoints: subset.map(function(d) { 
      return { 
      date: d["year"], 
      concentration: +d[category] 
      } 
     }) 
     } 
    }) 

    xScale.domain(d3.extent(subset, function(d) { 
    return d["year"]; 
    })); 

    yScale.domain([-2, 500]); 
    //yScale.domain(d3.extent(subset, function(d) {return d["rank"] })); // 
+0

d ["rank"]: '+ d [" rank "]' –

+1

@Capivaraあなたのデータに 'rank'キーがないので、D3はminとmaxを計算できませんそれ。 – nikoshr

+0

@Gerardoありがとう、強制は機能しませんでした。 –

答えて

0

私はそれを行うには短く、包丁方法がなければならないと確信しているので、[OK]を、私は、一時的ソリューションを提供します。のは、配列のこの配列をマージさせ、その後

var values = productCategories.map(function(category){ 
    return subset.map(function(d){ 
     return +d[category] 
    }) 
}); 

var merged = [].concat.apply([], values); 

そして、最後に:

まずは、あなたのデータから "年" ではないすべての値を抽出してみましょう

yScale.domain(d3.extent(merged)); 
1

実際、私は最終的にそれをきれいに解決することができました:

yScale.domain([ 
d3.min(concentrations, function(c) { return d3.min(c.datapoints,function(v) { return v.concentration; }); }), 
d3.max(concentrations, function(c) { return d3.max(c.datapoints, function(v) { return v.concentration; }); }) 
]); 

しかし、私はYスケールに1つの選択された配列の極値を表示したいので、別の問題があります。つまり、データを解析しているうちにフィルターをかけなければならないということです。それをどうやって行うのかは分かりませんが、別の質問が出るでしょう。あなたの時間と忍耐力にとても感謝しています!

関連する問題