5

次のコードがあります: http://jsfiddle.net/maniator/vTjW8/

var createChartTemplate = function() {
    return {
        chart: new Highcharts.StockChart({

            chart: {
                renderTo: 'container'
            },
            series: []
        }),
        addSeries: function(name) {
            this.chart.addSeries({
                name: name,
                data: [],
                id: Math.floor(Math.random()*1000)
            });
        },
        addPoint: function(data, series) {
            var seriesIndex = this.seriesExists(series);
            if (!(seriesIndex === false)) {
                this.chart.series[seriesIndex].addPoint(data, false);
            }
            this.chart.redraw();
        },
        seriesExists: function(series) {
            var seriesIndex = false;
            $.each(this.chart.series, function(index, item) {
                if ($.trim(item.name) == $.trim(series)) {
                    seriesIndex = index;
                    return false;
                }
            });
            return seriesIndex;
        }
    }
}
$(function() {
    var data = usdeur.splice(0, 700);
    var chart = createChartTemplate();
    chart.addSeries("New Series");
    for (var i = 0; i < data.length; i++) {
        chart.addPoint(data[i], "New Series");
    }

});

コンソールに次のエラーがあります。

キャッチされていない TypeError: 未定義のプロパティ 'options' を読み取ることができません

このコードは、通常のハイチャートであれば正常に機能しますが、何らかの理由で HighStock チャートでは機能しません。

必要なグラフの種類で動作するようにするにはどうすればよいですか?


アップデート:

最初のシリーズを動的に取得する方法を見つけましたが、2番目のシリーズを追加しようとすると、次のエラーが発生します。

キャッチされていない TypeError: 未定義のプロパティ 'stacks' を読み取れません

フィドル: http://jsfiddle.net/maniator/V5WAJ/

4

6 に答える 6

7

空のシリーズでグラフを作成しているため、エラーが発生します。コードのこの行が実行されると、seriesオプションが設定される前に、すぐにハイチャートが初期化されます。

var chart = createChartTemplate();

最初にシリーズ配列を構築し、最後のステップでコンストラクターのオプションに追加すると、Highcharts の経験が向上しました。

あなたの例に固有のusdeur.jsファイルには、初期化されたデータの配列が既に含まれています。オプション配列で渡すだけです。あなたのjsfiddleはこれに簡略化できます。

$(function() {
    var chart = new Highcharts.StockChart({
        chart: {
            renderTo: 'container'
        },
        series: [{
            name: 'New Series',
            data: usdeur
        }]
    });
});
于 2011-10-06T14:44:22.803 に答える
2

1 つの回避策を見つけました。私の使用例は、経時的に値をプロットすることだったので、チャートに追加した最初の値は、nullデータ用の有効なタイムスタンプのペアでした:

series : [{
    name : 'Random data',
    data : (function() {
        var data = [], time = (new Date()).getTime();
        data.push([time, null]);                
        return data;
    })()
}]

次に、新しい値をプロットする必要があるときはいつでも、次のように単純に追加します。

var value = rawData['My Data Set']
var plot  = [new Date().getTime(), value]
mychart.series[0].addPoint(plot, true, false)

これはhereでテストできます。の元の定義を here のものに置き換えるだけseriesです。

于 2012-02-29T16:15:38.573 に答える
2

addSeries の HighStock API リファレンスから:

ナビゲーターが有効になっている StockChart では、ベース シリーズを動的に追加することはできません。

つまり、Navigator を使用している場合は、少なくとも 1 つのシリーズから開始する必要があります。同じ API リファレンスによると、Navigator はデフォルトで表示されます。

于 2013-02-05T15:08:34.153 に答える
0

動的に呼び出される関数で次のコードを使用して、highstock オプションを回避できることがわかりました。series[0] = null 問題

options.series= [{data:[]}];

// you can now add the dynamic data, eg

options.series[0].data.push([time, val]);
于 2015-07-06T11:37:35.240 に答える