具有非零轴最小值的 sencha gxt 堆积条表现不正确

sencha gxt stacked bar with non-zero axis min behaving incorrectly

我正在构建一个堆积条形图,但是当我为轴指定一个最小值时,条形图的渲染会变形,并且轴 scale/steps 是错误的。然而,我添加的系列确实按预期工作。

这是初始图表:

当我向轴提供 minimum/maximum 值时:

NumericAxis<MarketDataDetailsDecorator> axis = new NumericAxis<>();
axis.setPosition(Chart.Position.BOTTOM);
axis.setMinimum(995); // only this line
axis.setMaximum(1016);// and this line get added

您可以看到条形图适用于完全不同的值,但蓝线仍然正确。轴也以非线性方式递增:995,997,999,1001,1003,1006,1008, 1010, 1012, 1014,1016

这是一个错误还是两个 - 或者我在 api 中遗漏了什么?

以下是突出问题的要点: https://gist.github.com/NimChimpsky/b4dc3dddc629ffefc7be2469eaa87d3a

我正在尝试显示放大版本的条形图,值范围为 1002.5 - 1005.5,第一个图表是正确的,但第二个图表似乎是随机分配值?

我在本地用 this bar chart 和 OP 的要点进行了测试。


Non-Zero 轴最小值问题

这绝对是绘制逻辑的错误 (identical issue but on extjs)。忽略 maximum 值的变化,这也给这个问题增加了更多麻烦,假设我们将底轴的 minimum 值更新为 n,如果绘制图表上柱的原始高度应该是 h,它将减少到 h - n(派生自 h * (h-n)/h)。

例如;

  • 这里h ~= 1000,和n = 500,所以我们看到绘制条的无效高度是1000 - 500 = 500,所以50%长度为酒吧...

  • 此处h ~= 1000n = 7501000 - 750 = 25025%

  • 以及 OP 的示例 h ~= 1000n = 995,因此我们看到非常短的 0.5% 长度条。

遗憾的是,我无法仅通过用户可用的方法修复此问题,而无需访问 BarSeries 中的糟糕代码,即使这样做维护起来也很麻烦,而不是修改第 3 方的最佳选择 non-open源代码。我建议创建一张到这家公司的票...


超出轴范围的数据问题

当底部轴的范围缩小到 [95-105] 时,行为变得不稳定,条形图堆积在 x-axis 后面。

所以看起来当数据超出范围时,就会出现这种错误,图表上的数据集没有固有的hide/filter逻辑。


轴标签步骤不一致问题

这似乎是默认设置步长计算的近似问题,即10 steps(实际上还有其他逻辑,但除非使用了一些更多的自定义设置,否则它将是10).如果您给出一个手动范围,并且如果 (max - min) % 10 != 0,那么由于步长计算的近似值,您将遇到这样的问题。

例如,让我们将 [90-115]max - min = 25 一起使用,这会产生以下问题;

如果你只是算一下;

step = (max - min) / 10 = 25 / 10 = 2.5

标签值;

  1. 90 + (2.5 x 0) = 90
  2. 90 + (2.5 x 1) = 92.5 ~= 93
  3. 90 + (2.5 x 2) = 95
  4. 90 + (2.5 x 3) = 97.5 ~= 98
  5. ...

所以这只是范围和默认步数之间的不匹配。您可以通过在底轴上使用 axis.setSteps() 的自定义步长量来调制它,使用一个将值 max - min 平均划分的值。