在jqplot中格式化y轴刻度/值

时间:2012-06-13 09:15:03

标签: format jqplot axis

我发现以下主题非常有用

http://groups.google.com/group/jqplot-users/browse_thread/thread/1986 ...

我想得到数组中的所有y轴值或刻度...我的 意图是计算每个刻度中的位数 找到最常见的位数。 基于我计划截断y轴的位数 蜱/值。 例如:如果大多数刻度线有6位数,则截断为3位数 并将单词(以千计为单位)附加到轴标签上。

我怎样才能做到这一点?在下面的函数中,我可以得到一个滴答 一个...但我需要提前得到它们,以便我可以决定 截断数字的因素是什么。请忽略函数numberwithCommas.Its只是一个例子。

(function($) {
    $.jqplot.tickNumberFormatter = function (format, val) {
        if (typeof val == 'number') {
            if (!format) {
                format = '%.1f';
            }
            return numberWithCommas($.jqplot.sprintf(format, val));
        }
        else {
            return String(val);
        }
    };

    function numberWithCommas(x) {
        return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
    } 

@Boro:非常感谢您的回复。你能告诉我这条线到底是什么吗?

   var ticks = $('.jqplot-' + axisName + '-tick'); 

同一行在我的代码中不起作用。我该如何使用它?

在控件进入格式化程序之前,我可以使用它将所有刻度线推入数组吗?换句话说,我可以在控件进入以下函数之前得到所有的滴答声吗?

   $.jqplot.tickNumberFormatter = function (format, val) {

以下代码在您的示例中运行良好。为什么它不适用于我的:(

                var axisName = 'yaxis';
                var count = 0;
                var ticks = $('.jqplot-' + axisName + '-tick');
                for (count = 0; count <= ticks.length; count++)
                    {

                console.log($(ticks[count]).text());
                    }

1 个答案:

答案 0 :(得分:3)

起初我认为它就像从图表中获取值一样容易using a similar approach as here.因此,我创建了a sample which on click on any bar loops around the selected axis ticks.这个问题的一个问题是我们正在使用'private'变量{{ 1}}因为_ticks是一个空数组(因为它必须显式设置)。例如,使用xaxis设置ticks变量时,此方法不起作用。

因此,为了获得所有标记,不管是否由您设置,我会使用ticks并在您需要时抓住它们as presented in this code。虽然,考虑到这一点,如果格式化程序在绘图完成之前起作用,HTML元素可能还没有抓住它们,但您可以自己测试它。如果这种方法不起作用,您可以始终根据设置的刻度调整第一种方法以采取不同的行动。

编辑以响应OP的编辑:

能告诉我这一行的确切内容吗?

在这里,我使用jQuery来捕获由其名称(jQuery)指定的轴的刻度。为此之前我使用它,我指定axisName变量。您可以将其替换为:var axisName = 'yaxis';

在谈到其他问题时,我可能会在第一个答案结束时提及,即var ticks = $('.jqplot-yaxis-tick');

<强> EDIT2:

Check out this sample.它抓住格式化程序中的刻度,因为你可以观察到它们有时它们为零,可能是因为格式化程序是在创建刻度HTML元素之前调用的。因此,只有在有一些滴答时应用您的算法,否则应用默认格式,看看这种方法是否有效。

它仍然可能无法工作,因为我们不知道发生了什么,例如,为什么在控制台中我们if the formatter acts before the plot is finished the HTML elements might not be there yet to grab them变量等于20表示格式化程序被调用的次数{{1} }。为什么变量不等于21或其他可被7整除的数字(即滴答数)?