Interagir avec le graphique

Ce que nous avons vu jusqu'ici suffit pour de nombreuses pages Web: vous avez dessiné votre graphique sur la page. Toutefois, si vous souhaitez intercepter les clics des utilisateurs, ou si vous devez manipuler des propriétés ou des données dans un graphique que vous avez déjà dessiné, vous devez écouter les événements déclenchés par le graphique.

Tous les graphiques génèrent des événements. Voici les plus courantes :

  • ready : lorsque le graphique est dessiné sur la page et qu'il est prêt à répondre aux méthodes. Écoutez cet événement si vous devez demander des informations au graphique.
  • select: lorsque l'utilisateur sélectionne un élément du graphique, il clique généralement sur une barre ou un secteur.
  • error : générée lorsque le graphique ne peut pas afficher les données transmises, généralement parce que le format DataTable est incorrect.
  • onmouseover et onmouseout : respectivement lorsque l'utilisateur déplace le curseur de la souris sur un élément de graphique spécifique.

Écouter des événements est simple. Il vous suffit d'appeler google.visualization.events.addListener() en transmettant un handle au graphique, le nom de l'événement à intercepter et le nom d'un gestionnaire à appeler lorsque l'événement est déclenché. Vous pouvez appeler cette méthode avec n'importe quel descripteur de graphique, même si vous n'avez pas encore appelé draw(). Notez que vous pouvez appeler google.visualization.events.addOneTimeListener() si vous souhaitez que l'écouteur soit appelé exactement une fois avant de se supprimer.

Voici un extrait de code partiel qui montre comment s'inscrire pour détecter l'événement select d'un graphique:

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...

}

Voici l'exemple de code Hello Charts avec un nouvel écouteur d'événements "select". Essayez par vous-même.

<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>

 

En savoir plus