2014-10-08 65 views
0

我已將折線圖轉換爲累積折線圖並且其y值無法正確顯示。 y軸的範圍應該是80.00 - 140.00,而我會得到-0.08 - 0.20。有沒有人設法調整下面的規範化代碼,使其適用於各種範圍?NVD3累積折線圖顯示錯誤的y值

line.values = line.values.map(function(point, pointIndex) { 

    point.display = { 
    'y': (lines.y()(point, pointIndex) - v)/(1 + v) 
    }; 
    return point; 

}) 

任何幫助將不勝感激。

回答

0

我發現的作品是在點序列的開始插入另一個y值爲0的點。給出數據點的列表[[x1,y1],[x2,y2],... [xn,yn]]], 類似values.upshift([0,0])適用於我(x值是任意的,但我只是使用0或值[0] [0])插入到列表的前面。

(我得到同樣的事情該排行榜。我還在尋找到它,但我希望這有助於。)

1

我知道這個問題是有點老了,但我相信,累積折線圖的標準化代碼在概念上不正確。此外,NVD3累積折線圖實現實際上是一個索引圖實現(see Mike Bostock's example)。我認爲累積折線圖會更像this。使用NVD3折線圖和基礎數據的一些快速修改,可以輕鬆實現累積圖表。

如果我們把博斯托克是正確的,我們確實希望實現索引線圖,然後在NVD3的indexify功能應改爲:

/* Normalize the data according to an index point. */ 
function indexify(idx, data) { 
    if (!indexifyYGetter) indexifyYGetter = lines.y(); 
    return data.map(function(line, i) { 
     if (!line.values) { 
      return line; 
     } 
     var indexValue = line.values[idx]; 
     if (indexValue == null) { 
      return line; 
     } 
     var v = indexifyYGetter(indexValue, idx); 

     // TODO: implement check below, and disable series if series 
     // causes a divide by 0 issue 
     if ((Math.abs(v) < 1e-6) && !noErrorCheck) { 
      // P.S. You may have to set a higher threshold (~1e-6?). 
      // I don't know I didn't run any tests... 
      line.tempDisabled = true; 
      return line; 
     } 

     line.tempDisabled = false; 

     line.values = line.values.map(function(point, pointIndex) { 
      point.display = { 
       'y': (indexifyYGetter(point, pointIndex) - v)/v 
      }; 
      return point; 
     }); 

     return line; 
    }) 
} 

我問了related question到的作者NVD3並計劃提交拉取請求。 請注意,百分比變化圖表只有在所有基礎數​​據均爲正數時纔有意義。當你開始向組合中投入負值時,百分比變化失去了它的全部含義。