何百ポイントもの株価チャートや折れ線グラフを描くにはどうすればよいですか?通常の折れ線グラフでアニメーションを無効にしましたが、成功せず、重すぎて遅すぎます。
5 に答える
私は最近、Ext JS 4 での株価チャートの作成に関するブログ記事を書きました - http://www.scottlogic.co.uk/2011/12/ext-js-4-stock-charts/。数百ポイントを使用し、最新のブラウザーで問題なく動作し、IE7-8 でもそれほど悪くはありません。
ただし、Ext JS ビルド システムをいじった後でも、チャートを実行するために必要な Ext ビルドの最小サイズは .5MB 程度であり、アプリケーションによっては重すぎます。ただし、CSS はいくつかのルールに切り詰めることができます - 巨大な ext-all.css から必要なものを見つけようと時間を費やすつもりなら!
私のアプリは完全に Ext-JS ベースです。ただし、パフォーマンスが問題になる場合は、flot を使用します。API の設計は大幅に改善されており (私は Ext-JS のファンです)、パフォーマンスも大幅に向上しています。これは、チャートを操作する必要がある場合に、生のピクセル データ (ピクセル ベースのキャンバス) を操作することを犠牲にしています。Ext-JS ではすべてが SVG オブジェクトであるため、単純にイベント ハンドラーを線やその他自分で描画したものにアタッチできます。
例えば。波形モニターには flot を使用します。ユーザーが画面上でいくつかの線をドラッグ アンド ドロップできる別のチャートでは、Ext-JS チャートを使用します。
flot を Ext.Component として使用する単純なラッパーを次に示します。
Ext.define('cci.view.wavemon.Flot', {
extend: 'Ext.Component',
alias: 'widget.cci-flot',
/**
* @cfg {number[][]} data The data to be drawn when it gets rendered
*/
data: null,
/**
* @cfg {object} flotOptions
* The options to be passed in to $.plot
*/
flotOptions: null,
/**
* @property
* The Flot object used to render the chart and to manipulate it in the future. It will only
* be available after the first resize event
* You may not set this property but you are free to call methods on it
*/
flot: null,
initComponent: function() {
this.callParent(arguments);
// The only time that we're guaranteed to have dimensions is after the first resize event
this.on('resize', function(comp) {
if (!this.flot) {
this.flot = $.plot(this.getTargetEl().dom, this.data, this.flotOptions);
} else {
// Flot knows to look at the containers size and resize itself
this.flot.resize();
}
}, this);
}
});
動的に extjs コード (php、python、asp.net...) を生成し、データ ソースが静的である場合は、簡単にチャートを png に生成して ext.panel にロードできます。
Sencha Charts の株価チャートを作成する方法の完全な例がここにあります:
http://dev.sencha.com/deploy/touch-charts-1.0.0/examples/Stock/
ご覧のとおり、この例では 100 個を超えるデータ ポイントを簡単に処理できます。
この例はタッチ チャート用ですが、API は Sencha の ExtJS 4 のものとほぼ同じです。チャートのインスタンス化コードをコピーして貼り付ければ、うまくいくはずです。
flot (http://code.google.com/p/flot/) は多くのポイント/シリーズでパフォーマンスがはるかに優れていることがわかりましたが、ExtJS 4 チャートのパフォーマンスは受け入れられませんでした。また、Flot にはより明確な API があり、単純な形式でデータを読み取ります。