2

次のスレッドはとても便利だと思いました

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

配列内のすべてのy軸の値または目盛りを取得したいのですが...私の意図は、各目盛りの桁数をカウントし、最も頻繁な桁数を見つけることです。y軸の目盛り/値の桁数を切り捨てる計画に基づいています。例:ほとんどの目盛りが6桁の場合は、3桁に切り捨てて、軸ラベルに単語(千単位)を追加します。

どうすればこれを達成できますか?以下の関数では、ティックを1つずつ取得できますが、数値を切り捨てる要素を決定できるように、事前に取得する必要があります。関数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

最初は、ここと同様のアプローチを使用してプロット自体から値を取得するのと同じくらい簡単だと思いました。したがって、選択した軸の目盛りの周りのバーループをクリックするとサンプルを作成しました。_ticksこれの問題は、ticks1つが空の配列であるため(明示的に設定する必要があるため)、「private」変数を使用していることです。このアプローチは、たとえば、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

EDIT2:

このサンプルをチェックしてください。フォーマッター内のティックを取得します。これは、ティックのHTML要素が作成される前にフォーマッターが呼び出されたためか、ゼロになることがあるためです。したがって、いくつかのティックがある場合はアルゴリズムを適用し、そうでない場合はデフォルトのフォーマットを適用して、このアプローチが機能するかどうかを確認してください。

何が起こっているのかわからないため、まだ機能しない可能性があります。たとえば、コンソールにticksNoZeroCounter、フォーマッターが呼び出された回数を表す20に等しい変数があるのはなぜですかticks.size() !== 0。変数が21または7で割り切れる他の数値(つまり、ティック数)に等しくないのはなぜですか?

于 2012-06-13T10:30:50.840 に答える