1

我有一些有效的 Jqplot 图表,当它们达到数千时,我想从数字中截断 3 个尾随零。例如,我的图表将显示 1,500、15,000 和 150,000 的轴刻度;但我希望它说像 1.5k、15k 和 150k 这样的数字,因为这些数字有时会太长而无法在包含多个图表的页面上舒适地显示。

我从这个网站上以前的答案中发现 Jqplot 中的 formatString 使用 sprintf 函数,所以我正在玩http://perldoc.perl.org/functions/sprintf.html上列出的一些转换,但似乎不能完全正确,但是除了给出的简单示例之外,我并不熟悉以更复杂的方式使用它们的语法。

这是一个简单的代码片段示例,现在在 Y 轴上使用 formatString 来插入千位分隔符。这就是我想知道的可以以某种方式修改以将数千个转换为“K”,或者如果我应该研究另一种方法。

options = {axes:{yaxis:{tickOptions:{formatString: "%'i"}}}}

$.jqplot('example',  [[[1,1000],[2,2000],[3,100000]]], options);
4

2 回答 2

3

因此,由于此处讨论 formatString ( JQplot Format String)的另一篇文章,我能够弄清楚这一点。

有人建议,您可以简单地编写自己的刻度格式化程序供 Jqplot 使用,而不是使用 formatString,这是我不知道的。因此,我编写了以下代码来实现我所追求的转换(例如 1,000 到 1.0K、10,000 到 10K、1,000,000 到 1.0M 等):

tickFormatter = function (format, val) {
    if (val >= 1000000) {
        val = val / 1000000;
    return val.toFixed(1)+"M";
    } 
    if (val >= 1000) {
        val = val / 1000;
            if (val < 10) {
                return val.toFixed(1)+"K";
            }
        return val.toFixed(0)+"K";
    }
    return val;
}

options = {axes:{yaxis:{tickOptions:{formatter: tickFormatter}}}}

$.jqplot('example',  [[[1,1000],[2,2000],[3,100000]]], options);

我相当新,所以我相信更有经验的人可以清理一下格式化程序。但这里是工作 jsFiddle 示例:http: //jsfiddle.net/planetxpress/jPexp/

于 2013-06-02T03:32:17.097 回答
0

我必须进行简单的调整以允许正数和负数格式

                        tickFormatter = function (format, val) {
                        if (val >= 1000000 || val<-1000000) {  ///here
                            val = val / 1000000;
                            return val.toFixed(1)+"M";
                            } 
                        if (val >= 1000 || val<-1000) {  ///and here
                            val = val / 1000;
                                if (val < 10) {
                                    return val.toFixed(1)+"K";
                                }
                            return val.toFixed(0)+"K";
                        }
                        return val;
                    }
于 2014-06-19T09:56:59.710 回答