Javascript Chart.js自动缩放

Javascript Chart.js自动缩放,javascript,charts,chart.js,Javascript,Charts,Chart.js,我一直在测试chart.js,可能会将其包含在一个项目中。我只是有一个小小的问题。它无法正确缩放某些数据集。我在SO中发现了一些类似的问题,但实际上没有什么能解决我的问题 这就是我的图表在一些数据集上的样子: 出于某种原因,最大值(2.2)看起来非常难看。原因是,在这种情况下,数据集有一组三个重复的值(2.2、2.2、2.2)。我希望在这个系列的顶部有一些空间,这样看起来会更合理一些 如何正确地在系列行的顶部添加“填充”?我想要一个解决方案,我可以依靠chart.js来找出最大值,然后可能会在

我一直在测试chart.js,可能会将其包含在一个项目中。我只是有一个小小的问题。它无法正确缩放某些数据集。我在SO中发现了一些类似的问题,但实际上没有什么能解决我的问题

这就是我的图表在一些数据集上的样子:

出于某种原因,最大值(2.2)看起来非常难看。原因是,在这种情况下,数据集有一组三个重复的值(2.2、2.2、2.2)。我希望在这个系列的顶部有一些空间,这样看起来会更合理一些

如何正确地在系列行的顶部添加“填充”?我想要一个解决方案,我可以依靠chart.js来找出最大值,然后可能会在刻度上添加一些填充(比如x+10)。问题是,我不能只硬编码最小-最大值,因为我可以选择200多个不同的值,它们的比例可能会有很大变化

以下是我目前呈现图表的方式:

    return new Chart(context, {
    type: 'line',
    data: { 
        labels: labels.data,
        datasets: dataSets
    },
    options: {
        responsive: true,
        maintainAspectRatio: false,
        scales: {
            ticks: {
                beginAtZero: false
            },
            yAxes: [{
                ticks: {
                    beginAtZero: false
                },
                id: 'A',
                type: 'linear',
                position: 'left',
            }, {
                ticks: {
                    beginAtZero: false
                },
                display: displayBAxis,
                id: 'B',
                type: 'linear',
                position: 'right',
            }]
        }
    }
});

这可能不是最干净的方式,但你可以随心所欲地使用它

简而言之,您需要创建一个函数,从所有数据集数组中查找最大值,并在yAxes.ticks中将max设置为该函数返回的值

详情如下

首先引用此处:

data:{
    labels: labels.data,
    datasets: dataSets //talking about this first
}
创建一个函数,该函数将遍历这些数组并获取所有数组的最大值。我用这个做了,但你可以做得更好我相信:

function getMax(){
    var max = 0;
    dataSets.forEach(function(x, i){        
        max = Math.max(max, Math.max.apply(null, x.data));
    });

    return max + 2;
}
然后在雅克斯的
返回中,您应该能够:

ticks: {
    beginAtZero: false,
    max: getMax()
},

您可以找到数据集的最小值和最大值,然后添加/减去差异的百分比(范围)

例如,假设您使用范围的1%

[0.1,0.2,0.5]给出(1%)x(0.5-0.1)=0.004,因此[min,max]=[0.096,0.504]


[150018003503600]给出(1%)x(3600-1500)=21,所以[min,max]=[14793621]。

你能给我看看你的数据集吗?我不需要所有东西,但我只需要看看你是如何引用它们的。然后我可以给你你的解决方案。是的,我想是这样的,问题是在每个系列中添加例如+2不是一个很好的选择,因为系列可以是例如[0.1,0.2,0.5]或[1500,1800,3500,3600]。但我做了一些类似于你建议的事情,只是需要添加一些条件来检查当前系列(或系列)的范围,并从中找到最大值和最小值。但无论如何还是要感谢你的想法,因为它不是最干净的。你可以算出勾号间距,并使其与之相等,使其看起来更“开箱即用”。但如果答案满足您的需要,请接受它或结束问题。