2016-08-24 7 views
5

私はGoogleグラフを使っていくつかのグラフを作成しようとしています。 私の目標は、PHPページからデータを読み込み、自動更新することです。 私はこれを行うことができましたが、データが更新されると、ゲージラインはアニメーション化されず、新しいものから再描画されます。私はこのようなクールなアニメーションを見たいと思います:https://jsfiddle.net/api/post/library/pure/。 実際に私は静的なファイルからデータをロードしています。その後、MySQLデータベースからデータを作成します(テスト済みで作業済み)。ここ 私のコード:Googleグラフ - ゲージグラフアニメーションが機能しない

temperature.phpここ

<html> 
<head> 
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  </script> 
<script type="text/javascript"> 
    google.charts.load('current', {'packages':['gauge']}); 
    google.charts.setOnLoadCallback(drawChart); 

    function drawChart() { 

     var jsonData = $.ajax({ 
     url: "http://URL/fetch_data3.php?type=gauge", 
     dataType:"json", 
     async: false 
    }).responseText; 


    var data = new google.visualization.DataTable(jsonData); 

    var options = { 
     width: 600, height: 300, 
     redFrom: 35, redTo: 50, 
     yellowFrom: 24, yellowTo: 35, 
     greenFrom: 18, greenTo: 24, 
     majorTicks : ['-10', '0', '10','20','30','40','50'], minorTicks: 10, 
     animation:{ 
     duration: 1000, 
     easing: 'inAndOut', 
     }, 
     max: 50, min: -10 
     }; 

     var chart = new google.visualization.Gauge(document.getElementById('chart_div')); 

    chart.draw(data, options); 
    clearChart(); 

} 

setInterval(function() { 
    drawChart(); 
}, 5000); 

</script> 

</head> 
<body> 
<div id="chart_div" style="width: 500px; height: 400px;"></div> 
</body> 
</html> 

とfetch_data3.php

<?php 
if ($_REQUEST["type"] == "gauge") { 
    $sec = date('s'); 
if ($sec % 2 == 0) { 
    $string = file_get_contents("sampleData.json"); 
} else { 
    $string = file_get_contents("sampleData2.json"); 
} 
echo $string; 
} 
?> 

sampleData.json:

{ 
    "cols": [ 
     {"id":"","label":"Label","pattern":"","type":"string"}, 
     {"id":"","label":"Value","pattern":"","type":"number"} 
     ], 
    "rows": [ 
     {"c":[{"v":"Esterno","f":null},{"v":0,"f":null}]}, 
     {"c":[{"v":"Soggiorno","f":null},{"v":0,"f":null}]}, 
     {"c":[{"v":"Stanza","f":null},{"v":0,"f":null}]} 
     ] 
} 

sampleData2.json:

{ 
    "cols": [ 
     {"id":"","label":"Label","pattern":"","type":"string"}, 
     {"id":"","label":"Value","pattern":"","type":"number"} 
     ], 
    "rows": [ 
     {"c":[{"v":"Esterno","f":null},{"v":10,"f":null}]}, 
     {"c":[{"v":"Soggiorno","f":null},{"v":40,"f":null}]}, 
     {"c":[{"v":"Stanza","f":null},{"v":20,"f":null}]} 
     ] 
} 

グラフにはsampleData2.jsonまたはsampleData.jsonがランダムに読み込まれますが、グラフにアノテーションはありません。

どういうところが間違っていますか?

ありがとうございます!

サイモン

+0

https://jsfiddle.net/api/post/library/pure /は空白です:) –

+0

申し訳ありませんが、Googleドキュメントに示されているアノテーションに基づいています。https://google-developers.appspot.com/chart/interactive/docs/gallery/gauge – Simon

答えて

3

データの値が

を変更したときにチャートがstartupでアニメートしないので、ゲージチャートのsupported modificationsによれば、
アニメーションのみ発生し、
最初にグラフを描きますminの値を
に設定するか、アニメーションを開始する値を

に設定しますその後、実際のデータ
でチャートを描画する1時間'ready'イベントリスナーを使用し、これはチャートがアニメーションするようになります

が作業スニペットを次のように表示

...

