首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chart.js自动缩放

Chart.js自动缩放
EN

Stack Overflow用户
提问于 2018-04-18 14:43:56
回答 2查看 4.7K关注 0票数 2

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

这是我的图表与一些数据集的样子:

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

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

下面是我现在呈现图表的方式:

代码语言:javascript
复制
    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',
            }]
        }
    }
});
EN

回答 2

Stack Overflow用户

发布于 2018-04-19 01:25:57

这可能不是最干净的方式,但你可以在你认为合适的时候使用它。

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

更多细节见下文

在这里首先引用

代码语言:javascript
复制
data:{
    labels: labels.data,
    datasets: dataSets //talking about this first
}

创建一个函数,它将遍历这些数组并获得所有数组中的最大值。我是这样做的,但我相信你可以做得更好:

代码语言:javascript
复制
function getMax(){
    var max = 0;
    dataSets.forEach(function(x, i){        
        max = Math.max(max, Math.max.apply(null, x.data));
    });

    return max + 2;
}

然后,在yAxes中的return中,您应该能够拥有:

代码语言:javascript
复制
ticks: {
    beginAtZero: false,
    max: getMax()
},
票数 1
EN

Stack Overflow用户

发布于 2020-08-20 04:30:48

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

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

0.1,0.2,0.5给出(1%)x(0.5-0.1)=0.004,因此最小,max=0.096,0.504。

1500,1800,3500,3600给出(1%)x(3600-1500)=21,所以最小,max=1479,3621。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49892899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档