2012-08-01 91 views
50

我試圖從1-100設置圖表的y軸範圍。d3.js&nvd3.js - 如何設置y軸範圍

諮詢API文檔,發現與axis.tickValues一個可能的解決方案是在這裏看到 https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-tickValues

但是,使用選項不起作用。讀取進一步向下axis.tickSize下上面鏈接的文檔頁上,下面的行點樣

端蜱由相關聯的尺度的域範圍, 確定,並將所生成的路徑域的一部分,而不是一個刻度線

所以我把它設置範圍的最小值和最大值不能通過軸選項來完成。

任何想法,我可以指定範圍?

回答

76

找到了解決方案。

.forceY([0,100])附加到圖表的實例化中,強制軸取得數組中指定的範圍。

從這裏的例子http://nvd3.org/livecode/#codemirrorNav

追加.forceY([0,100])到圖表變量作品。

+4

這對我的作品以擴大超出了最大/最小範圍內折線圖,但不是爲了使範圍小於數據。 – arboc7 2012-08-06 18:04:30

+6

注意:forceY似乎不適用於堆積區域圖表=/ – 2013-07-31 23:58:36

+5

注意:您可以使用'.forceY(val)'強制最小值,並且最大值將保持動態。 – 2014-02-21 18:47:32

31

顧名思義,這會將數組中的值添加到您的y域中,但它不會將y域設置爲[0,100]。因此,如果您將此設置爲[0,100],並且您的數據域爲-10110,則該域將爲[-10,110]。現在

,如果你想使用的域爲[0,100],即使你的數據更大,你可以使用chart.yDomain([0,100]) ...但通常你想你的域包括或您的數據,所以我強烈建議使用,而不是chart.yDomain chart.forceY。正如你所看到的,forceY最常見的用途之一是forceY([0]),使0永遠在域中。

希望能夠幫助您理解該函數實際上在做什麼,以及arboc7,這應該解釋爲什麼它在使範圍小於數據集時不起作用。

10

對於堆積面積圖,.forceY([0,100])不起作用。 改用.yDomain([0,100])

+1

有沒有辦法強制堆棧圖的範圍,但在檢查單個數據集時仍然可以自動縮放?例如當您在示例http://nvd3.org/examples/stackedArea.html – francisbyrne 2016-03-03 02:32:34

+0

中單擊「北美」時如果您有多個y軸(如多圖示例),則必須執行'yDomain1'和'yDomain2 '等。請參閱此處列出的問題:https://github.com/krispo/angular-nvd3/issues/81 – bwest87 2017-06-07 22:32:43

6

如果你的意思是設置y-domain的堆積面積圖(在應該顯示的數字的範圍),這對我的作品:

nv.models.stackedAreaChart() 
    .x(function(d) {...}) 
    .y(function(d) {...}) 
    .yDomain([0, maxY]) 
... 
0

我已經試過這樣的:

chart.forceY([DataMin, DataMax]); 

Datamin和Datamax需要從數組中計算。此外序動態調整軸點,當過濾器適用於需要自定義處理單擊形過濾器事件:

$('g.nv-series').click(function() { 
    //Calculate DataMin, DataMax from the data array      
    chart.forceY([DataMin, DataMax]);       
}); 

所以圖將每一個過濾器適用時間調整。

+0

如果您只使用默認域和範圍,則nvd3將根據您的數據集自動設置最小/最大值。並且將在添加新數據時重新計算。 – 2016-02-19 17:33:08

0

我也有類似的問題,並通過顯式定義在y軸的yScale域名解析它,即

var yscale = d3.scale.linear() 
        .domain([0,100]) 
        .range([250, 0]); 
var yAxis = d3.svg.axis() 
        .scale(yscale);