具有非零轴最小值的 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 ~= 1000
,n = 750
,1000 - 750 = 250
,25%
以及 OP 的示例 h ~= 1000
和 n = 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
标签值;
- 90 + (2.5 x 0) = 90
- 90 + (2.5 x 1) = 92.5 ~= 93
- 90 + (2.5 x 2) = 95
- 90 + (2.5 x 3) = 97.5 ~= 98
- ...
所以这只是范围和默认步数之间的不匹配。您可以通过在底轴上使用 axis.setSteps()
的自定义步长量来调制它,使用一个将值 max - min
平均划分的值。
我正在构建一个堆积条形图,但是当我为轴指定一个最小值时,条形图的渲染会变形,并且轴 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 ~= 1000
,n = 750
,1000 - 750 = 250
,25%
以及 OP 的示例
h ~= 1000
和n = 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
标签值;
- 90 + (2.5 x 0) = 90
- 90 + (2.5 x 1) = 92.5 ~= 93
- 90 + (2.5 x 2) = 95
- 90 + (2.5 x 3) = 97.5 ~= 98
- ...
所以这只是范围和默认步数之间的不匹配。您可以通过在底轴上使用 axis.setSteps()
的自定义步长量来调制它,使用一个将值 max - min
平均划分的值。