2012-10-16 116 views
0

我使用GWT 2.4結合GFlot 2.4.3和有關於六大系列堆疊一個奇怪的問題。GFlot /海軍報:堆積條形圖不堆疊的所有系列正確

您可以在下圖中看到我的酒吧以及問題。我有6個代表百分比的系列(handler1到handler6),顏色用於區分系列並有其自己的含義,但這對我的問題並不重要。如果值大於0.0,我只會將數據點添加到系列中。

GFlot stacking issue

下表列出了前四個欄的數據,當天從時間戳以毫秒爲單位換算:

12.9.2012 | 0  0  0  0  100  
13.9.2012 | 0  0  0  99,529 0,417 
14.9.2012 | 0  0  99,935 0  0,065 
15.9.2012 | 0  99,93 0  0  0,07 

正如你可以看到紅色系列大幹快上09月12日堆疊正確和13,但是Flot在9月14日之後突然停止堆疊酒吧,並且進一步,正如你可以看到底部的紅色小酒吧一樣。另外請注意,9月14日的紅色條是有點偏移到9月13日,這繼續以下日期/ x值。

我已經添加了一個固定的數值來增加欄的大小,並能夠看到GFlot不正確堆疊條的原因是它們不共享相同的x值,但這是可笑的是,我也已經驗證 - 輸出爲System.err - 所有系列的x值都是相同的!

例如:對於帶有黃色和紅色和正確堆疊第二杆正在生成這樣的輸出:

系列處理程序3:x值:1.347.487.200.000
系列處理程序4:X - 值:1.347.487.200.000

使用不正確的層疊第三條具有這樣的輸出:

系列處理程序2:x值:1.347.573.600.000
系列處理器4:x值:1.347.573.600.000

因此兩個酒吧每個相關係列的X值是相同的,但堆疊第二後停止工作酒吧。 這怎麼可能,我該怎麼做才能防止這種情況發生?

這個問題似乎只發生此數據,繪製不同的數據時,它按預期工作,因爲這截圖顯示:

GFlot correct stacking


下面的代碼添加數據到系列。 multipleData是一個對象,其中x值爲Double,y值爲ArrayList<Double>query.getData()返回ArrayList<multipleData>md.getvalue()返回ArrayList,其中包含multipleData對象中包含的y值。

handlers[] -array顯然是具有六個系列處理程序的數組。是的,我有一個options.setStack(true);在我的陰謀代碼;)從10月17日

for(multipleData md : query.getData()) { 
    if(!md.getValue().isEmpty()) { 
     for(int i=0; i < 5; i++) { 
     if(md.getValue().get(i) > 0.0) { 
      handlers[i].add(new DataPoint((md.getPoint(), md.getValue().get(i))); 
     } 
     } 
    } 
} 

編輯:此圖像具有完全不同的數據庫,並顯示問題非常清楚。在第一條沒有得到堆積,突然堆疊按預期工作:

Bar chart stacking issue 2

+0

一段時間後,我發現,出現這種情況只有在有一個X值的處理程序之間的差距。即處理程序1有數據,下一個處理程序的數據是處理程序6,則會發生這種情況,正如我在9小時前爲小節前添加的圖像中所示,可能是9月9日至9月11日。 解決方法是添加虛擬DataPoints,但這會在條的頂部和底部產生小的線條,具體取決於數據。這看起來很醜陋:( – devrys

回答

0

我能夠結合設置線添加虛擬數據點來解決自己的問題寬度到(.setLineWidth(0)當調整BarSeriesOptions)。

如果沒有將行寬設置爲0 Flot似乎會在堆棧條的底部和頂部爲空DataPoint生成輪廓,這看起來相當醜陋,並且還顯示有數據的地方沒有數據是/應該是。