Chart.js 如何防止在chartjs中剪切比例标签?

Chart.js 如何防止在chartjs中剪切比例标签?,chart.js,Chart.js,我在以下方式“切断”电子秤标签的位置时遇到问题: [1] 是否有可以设定的余量?我在chartjs文档中没有看到任何与此相关的内容,这些内容似乎包含在chartjs画布元素中(意思是:不包含在另一个div中)。在值之前添加带空格的缩放标签选项。允许使用两个或多个空格 scaleLabel: "<%= ' ' + value%>" scaleLabel:“ 您还可以在布局配置中设置填充(至少在chart.js 2中): 这是我的黑客——在我找到这篇文章之前,我一直在挠头——谢谢Jea

我在以下方式“切断”电子秤标签的位置时遇到问题:

[1]


是否有可以设定的余量?我在chartjs文档中没有看到任何与此相关的内容,这些内容似乎包含在chartjs画布元素中(意思是:不包含在另一个div中)。

值之前添加带空格的缩放标签选项。允许使用两个或多个空格

scaleLabel: "<%= ' ' + value%>"
scaleLabel:“

您还可以在布局配置中设置填充(至少在chart.js 2中):


这是我的黑客——在我找到这篇文章之前,我一直在挠头——谢谢Jean Baptiste Martin——你的代码让我找到了这篇文章

给定一个像[201、203、20004等]这样的数据集,我获取最大的数据集并获得长度。每个字符填充7个字符似乎适合我。长度-1是减去1,因为第一个字符对我来说显示得很好-只需要为所有其他被删除的字符添加填充

有点骇人,但这似乎有效(在V2.8上)-我测试了40854385394这样的数字,只有个位数,对我来说已经足够好了

options: {
  layout: { padding: { left: (this.data.reduce((a, b) => a > b ? a : b).toString().length - 1) * 7 } 
}

自从最初发布此问题以来,chart.js的行为可能已经改变。对于v2.9.3,我只在y轴刻度包含整数和浮点值的混合时才看到这个问题。在这种情况下(不幸的是,在我的主要情况下),超过小数点的数字会被截断

下面是对我有用的东西。在我的解决方案中,当int和float混合时,我只需设置一个固定的填充量(30px)来容纳浮点数字;您可能需要一个不同的值。希望这能帮助其他灵魂避免一天的挣扎

yAxes: [
    {
        ...
        ticks: {
            callback: (value, index, label_values) => {
                // Once per cycle through all the ticks, set the label padding appropriately
                // For unknown reasons sometimes chartjs passes a 1-point values array, which has no meaning. Ignore those.
                if (label_values.length > 1 && value === label_values[0]) {
                    // If labels have mixture of int & float, manually set the padding to give enough space for the decimal places.
                    const mixed_int_and_float_labels = label_values.some(v => Number.isInteger(v)) && !label_values.every(v => Number.isInteger(v));
                    this.chart.options.layout.padding.left = mixed_int_and_float_labels ? 30 : 0;
                }
                return value;
            }
        },
    }
]

我以为他们解决了这个问题,你用的是哪个版本?版本1.0.1 beta 4应该有这个。如果不是;你能显示你用来创建和显示图形的代码吗?这是一个愚蠢的解决方案,但你知道吗?这是我发现的唯一有效的东西。向上投票。@AndreiZhamoida嘿,但是如果标签太长,水平条形图的y轴仍然会被切断。顺便问一下,有没有办法使标签多行?这是怎么回事,我在yAxes下尝试过,但没有work@ChrisJamesChampeau自我的回答之后,出现了一些变化:)。自v2.0.0(我想)以来,他们已经实现了
滴答声
。关于这个问题,你应该使用
ticks
callback选项来处理文本。对我来说很有用!谢谢你,伙计!还有没有一种方法可以让它更动态,而不是使用像素?我有一个想法,就是获取图例文本的字符长度并进行相应的调整,但这似乎有些过分……我想每次更新图表时都可以这样做(可能使用options.animations.onComplete或工具提示回调),并使用图表对象中的图表尺寸。。。但是对于我的用例来说,使用带有额外像素的填充更容易,这样我几乎可以确定标签总是合适的
yAxes: [
    {
        ...
        ticks: {
            callback: (value, index, label_values) => {
                // Once per cycle through all the ticks, set the label padding appropriately
                // For unknown reasons sometimes chartjs passes a 1-point values array, which has no meaning. Ignore those.
                if (label_values.length > 1 && value === label_values[0]) {
                    // If labels have mixture of int & float, manually set the padding to give enough space for the decimal places.
                    const mixed_int_and_float_labels = label_values.some(v => Number.isInteger(v)) && !label_values.every(v => Number.isInteger(v));
                    this.chart.options.layout.padding.left = mixed_int_and_float_labels ? 30 : 0;
                }
                return value;
            }
        },
    }
]