【问题标题】:Y axis limit in Chart JS Bar chart?Chart JS条形图中的Y轴限制?
【发布时间】:2015-05-21 11:25:44
【问题描述】:

图表js条形图的Y轴限制是多少?

我使用了 17 位数字,它在该图表中没有显示任何内容。

【问题讨论】:

    标签: bar-chart chart.js


    【解决方案1】:

    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 作为值前缀放入工具提示中。

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 2017-10-07
      • 2022-06-19
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多