2014-03-13 31 views
8

對於NVD3 multiBarChart,如何刪除零值條?我試着將y值設置爲null,但它們不會消失。NVD3圖表刪除0數值條

我不幸沒有足夠的聲望發佈圖像,所以這裏是ascii顯示的問題。主要有以下幾種ASCII表在兩個堆疊系列 - X和Z,與代表在Z系列零值條下劃線(_):

| 
|  _ 
|  _ X 
| _ X X X 
| _ X X X X X 
| X X X X X X 
      Z Z 
      Z 

我需要的是以下幾點:

| 
|  
|  X 
|  X X X 
| X X X X X 
| X X X X X X 
      Z Z 
      Z 

編輯:這裏是對的jsfiddle圖http://jsfiddle.net/dnn4K/1/

我包括我的一個嘗試修復,這在一定程度作品(但不是在搗鼓一些原因)。嘗試的修復方法是通過CSS選擇器找到第一個矩形,並使用rect.next()循環它們,如果高度爲1,則將高度設置爲0。這對我不起作用的原因是因爲矩形不在函數被調用時存在 - 所以現在我需要弄清楚如何在動畫完成後讓函數運行

+0

你能把你的工作代碼放在[JSFiddle](jsfiddle.net)上,所以有人可以幫助你解決問題。 – shabeer90

+0

處理它。我無法獲得相同的代碼在JSFiddle上運行 - 您是否碰巧知道如何讓外部資源在NVD3上正常工作?我已經加載了它們,但它仍然不起作用。 – jperezov

+0

確保您的外部網址正常工作。總是檢查瀏覽器控制檯,看看是否有任何錯誤拋出。 – shabeer90

回答

20

事實上,我發現不得不修改nvd3源代碼並不是真正的解決方案。

所以我簡單地添加了一個覆蓋CSS規則,隱藏任何完全1像素高的矩形。

仍然不是最佳,但我們將不得不等待新版本的nvd3,希望有一個完全可配置的模型來做到這一點。

.nvd3 rect[height="1"] { 
    display: none !important; 
} 
3

最終找出答案。在nv.d3.js文件中,有下面的代碼行:

.attr('height', function(d,i) { 
      return Math.max(Math.abs(y(d.y + (stacked ? d.y0 : 0)) - y((stacked ? d.y0 : 0))),1); //Min value of stacked bar charts set here 
     }) 

這需要更改爲以下:

.attr('height', function(d,i) { 
      return Math.max(Math.abs(y(d.y + (stacked ? d.y0 : 0)) - y((stacked ? d.y0 : 0))),0); //Min value of stacked bar charts set here 
     }) 

就是這樣。對於堆積的條形圖,最小值實際上僅設置爲1而不是0。這是圍繞7804行的nv.d3.js文件的multiBar函數。希望這可以幫助有相同問題的其他人。