2016-04-25 28 views
0

在本示例中,我遇到了動態設置我的Y比例的問題。如果有人能幫助,會愛上! 我能夠完美地獲得X軸設置,但是我找不到如何引用我的Y數據來定義我的軸的範圍。現在我的規模從-2到500,不工作的那部分代碼被註釋掉了。 感謝您的時間!無法設置正確的d3.extent訪問器

普拉克這裏: 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 [「等級」]' –

+1

@Capivara數據中沒有'rank'鍵,所以D3無法計算最小和最大它。 – nikoshr

+0

謝謝@Gerardo,強制不起作用。 –

回答

0

好吧,我會提供一個臨時解決,因爲我敢肯定,必須有一個更短,切割刀的方式來做到這一點。

首先,讓我們提取不是 「年」 從你的數據的所有值:

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標度只顯示一個選定數組的極值。這意味着我必須在分析數據時進行過濾。不確定如何去做,可能會帶來另一個問題。非常感謝您爲您的時間和耐心而準備的@gerardofurtado!