2

我发现以下线程非常有用

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

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

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

(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());
                    }
4

1 回答 1

3

起初我认为这就像使用与此处类似的方法从情节本身中获取值一样简单。因此,我创建了一个示例,单击该示例围绕选定的轴刻度线循环。这个问题是我们使用“私有”变量_ticksticks因为它是一个空数组(因为它必须显式设置)。例如,这种方法不适用于我们设置ticks变量的 xaxis。

因此,要获取所有刻度,无论它们是否由您设置,我会jQuery在您需要它们时使用并获取它们,如本代码所示。不过,考虑一下,如果格式化程序在情节完成之前采取行动,HTML 元素可能还没有抓取它们,但您可以自己测试它。如果这种方法不起作用,您可以随时调整第一种方法以根据是否设置的分时采取不同的行动。

编辑响应 OP 的编辑:

你能告诉我这条线到底是做什么的吗?

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

当涉及到您的其他问题时,我在第一个答案的结尾可能会提到这种情况,即if the formatter acts before the plot is finished the HTML elements might not be there yet to grab them

编辑2:

看看这个样本。它抓取格式化程序中的刻度,因为您有时可以观察到它们为零,这可能是因为格式化程序是在创建刻度 HTML 元素之前调用的。因此,只需在有一些刻度时应用您的算法,否则应用默认格式,看看这种方法是否有效。

它仍然可能不起作用,因为我们不知道发生了什么,例如,为什么在控制台中我们有一个ticksNoZeroCounter等于 20 的变量,它表示调用格式化程序的次数和ticks.size() !== 0. 为什么变量不等于 21 或其他可被 7 整除的数字(即刻度数)?

于 2012-06-13T10:30:50.840 回答