Chart.js - 格式化 Y 轴

Posted

技术标签:

【中文标题】Chart.js - 格式化 Y 轴【英文标题】:Chart.js - Formatting Y axis 【发布时间】:2013-12-20 17:35:30 【问题描述】:

我正在使用Chart.js 来绘制一个简单的条形图,我需要像这样格式化它的 Y 轴

123456.05 至 123 456,05 美元

我不明白如何使用scaleLabel : "<%=value%>"

我看到someone pointing 到“JS Micro-Templating”, 但不知道如何使用我们的 scaleLabel 选项。

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

【问题讨论】:

OP:请重新考虑选择的答案 【参考方案1】:

Here 你可以找到一个很好的例子来说明如何格式化 Y 轴值。

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

【讨论】:

【参考方案2】:

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

注意该值是一个字符串。

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

jsFiddle example

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

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

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

;

jsFiddle example

【讨论】:

非常清楚,我很困惑如何使用带有自定义值的 scaleLabel 谢谢+1【参考方案3】:
scaleLabel : "<%= Number(value).toFixed(2).replace('.', ',') + ' $'%>"

【讨论】:

为什么它对我不起作用。请帮我。 ***.com/questions/39256476/…【参考方案4】:

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

所以,虽然"&lt;%= Number(value).toFixed(2).replace('.',',') + ' $' %&gt;" 有效,但您也可以这样做:

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

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

【讨论】:

这实际上是最好的答案。由于一个简单的 IF 函数被直接调用,而不是运行嵌入式模板解析器,后者间接调用 JS 代码。【参考方案5】:

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

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'
                
            
        ]
    

【讨论】:

很高兴听到这个消息。 这似乎也是使用 angular-chart.js 的正确方法 这个答案必须被接受。我认为这可能适用于 2.x.x 及更高版本的新版本。我有一个新版本,我尝试了在网络上找到的许多其他解决方案,但没有任何效果。这是唯一对我有用的东西.. 这很好用。这应该被接受为答案。我花了一个小时才找到这个。为什么这不在文档中,这超出了我的范围。你是怎么找到这个的,杰森? 感谢您的回答,对我的项目帮助很大。【参考方案6】:

Chart.js 2.X.X

我知道这篇文章已经过时了。但如果有人正在寻找更灵活的解决方案,这里就是

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
                    
                
            ]
        
    

'hi' 是印地语。在此处查看其他语言环境参数https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation#locales_argument

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

【讨论】:

工作就像魅力!太棒了!【参考方案7】:

对于使用 3.X.X 的任何人,以下是更改 y 轴标签的更新语法:

scales: 
  y: 
    ticks: 
      callback: (label) => `$ $label`,
    ,
  ,
,

【讨论】:

以上是关于Chart.js - 格式化 Y 轴的主要内容,如果未能解决你的问题,请参考以下文章

在 Chart.js 中格式化条形图的 yAxis 标签

Chart.js:禁用 Y 轴,当通过图例禁用图形时

Chart.js:在图例点击时刷新第二个Y轴步骤

Chart.JS - 无法在 Y 轴标签之间添加边距/间距

Chart.js Y轴数据以百分比展示

删除 chart.js 中的 x 轴标签/文本