2012-10-16 40 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生成轮廓,这看起来相当丑陋,并且还显示有数据的地方没有数据是/应该是。