google.charts.load('current', { 
 
    callback: function() { 
 
    drawChart(); 
 

 
    setInterval(function() { 
 
     drawChart(); 
 
    }, 5000); 
 

 
    function drawChart() { 
 
     var initData = { 
 
     "cols": [ 
 
      {"id":"","label":"Label","pattern":"","type":"string"}, 
 
      {"id":"","label":"Value","pattern":"","type":"number"} 
 
     ], 
 
     "rows": [ 
 
      {"c":[{"v":"Esterno","f":null},{"v":-10,"f":null}]}, 
 
      {"c":[{"v":"Soggiorno","f":null},{"v":-10,"f":null}]}, 
 
      {"c":[{"v":"Stanza","f":null},{"v":-10,"f":null}]} 
 
     ] 
 
     }; 
 

 
     var data = new google.visualization.DataTable(initData); 
 

 
     var options = { 
 
     width: 600, height: 300, 
 
     redFrom: 35, redTo: 50, 
 
     yellowFrom: 24, yellowTo: 35, 
 
     greenFrom: 18, greenTo: 24, 
 
     majorTicks : ['-10', '0', '10','20','30','40','50'], minorTicks: 10, 
 
     animation:{ 
 
      duration: 1000, 
 
      easing: 'inAndOut' 
 
     }, 
 
     max: 50, min: -10 
 
     }; 
 

 
     var chart = new google.visualization.Gauge(document.getElementById('chart_div')); 
 

 
     google.visualization.events.addOneTimeListener(chart, 'ready', function() { 
 
     var jsonData = { 
 
      "cols": [ 
 
      {"id":"","label":"Label","pattern":"","type":"string"}, 
 
      {"id":"","label":"Value","pattern":"","type":"number"} 
 
      ], 
 
      "rows": [ 
 
      {"c":[{"v":"Esterno","f":null},{"v":10,"f":null}]}, 
 
      {"c":[{"v":"Soggiorno","f":null},{"v":40,"f":null}]}, 
 
      {"c":[{"v":"Stanza","f":null},{"v":20,"f":null}]} 
 
      ] 
 
     }; 
 

 
     var data = new google.visualization.DataTable(jsonData); 
 
     chart.draw(data, options); 
 
     }); 
 

 
     chart.draw(data, options); 
 
    } 
 
    }, 
 
    packages:['gauge'] 
 
});
<script src="https://www.gstatic.com/charts/loader.js"></script> 
 
<div id="chart_div"></div>

上記の

は、上記の図表はアニメーション化されます...

のデフォルト値が実際のデータに変更されました

グラフをアニメーション化するには...前回の実際のデータから

- 新しいデータを使用すると、毎回それはまた

を引かれ、代わりに新しいchartを作成するchart
への参照を保存する必要があります

を受信します、を強くお勧めしますasync: false$.ajaxに電話する
代わりにsuccessハンドラを使用してください

は、各区間に新しいデータに、
は、以前のデータから、アニメーションのデフォルト値を使用して初期ドローにアニメーション化されます。この設定をお勧めします

google.charts.load('current', { 
    callback: function() { 
    // save reference to chart 
    var chart = null; 

    drawChart(); 

    setInterval(function() { 
     drawChart(); 
    }, 5000); 

    function drawChart() { 
     $.ajax({ 
     url: 'http://URL/fetch_data3.php?type=gauge', 
     dataType: 'json', 
     success: function (jsonData) { 
      var options = { 
      width: 600, height: 300, 
      redFrom: 35, redTo: 50, 
      yellowFrom: 24, yellowTo: 35, 
      greenFrom: 18, greenTo: 24, 
      majorTicks : ['-10', '0', '10','20','30','40','50'], minorTicks: 10, 
      animation:{ 
       duration: 1000, 
       easing: 'inAndOut' 
      }, 
      max: 50, min: -10 
      }; 

      var data; 
      if (chart === null) { 
      chart = new google.visualization.Gauge(document.getElementById('chart_div')); 

      // data with min values 
      data = new google.visualization.DataTable({ 
       "cols": [ 
       {"id":"","label":"Label","pattern":"","type":"string"}, 
       {"id":"","label":"Value","pattern":"","type":"number"} 
       ], 
       "rows": [ 
       {"c":[{"v":"Esterno","f":null},{"v":-10,"f":null}]}, 
       {"c":[{"v":"Soggiorno","f":null},{"v":-10,"f":null}]}, 
       {"c":[{"v":"Stanza","f":null},{"v":-10,"f":null}]} 
       ] 
      }); 

      google.visualization.events.addOneTimeListener(chart, 'ready', function() { 
       data = new google.visualization.DataTable(jsonData); 
       chart.draw(data, options); 
      }); 
      } else { 
      data = new google.visualization.DataTable(jsonData); 
      } 

      chart.draw(data, options); 
     } 
     }); 
    } 
    }, 
    packages:['gauge'] 
}); 
+0

ありがとうございました。 ! – Simon

関連する問題