【发布时间】:2015-05-21 11:25:44
【问题描述】:
图表js条形图的Y轴限制是多少?
我使用了 17 位数字,它在该图表中没有显示任何内容。
【问题讨论】:
图表js条形图的Y轴限制是多少?
我使用了 17 位数字,它在该图表中没有显示任何内容。
【问题讨论】:
y 轴没有限制(可能除了数字类型的 javascript 限制)
但是,您可能看到的可能是 9007199254740992 以上的精度损失 - 这并非巧合的是 17 位数字(请参阅What is JavaScript's highest integer value that a Number can go to without losing precision? 和相关问题
Chart.js 使用值范围来确定如何缩放条形。它通过从最大值中减去最小值并使用差值来实现这一点。
现在,如果所有值都相同,Chart.js 会添加一个小数字 (0.5) 来产生差异并继续处理这个差异。
如果添加这个 0.5 确实会产生差异,那么一切都很好 - 但是,如果结果高于 9007199254740992,它大部分会被精度限制所吞噬,给出 0 差异并打乱 Chart.js 的 y 轴计算。
当数字高于 9007199254740992 并且它们的差异不够大时会发生同样的问题(它们基本上将相同的数字四舍五入 -> 它们被视为一组相等的值 -> 添加 0.5 -> 它大多被吞没由精度限制)
这里是值的快速示例以及为什么它会起作用/不起作用
// works because there is a (small) difference and the numbers are < 9007199254740992
var a = [9007199254740991, 9007199254740992];
// won't work because there is no difference and the numbers are > 9007199254740992 - 0.5
var b = [9007199254740992, 9007199254740992];
// won't work because there is no difference and the numbers are = 9007199254740992 - 0.5
var c = [9007199254740991.5, 9007199254740991.5];
// works because there is no difference and the numbers are < 9007199254740992 - 0.5
var d = [9007199254740991.4, 9007199254740991.4];
// works because there is a significant difference even though the numbers are > 9007199254740992
var e = [12345678901234567890, 12345678901434567891];
// works because there is a significant difference even though the numbers are > 9007199254740992
var f = [0, 12345678901434567891];
// won't work because there is only a small difference and the numbers are > 9007199254740992
var g = [9007199254740992, 9007199254740993];
简而言之,您的条形图未呈现,因为您有一组相同(或没有显着差异)且为 9007199254740992 - 0.5 或以上的值。
您可以添加一个虚拟值 0 来强制它呈现(或可能添加另一个虚拟系列 0 值),方法是确保存在显着差异 - 或者如果您的所有值都将在 17 位范围并且彼此非常接近,只需绘制偏移量,即假设您有 1701 和 1705...绘制 1 和 5 并将 170 作为值前缀放入工具提示中。
【讨论】: