グラフを操作する

ここまでに説明した内容では、グラフを描画した多くのウェブページで十分です。しかし、ユーザーのクリックを把握したい場合、またはすでに描画済みのプロパティやデータを操作する必要がある場合は、グラフによってスローされたイベントをリッスンする必要があります。

すべてのグラフで、なんらかのイベントがスローされます。最も多い原因は次のとおりです。

  • ready - ページにグラフが描画され、メソッドに応答できるときにスローされます。グラフの情報をリクエストする必要がある場合は、このイベントをリッスンします。
  • select - ユーザーがグラフ上の項目を選択したときにスローされます。通常はバーまたは円グラフのスライスをクリックすることで発生します。
  • error - DataTable の形式が正しくないため、渡されたデータをグラフでレンダリングできない場合にスローされます。
  • onmouseoveronmouseout: ユーザーが特定のグラフ要素にカーソルを合わせるかカーソルを外したときにスローされます。

イベントのリッスンは簡単です。google.visualization.events.addListener() を呼び出して、ハンドルをグラフに渡す、キャッチするイベントの名前、イベントがスローされたときに呼び出すハンドラの名前を渡すだけです。このメソッドは、draw() をまだ呼び出していない場合でも、任意のグラフ ハンドルで呼び出すことができます。リスナーを削除する前に google.visualization.events.addOneTimeListener() を呼び出すことで、リスナーを一度だけ呼び出すことができます。

部分的なコード スニペットは、グラフの select イベントをキャッチするために登録する方法を示す部分的なコードです。

load libraries...

function drawChart() {

  prepare data
...

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

 
// The select handler. Call the chart's getSelection() method
 
function selectHandler() {
   
var selectedItem = chart.getSelection()[0];
   
if (selectedItem) {
     
var value = data.getValue(selectedItem.row, selectedItem.column);
      alert
('The user selected ' + value);
   
}
 
}

 
// Listen for the 'select' event, and call my function selectHandler() when
 
// the user selects something on the chart.
  google
.visualization.events.addListener(chart, 'select', selectHandler);

  draw the chart
...

}

新しい select イベント リスナーを使った Hello Charts コードの例を以下に示します。実際に試す

<html>
 
<head>
   
<!--Load the AJAX API-->
   
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   
<script type="text/javascript">

     
// Load the Visualization API and the piechart package.
      google
.charts.load('current', {'packages':['corechart']});

     
// Set a callback to run when the Google Visualization API is loaded.
      google
.charts.setOnLoadCallback(drawChart);

     
// Callback that creates and populates a data table,
     
// instantiates the pie chart, passes in the data and
     
// draws it.
     
function drawChart() {

       
// Create the data table.
       
var data = new google.visualization.DataTable();
        data
.addColumn('string', 'Topping');
        data
.addColumn('number', 'Slices');
        data
.addRows([
         
['Mushrooms', 3],
         
['Onions', 1],
         
['Olives', 1],
         
['Zucchini', 1],
         
['Pepperoni', 2]
       
]);

       
// Set chart options
       
var options = {'title':'How Much Pizza I Ate Last Night',
                       
'width':400,
                       
'height':300};
 
       
// Instantiate and draw our chart, passing in some options.
       
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));

       
function selectHandler() {
         
var selectedItem = chart.getSelection()[0];
         
if (selectedItem) {
           
var topping = data.getValue(selectedItem.row, 0);
            alert
('The user selected ' + topping);
         
}
       
}

        google
.visualization.events.addListener(chart, 'select', selectHandler);    
        chart
.draw(data, options);
     
}

   
</script>
 
</head>
 
<body>
   
<!--Div that will hold the pie chart-->
   
<div id="chart_div" style="width:400; height:300"></div>
 
</body>
</html>

 

詳細情報