3

私が達成しようとしていることはかなり一般的なタスクであるはずだと思いますが、それを機能させるのに苦労しています。ISO8601タイムスタンプと複数のデータポイントを(レコードごとに)含むデータセットからマルチシリーズプロットを作成したいだけです。データはJSON形式であり、dojox.charting.chartの「Lines」タイプを使用しています。

Dojoチャートは、ISO8601は言うまでもなく、時間ベースの軸データを直接処理できないことをすでに知っています。したがって、T0以降のサーバー側でx軸をミリ秒に変換する方法についてはすでに説明しました。

これが私のJSONの抜粋例です。

[{"Offset_ms":0,"CP":250.58368,"TP":181.88211},
{"Offset_ms":360000,"CP":233.18443,"TP":119.94824},
{"Offset_ms":540000,"CP":227.15465,"TP":117.99422},
{"Offset_ms":720000,"CP":222.87495,"TP":117.55895},
{"Offset_ms":896000,"CP":218.19876,"TP":117.64221},
{"Offset_ms":900000,"CP":219.77487,"TP":117.93475}]

そして、蒸留されたJavaScript(上記のJSONが変数'sequenceData'にあると仮定します):

var chart = new dojox.charting.Chart("sequenceDataGraph");

chart.addPlot("default", {
    type: "Lines",
    tension: "X"
});
chart.addAxis("x", { labelFunc: labelTimeAxis });
chart.addAxis("y", { vertical: true });

var sequenceDataStore = new dojo.store.Observable(new dojo.store.Memory({
    data: {
        label: "Sequence",
        items: sequenceData
    }
}));

addSequenceDataSeries(chart, sequenceDataStore, "TP");
addSequenceDataSeries(chart, sequenceDataStore, "CP");

chart.render();

function addSequenceDataSeries(chart, sequenceDataStore, sColumnName) {
    chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} },
                    sColumnName));
}

起こっているように見えるのは、Dojo Chartがx軸データをまったく使用しておらず、代わりにデータポイントの数に基づいて一定の間隔で各ポイントをプロットしていることです。つまり、Offset_msが単に1、2、3 ...である場合など、各データポイントには順序が割り当てられているように見えます。私のデータポイントは常に一定の間隔であるとは限らないため、結果のグラフは歪んでいます。

x軸コンポーネントのJSONデータで「Offset_ms」フィールドを使用するようにDojoChartに指示するにはどうすればよいですか?

私はチュートリアル、APIドキュメントを精査し、GoogleとSOの検索を何度も実行しましたが無駄になりました。Dojoソースの一部、特にStoreSeries.js.uncompressed.jsを閲覧したこともありますが、答えが見つかりません。確かにこれは可能であり、うまくいけば些細なことです!

4

1 に答える 1

4

残念ながら、公式の道場のドキュメントは深刻に不足しており、私は道場のソースを閲覧することによって同様のことを行う方法を理解しただけです。具体的には、StoreSeriesテストの135行目、http: //archive.dojotoolkit.org/nightly/dojotoolkit/dojox/charting/tests/test_StoreSeries.html

StoreSeriesコンストラクターの3番目の引数は、X軸とY軸をデータストアの特定のフィールドにマップするオブジェクトを受け入れます。

これからコードの次の行を変更します。

chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} },
                sColumnName));

これに:

chart.addSeries(sColumnName, new dojox.charting.StoreSeries(sequenceDataStore, { query: {} }, 
                { x: "Offset_ms", y: sColumnName }));

sColumnNameになります{ x: "Offset_ms", y: sColumnName }

于 2012-06-13T16:29:37.467 に答える