2

Jsonを介して複数のデータをHighstockチャートに渡そうとして問題が発生しました。これまでのコードは、次のとおりです。

    $(function() {
    var seriesOptions = [],
        yAxisOptions = [],
        seriesCounter = 0,
        names = ['MSFT', 'AAPL'],
        colors = Highcharts.getOptions().colors;

    $.each(names, function(i, name) {

        $.getJSON('data.php',   function(data) {

            seriesOptions[i] = {
                name: name,
                data: data
            };

            // As we're loading the data asynchronously, we don't know what order it will arrive. So
            // we keep a counter and create the chart when all the data is loaded.
            seriesCounter++;

            if (seriesCounter == names.length) {
                createChart();
            }
        });

    });



    // create the chart when all data is loaded
    function createChart() {

        chart = new Highcharts.StockChart({
            chart: {
                renderTo: 'container'
            },

            rangeSelector: {
                selected: 4
            },

            yAxis: {
                labels: {
                    formatter: function() {
                        return (this.value > 0 ? '+' : '') + this.value + '%';
                    }
                },
                plotLines: [{
                    value: 0,
                    width: 2,
                    color: 'silver'
                }]
            },

            plotOptions: {
                series: {
                    compare: 'percent'
                }
            },

            tooltip: {
                pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b> ({point.change}%)<br/>',
                valueDecimals: 2
            },

            series: seriesOptions

        });
    }
});

そしてこれは私のdata.phpファイルです:

$query = "SELECT tiempo,Fp1Ref,F7Ref
            FROM GraficaEEG limit 10";
    $data = mysqli_query($dbc, $query);
    $i=0;
    while($row = mysqli_fetch_array($data)) {

        $rows[$i]=array((float)$row['tiempo'],(float)$row['Fp1Ref']); 
        $rows1[$i]=array((float)$row['tiempo'],(float)$row['F7Ref']); 


        $i++;
    }

    echo json_encode($rows), "\n";
    echo json_encode($rows1);

そして、この形式でデータを受信して​​います。

[[0,3001],[0.005,4937.22],[0.01,4130.55],[0.015,4213.15],[0.02,4010.61],[0.025,3914.34],[0.03,3785.33],[0.035,3666.13],[0.04,3555.25],[0.045,3447.77]]

[[0,2995.12],[0.005,4931.59],[0.01,4125.99],[0.015,4203.38],[0.02,4005.27],[0.025,3911.41],[0.03,3777.35],[0.035,3659.15],[0.04,3552.75],[0.045,3442.12]]

何が間違っているのか、2セットのデータをHighstockチャートに渡す方法がわかりません。単一の$行だけを渡すと機能しますが、3行で同じデータが得られます。どんな助けにも非常に感謝するでしょう。

4

2 に答える 2

1

Highstock にデータを渡す方法は 3 つあります。

  1. 数値のリスト。例えばdata: [0, 5, 3, 5]

  2. 2 つの値を持つ配列のリストdata: [[5, 2], [6, 3], [8, 2]]

  3. 名前付きの値を持つオブジェクトのリスト。

例えば

data: [{
    name: 'Point 1',
    color: '#00FF00',
    y: 0
}, {
    name: 'Point 2',
    color: '#FF00FF',
    y: 5
}]

行ごとに Json オブジェクトを作成し、それらを Json 配列に格納できます。次に、複数の Json 配列と異なるキーを持つ各配列を保持する別の Json オブジェクトでキーとも呼ばれる名前付き属性を使用して Json 配列を渡します。

返された Response で、キーを使用して各配列を取得します。

詳細については、ドキュメントを確認してください: http://api.highcharts.com/highstock#series.data

私はPHPに取り組んだことがないので、直接はできませんが、これが役立つことを願っています.

于 2012-10-01T09:42:54.173 に答える
0

データを非同期的にロードする代わりに、最終的なデータ文字列を保持する変数を Javascript にダンプするだけです。

例えば、

chart = new Highcharts.StockChart({
          chart: { renderTo: 'container' },

          ...all those chart options...

          series: <?php echo $formattedDataString; ?>

        });


そのため、Highcharts が読み込まれると、すべてのデータが既に配置されています。これはもちろん、Hardik が述べたように、データが適切な形式であることを前提としています。
また、データを動的に更新する必要がある場合でも、AJAX 呼び出しと .update() チャートを作成できます。

于 2014-12-08T18:22:23.687 に答える