4

私はjqPlot(バージョン1.0.2、私は信じています-7/25/12リリース)を使用して、さまざまな値で1日分の太陽エネルギー生産をレンダリングしています。1日の一部を拡大すると、グラフの間違った領域がレンダリングされることがよくあります。

プロットオプションは次のとおりです-

    var plotOptions = {
    series: [{ showMarker:false} ],
    axes: {
        xaxis:{
            renderer:jQuery.jqplot.DateAxisRenderer,
            tickOptions:{
                formatString:'%R'
            },
            min: data[0].time * 1000,
            max: data[data.length - 1].time * 1000
        },
        yaxis: {
            tickOptions: {
                formatString: '%.3f'
            }
        }
    },
    highlighter: {
        show : true,
        sizeAdjust: 7.5
    },
    cursor: {
        show : true,
        zoom: true,
        showToolTip: false
    }
};

データは、電気システム全体の1分間のサンプルであり、現在のデフォルト値は、1つのフェーズレッグのAC電流です(標準の北米の電気システム-120/240ボルトのAC電源)。通常、1日の1分ごとに1つずつ、1,440のサンプルがあります。

私が見ているのは、地域を選択することです。通常は4時間または6時間で、データの間違った部分がズームされています。たとえば、午前0時から午前8時を選択すると、代わりに午前4時から午前8時(または午前8時を少し過ぎてズームした場合は午前9時)がズームされます。これはかなり一貫性があります-表示されている範囲の後半-しかし、何が表示されるかについて韻や理由がなく、値が非常に近くにズームインされている可能性があり、何が何であるかわからない場合もあります。

私は例から大いに盗もうとしましたが、役に立ちませんでした。また、データセットのサイズを制限しようとしましたが、あまり役に立たないようです。

更新:生のタイムスタンプの使用からDate()オブジェクトの使用に切り替えてみましたが、役に立ちませんでした...

4

2 に答える 2

2

私はこれと同じ問題に遭遇しました。良いパッケージですが、Flotに切り替えることができませんでした。私はいくつか掘り下げて、答えを持っていたjqplot-usersgoogleグループでこの投稿を見つけました。

これが簡単な答えです。src \ plugins\jqplot.dateAxisRenderer.jsにバグがあります。投稿によると、回避策はdataAxisRenderer.jsファイルで次のことをコメントアウトすることです

min = new $.jsDate(min);
min = min.getTime() + min.getUtcOffset();

ただし、

min = new $.jsDate(min);
min = min.getTime();

必要かどうかにかかわらず、これを削除することは悪い考えかもしれません。何も気づいていませんが、これらの行を保持して削除するだけでよいと思いますmin.getUtcOffset()

于 2012-10-03T16:06:44.247 に答える
1

視覚的に魅力的なグラフやチャートを作成するための優れたプラグインであるjqPlotを過小評価しようとしないでください。また、ズーム機能を備えたグラフを作成するためのFlotもご覧になることをお勧めします。私は両方を試しましたが、 Flotはこの種の要件に対してより信頼性が高いことがわかりました。

Flotの使用中にDateTime軸を構成するためのいくつかのヒント( Flot Referenceから):

Flotでの時系列サポートは、Javascriptタイムスタンプに基づいており、次のようなタイムスタンプを確認できます。

alert((new Date()).getTime())

.NETでは、次の方法で適切なタイムスタンプを取得できます。

public static int GetJavascriptTimestamp(System.DateTime input)
{
    System.TimeSpan span = new System.TimeSpan(System.DateTime.Parse("1/1/1970").Ticks);
    System.DateTime time = input.Subtract(span);
    return (long)(time.Ticks / 10000);
}

そして、いくつかの時間形式は、このSOの質問で説明されています。

于 2012-08-10T01:48:41.253 に答える