0

背景: ハイストック チャートでユーザーに表示する日中のデータがあります。チャートに午前 8 時から午後 4 時 30 分までの「取引時間」のみを表示したいので、チャートに静的な tickPositions を作成します (これらの時間帯は 2 時間ごと)。2 日または 5 日分のデータをユーザーに表示します。現在の日付/時刻までのすべてのデータを含むグラフをロードすると、適切に表示されます。

問題: データをチャートに動的に追加していますが、ポイントを追加するとあまりアクティブではない (毎分ティックがない) チャートでは、チャート データがシフトします。私はビデオでこれをキャプチャしました:

http://screencast.com/t/gPbrtpHHGN

何がこれを引き起こしているのか知っていますか?xAxis で、min、max、および tickPositions を設定します。また、日の間の「仕切り」に plotLines を設定します。

何が起こっているのかを示すために、jsfiddle http://jsfiddle.net/jdrozd/t99Zk/を添付しています。

「データの追加 (+1 分)」をクリックすると、問題なく動作します (通常のデータ間隔)。

「Add Data (+10 minutes) - Wrong」をクリックすると、期待どおりに動作しません (シフト グラフ)。

[データの追加 (+10 分) - 右] をクリックすると、期待どおりに動作します。これを機能させるために、「null」データポイントを追加して、データを「通常」にしました。私はこれをしなければならないことを避けたい。目盛りを配置してデータを追加すると、データを正しく並べることができると思います。

null 値を挿入するデータを追加するコードは次のとおりです。

function addDataFixed (delay) {
    for(i=1; i<= delay;i++){
        var val = null;
        var minutesToAdd = maxMinutes + i;
        if(i === delay){
            val = getRandomArbitary(102.95,103.4);
        }
        var date = new Date(2013,1,11);
        date.setHours(14);
        date.setMinutes(minutesToAdd);
        var pointData = [date.getTime(),val];
        chart.series[0].addPoint(pointData,false);
    }
    chart.redraw();
    maxMinutes += delay;                
};
4

1 に答える 1

1

Highstock/Highcharts では、実際のグループ化されたデータを取り、そのオプションを使用してデータを設定することはできません。動作させるには多くのカスタム プロパティが必要です。chart.series[0].options.dataすべてのポイントを取得してからデータを設定するだけです。 http://jsfiddle.net/t99Zk/9/を参照してください。

別の解決策は、(グループ化されたデータを本当に使用する必要がある場合) すべてのポイントをループし、x と y の新しい配列 ([x, y] または {x: x, y: y}) を作成することです。

于 2013-02-12T12:29:45.687 に答える