Chart.js-格式化Y轴


79

我正在使用Chart.js绘制一个简单的条形图,并且需要格式化其Y轴,例如

123456.05至123 456,05 $

我不懂怎么用 scaleLabel : "<%=value%>"

我看到有人指向JS Micro-Templating ”,
但不知道如何在我们的scaleLabel选项中使用它。

有人知道如何格式化此Y轴,也许给我一个例子?


1
OP:请重新考虑选择的答案
vsync

Answers:


162

我遇到了同样的问题,我认为在Chart.js 2.xx中,方法如下所示略有不同。

ticks: {
    callback: function(label, index, labels) {
        return label/1000+'k';
    }
}

更多细节

var options = {
    scales: {
        yAxes: [
            {
                ticks: {
                    callback: function(label, index, labels) {
                        return label/1000+'k';
                    }
                },
                scaleLabel: {
                    display: true,
                    labelString: '1k = 1000'
                }
            }
        ]
    }
}

3
很高兴听到这一消息。
杰森

4
这似乎也是与angular-chart.js正确的方法
user1576978 '16

3
这个Ans必须被接受。我认为这将适用于可能在2.xx及更高版本上的新版本。我有一个新版本,并且尝试了Web上发现的许多其他解决方案,但是没有任何效果。这是唯一为我工作的事情..
贾斯汀

2
这很好。这应该作为答案。花了我一个小时找到这个。为什么这不在文档中,这超出了我的范围。你是怎么找到这个的,杰森?
杰伊

2
感谢您的回答,对我的项目有很大帮助。
mikey242

56

ChartJS库的一个未记录的功能是,如果传入一个函数而不是一个字符串,它将使用您的函数来呈现y轴的scaleLabel。

因此,在可行的同时,"<%= Number(value).toFixed(2).replace('.',',') + ' $' %>"您还可以执行以下操作:

scaleLabel: function (valuePayload) {
    return Number(valuePayload.value).toFixed(2).replace('.',',') + '$';
}

如果您正在做任何复杂的事情,我建议您这样做。


这实际上是最好的答案。由于使用了简单的IF,因此直接调用了该函数,而不是运行嵌入式模板解析器,后者间接调用JS代码。
schlingel 2015年


5

正如Nevercom所说,scaleLable应该包含javascript,因此只需应用所需的格式即可操纵y值。

请注意该值是一个字符串。

var options = {      
    scaleLabel : "<%= value + ' + two = ' + (Number(value) + 2)   %>"
};

jsFiddle示例

如果您想设置手动比例尺,可以使用scaleOverride

var options = {      
    scaleLabel : "<%= value + ' + two = ' + (Number(value) + 2)   %>",

    scaleOverride: true,
    scaleSteps: 10,
    scaleStepWidth: 10,
    scaleStartValue: 0

};

jsFiddle示例


1
很清楚,我很困惑如何使用带有自定义值的
scaleLabel

5

Chart.js 2.XX

我知道这个帖子很旧。但是,如果有人正在寻找更灵活的解决方案,那就是

var options = {
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero: true,
                    callback: function(label, index, labels) {
                        return Intl.NumberFormat().format(label);
                        // 1,350

                        return Intl.NumberFormat('hi', { 
                            style: 'currency', currency: 'INR', minimumFractionDigits: 0, 
                        }).format(label).replace(/^(\D+)/, '$1 ');
                        // ₹ 1,350

                        // return Intl.NumberFormat('hi', {
                            style: 'currency', currency: 'INR', currencyDisplay: 'symbol', minimumFractionDigits: 2 
                        }).format(label).replace(/^(\D+)/, '$1 ');
                        // ₹ 1,350.00
                    }
                }
            }]
        }
    }

“嗨”是印地语。在此处查看其他语言环境参数
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation#locales_argument

以获得更多货币符号
https://www.currency-iso.org/en/home/tables/table-a1.html


像魅力一样工作!ty!
Mohammed A. Fadil

2

在这里,您可以找到有关如何设置Y轴值格式的一个很好的示例。

另外,您可以使用scaleLabel : "<%=value%>"您提到的内容,这基本上意味着<%=%>标记之间的所有内容都将被视为javascript代码(即,您可以使用if语句...)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.