2015-06-24 153 views
1

我只想使用我的數據的最小值/最大值來表示y軸。 我試圖使用d3指令,但沒有結果。僅顯示Y軸上的最小值/最大值(使用C3JS)

我看過谷歌,但沒有找到答案來實現這種行爲。

代碼如下:

$.getJSON('assets/json/chartc3.json', function(data) 
{ 

    scene=data; 
    var chart = c3.generate({ 
    bindto: '#chartc3', 
    data: 
     { 

      json: scene, 
      keys: 
      { 
        x: 'round', 
        value: ['Marketable', 'Total Requested Capacity', 'Your Bid'], 
      }, 
      types: { 
       Marketable: 'area' 
      }, 
      colors: { 
       Marketable: '#A09FA2', 
       'Total Requested Capacity': '#272E80', 
       'Your Bid': '#8EBF60' 
      } 
     }, 
    axis: 
    { 
     x: { 
      tick: 
      { 
       culling: 
       { 
        max: 10 
       } 
      }, 
      type: 'category' 
     }, 
     y: 
     { 

      min: 0, 
      padding : { 
       bottom : 0 
      }, 
      tick: 
      { 
       values: [[0], [***d3.max(scene)]***], 

       format: function (d) { return d3.format(',f')(d) +' kWh/h' } 
     //or format: function (d) { return '$' + d; } 
      } 
     } 
     }......... 

我怎麼能實現上述的結果呢? d3.max(場景)返回NaN。

回答

1

那麼問題是場景不是一個數組它是一個JSON對象。

var k = d3.max([1,5,2]) 
k will be 5 

所以你需要通過構成你Ÿ序元素的數組。

0

你需要使用

d3.max(arr, function(d){return numberic value}); 

var arr = scene.map(function(d){return ...the number value..}) 
y:{ 
    min:d3.min(arr), 
    max:d3.max(arr) 
}, 

的功能取決於您的數據的數組元素。

+0

我的json文件包含我需要繪製的不同系列...所以我應該爲每個系列都有一個循環並返回數字?我從未使用過這個功能。 –

0

我用一個小函數來自己計算最大值。

var maxs=0; 
    for (var j=0; j<scene.length; j++) { 
     var maxtemp=Math.max(scene[j].Marketable, scene[j]['Your Bid'], scene[j]['Total Requested Capacity']); 
     maxs=Math.max(maxs, maxtemp); 
    } 
相關問題