【问题标题】:format y axis ticks/values in jqplot在 jqplot 中格式化 y 轴刻度/值
【发布时间】:2012-06-13 09:15:03
【问题描述】:

我发现下面的帖子很有用

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

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

我怎样才能做到这一点?在下面的函数中,我可以得到一个刻度 一个……但我需要提前得到它们,这样我才能决定 截断数字的因素。请忽略带逗号的函数。它只是一个例子。

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

【问题讨论】:

    标签: format jqplot axis


    【解决方案1】:

    起初我认为这就像从绘图本身中获取值一样简单 using a similar approach as here. 因此,我创建了 a sample which on click on any bar loops around the selected axis ticks. 这个问题是我们使用“私有”变量 _ticks 作为 @ 987654327@ 一个是空数组(因为它必须显式设置)。例如,这种方法不适用于我们设置 ticks 变量的 xaxis。

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

    针对 OP 的 EDIT 进行编辑:

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

    在这里,我使用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

    EDIT2:

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

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

    【讨论】:

    • @user930514 请在jsfiddle.net 中分享您的所有代码也许您遗漏了什么?
    • 请查看 EDIT2,它显示了如何在格式化程序中抓取刻度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多