GFlot / Flot:堆积条形图未正确堆叠所有系列

时间:2012-10-16 21:54:37

标签: java gwt charts flot bar-chart

我正在将 GWT 2.4 GFlot 2.4.3 结合使用,并且有关于六个系列的堆叠的奇怪问题。

您可以在下面的图片中看到我的栏以及问题。我有六个系列(handler1到handler6)代表百分比,颜色用于区分系列并有其自己的含义,但这对我的问题并不重要。如果值大于0.0,我只会将DataPoints添加到系列中。

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

正如您所看到的那样,红色系列在9月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[] - 数组显然是具有六个系列处理程序的数组。是的,我的情节代码中有options.setStack(true);;)

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)));
         }
      }
   }
}

从10月17日开始编辑:此图片具有完全不同的数据库,并且非常清楚地显示问题。起初,这些条不会堆叠,突然堆叠按预期工作:

Bar chart stacking issue 2

1 个答案:

答案 0 :(得分:0)

我能够通过添加虚拟DataPoints并在调整{{1}时将线宽设置为 0 .setLineWidth(0)来自行解决问题})。

如果没有将线宽设置为0,则Flot似乎会在堆叠条形图的底部和顶部生成空DataPoints的轮廓,这看起来非常难看,并且还提供了没有数据/应该存在的数据的外观。